zoukankan      html  css  js  c++  java
  • 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,访问查询页面,输入查询条件

     

    得到查询结果

     

  • 相关阅读:
    求两条链表有无交点和第一个交点
    重载自增运算符(前置自增++p和后置自增p++)
    二叉排序树和平衡二叉树
    红黑树
    java学习攻略
    Intellij IDEA / IntelliJ
    ngrinder test
    eclipsejeekeplerSR2win32x86_64 jsonedit plugin
    向叶子文文的.net之路学习(大量的转载)
    微软发布机制(转)从浅入深
  • 原文地址:https://www.cnblogs.com/muailiulan/p/13100092.html
Copyright © 2011-2022 走看看