首页 > 代码库 > MVC模式
MVC模式
模式1把业务代码从JSP页面中分离了出去,减少了JSP的Java代码量,但在JSP页面中还有一些处理控制的Java代码。如果项目规模大,业务复杂,可能JSP中的处理控制的Java代码就会很杂乱。为了解决这个问题,可以把Servlet和 JSP结合起来,用Servlet接收用户提交的请求,调用业务方法,再转发给JSP页面显示结果 。以上所说的结构称为模式2。
模式2是一种MVC模式。MVC模式分为3层:业务层(Model)是进行业务处理的,表示层(View)是用来与用户交互的,控制层(Control)是进行流程控制的。
任务:查询一个表的数据
1,建立一个数据库表team。[id:int,key,autoincrement;name:varchar:slogan:varcha]。安装MySql=>打开Navicat=>在test数据库中建立team表,任意输入几个记录。
2.安装Tomcat7=>打开Eclipse->建立动态Web工程=>在Eclipse内部配置Tomcat7=>试验一个jsp以证明开发环境正常。
3.由于网站要用到Mysql,所以要将MySql的Java驱动放到Tomcat的Lib目录中,还要导入servlet-api.jar包到开发环境中。
4.做一个数据库的连接类database.DataSource,它的功能是连接到数据库,返回连接对象。以后要使用连接数据库只需调用下面的getConnection即可。
package database;
import java.sql.Connection;
import java.sql.DriverManager;
public class DataSource {
public static Connection getConnection() throws Exception{
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";
String user="root";
String password="11";
Connection cn=DriverManager.getConnection(url,user,password);
return cn;
}
}
4.做一个JavaBean:Team用来对应数据库表team的每一条记录。放在bean.Team中。
package bean;
public class Team {
private int id;
private String name;
private String slogan;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSlogan() {
return slogan;
}
public void setSlogan(String slogan) {
this.slogan = slogan;
}
}
5,完成业务类business.TeamBusiness,其中写一个查询功能。
public static Collection<Team> allTeams() throws Exception{
//泛型,返回的是一个元素类型为Team的集合
ArrayList<Team> teams=new ArrayList<Team>();
Connection cn=null;
Statement stmt=null;
ResultSet rs=null;
try{
cn=DataSource.getConnection();
stmt=cn.createStatement();
rs=stmt.executeQuery("select * from team");
while(rs.next()){
Team team=new Team();
team.setName(rs.getString("name"));
team.setSlogan(rs.getString("slogan"));
teams.add(team);
}
}catch(Exception e){
e.printStackTrace();
}
return teams;
}
6,建立并调试Servlet。ViewTeam。
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ViewTeam
*/
@WebServlet("/ViewTeam")
public class ViewTeam extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ViewTeam() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
在web.xml中的配置为:
<servlet>
<servlet-name>ViewTeam</servlet-name>
<servlet-class>servlet.ViewTeam</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ViewTeam</servlet-name>
<url-pattern>/servlet/viewTeam</url-pattern>
</servlet-mapping>
7,修改ViewTeam类,完成调度和转发工作:
try{
Collection<Team> teams=TeamBusiness.allTeams();
request.setAttribute("teams", teams);
RequestDispatcher rd=request.getRequestDispatcher("../mod2ViewTeams.jsp");
// RequestDispatcher是javax.servlet的转发处理对象
rd.forward(request, response);
}catch(Exception e){
e.printStackTrace();
}
8,完成jsp显示:
Collection<Team> teams=(Collection<Team>)request.getAttribute("teams");
Iterator<Team> it=teams.iterator();
while(it.hasNext()){
Team team=it.next();
%>
<p><%=team.getName() %>:<%=team.getSlogan() %>
<%
}
MVC模式