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,访问查询页面,输入查询条件

 

得到查询结果

 

原文地址:https://www.cnblogs.com/muailiulan/p/13100092.html