MVC案例分析科技小论文。
摘要:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
Web容器几大常用组件之间的关系,Servlet、JSP、JavaBean、DB

这几个组件之间的关系是MVC模式的基础。
经典MVC使用方法
请求到达Servlet,Servlet将它写到Bean里面(如果需要的话)
Servlet跳转到JSP
JSP来得到Bean里面的数据
下面就以MVC的方法完成一个模糊查询的界面,输入员工的模糊资料,能够查询出他的详细资料(编号、开始姓名、结束姓名、邮箱)。
首先建立一个模糊查询的页面queryForm.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>查询页面</title>
</head>
<body>
查找表单<br/>
<form action="/MyMVC/servlet/QueryServlet" method="post">请输入员工姓名
<input name="ename">
<input type="submit" value="模糊查询">
</form>
</body>
</html>
编写Servlet,QueryServlet.java
package wang.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import wang.dao.EmployeeDao;
import wang.po.Employee;
public class QueryServlet extends HttpServlet {
public QueryServlet() {
super();
}
public void destroy() {
super.destroy();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("ename");
name = new String(name.getBytes("ISO-8859-1"));
EmployeeDao employeeDao = new EmployeeDao();
List<Employee> employees = employeeDao.queryEmployeeByName(name);
request.setAttribute("employees", employees);
ServletContext application = this.getServletContext();
RequestDispatcher rd = application.getRequestDispatcher("/queryResult.jsp");
rd.forward(request,response);
}
public void init() throws ServletException {}
}
在该Servlet中首先接受界面输入的姓名参数,然后调用Dao(Data access object),到数据库里面查找。
编写Dao,EmployeeDao.java,实现访问数据库以及业务逻辑
package wang.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import wang.po.Employee;
public class EmployeeDao {
private Connection conn = null;
public void initialConnection() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:xe";
conn = DriverManager.getConnection(url, "hr", "hr");
} catch (Exception e) {
e.printStackTrace();
}
}
public List<Employee> queryEmployeeByName(String name) {
List<Employee> employees = new ArrayList<Employee>();
String sql = "select * from employees where FIRST_NAME like '%" + name + "%'";
try {
this.initialConnection();
ResultSet rs = conn.createStatement().executeQuery(sql);
while(rs.next()) {
Employee employee = new Employee();
employee.setEmployeeId(rs.getString("EMPLOYEE_ID"));
employee.setFirstName(rs.getString("FIRST_NAME"));
employee.setLastName(rs.getString("LAST_NAME"));
employee.setEmail(rs.getString("EMAIL"));
employees.add(employee);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
this.closeConnection();
}
return employees;
}
public void closeConnection() {
try {
if(conn!=null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
在Dao中使用了POJO类,在一定程度上起到映射数据表的作用
package wang.po;
public class Employee {
private String employeeId;
private String firstName;
private String lastName;
private String email;
public String getEmployeeId() {
return employeeId;
}
public void setEmployeeId(String employeeId) {
this.employeeId = employeeId;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
在Servlet中得到查找的数据后,下面这几句代码
ServletContext application = this.getServletContext();
RequestDispatcher rd = application.getRequestDispatcher("/queryResult.jsp");
rd.forward(request,response);
表示跳转到queryResult.jsp页面中去。
注意:由于上面是把数据保存在request中(减少消耗),所以必须使用上面方法的跳转
编写queryResult.jsp页面
<%@ page language="java" import="java.util.*,wang.po.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>查询结果页面</title>
</head>
<body>
查询结果<br/>
<table>
<tr>
<td>编号</td>
<td>开始姓名</td>
<td>结束姓名</td>
<td>邮箱</td>
</tr>
<%
List employees = (ArrayList)request.getAttribute("employees");
for (int i=0; i<employees.size(); i++) {
Employee employee = (Employee)employees.get(i);
%>
<tr>
<td><%=employee.getEmployeeId() %></td>
<td><%=employee.getFirstName() %></td>
<td><%=employee.getLastName() %></td>
<td><%=employee.getEmail() %></td>
</tr>
<%
}
%>
</table>
</body>
</html>
启动Tomcat,访问查询页面,输入查询条件

得到查询结果

是多疑还是去相信
谎言背后的忠心
或许是自己太执迷
命题游戏
沿着他的脚步 呼吸开始变得急促
就算看清了面目 设下埋伏
真相却居无定处
I swear I'll never be with the devil
用尽一生孤独 没有退路的路
你看不到我
眉眼焦灼却不明下落
命运的轮轴
伺机而动 来不及闪躲
沿着他的脚步 呼吸开始变得急促
就算看清了面目 设下埋伏
真相却居无定处
I swear I'll never be with the devil
用尽一生孤独 没有退路的路
你看不到我
眉眼焦灼却不明下落
命运的轮轴
伺机而动 来不及闪躲
你看不到我
眉眼焦灼却不明下落
命运的轮轴
伺机而动 来不及闪躲
黑夜和白昼
你争我夺 真相被蛊惑
心从不退缩
这天堂荒漠 留给孤独的猎手

浙公网安备 33010602011771号