zoukankan      html  css  js  c++  java
  • 浅谈MVC架构模式

        MVC英文即Model-View-Controller,就是把一个应用分为三个层:视图层、模型层、控制层。

        模型层(M)用于封装业务逻辑。

        视图层(V)也叫表示层,就是与用户实现交互的界面,通常实现数据的输入和输出功能。

        控制层(C)起到控制整个业务流程的作用。简单的说就是调用业务逻辑,然后把得到的数据转发给视图显示给用户。

      为了熟悉MVC架构模式,特意将学生查询改成了MVC模式的。

    1.首先建立客户端页面(student.jsp):

     1 <%@ page language="java" contentType="text/html;charset=GB2312" %>
     2 
     3 <html>
     4     <head>
     5         <title>学生信息</title>
     6     </head>
     7     <body>
     8         <form action="SearchStudentServlet" method="GET">
     9             出生日期:<input type="text" name="begindate"><input type="text" name="enddate">
    10             <input type="submit" value="查询">
    11         </form>
    12     </body>
    13 </html>

    2.建立控制层,也就是一个Servlet(SearchStudentServlet.java)

     1 import java.io.*;
     2 import java.util.*;
     3 import java.sql.Timestamp;
     4 import java.text.*;
     5 import com.pojo.*;
     6 import com.services.*;
     7 import javax.servlet.*;
     8 import javax.servlet.http.*;
     9 public class SearchStudentServlet extends HttpServlet{
    10     public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
    11         doPost(request,response); //如果是GET提交就调用doPost()来执行
    12     }
    13     public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
    14         String sBeginDate = request.getParameter("begindate");
    15         String sEndDate = request.getParameter("enddate");
    16         //将字符串转换为Timestamp
    17         Timestamp beginDate = Timestamp.valueOf("1900-1-1 00:00:00");
    18         Timestamp endDate = Timestamp.valueOf("1900-1-1 00:00:00");
    19         try{
    20             beginDate = Timestamp.valueOf(sBeginDate+" 0:0:0");  
    21             endDate = Timestamp.valueOf(sEndDate+" 0:0:0");  
    22         }catch(Exception e){
    23             e.printStackTrace();
    24         } 
    25         StudentService ss = new StudentService();   
    26         //从数据库中查询结果
    27         List<Student> l = ss.getStudentByDate(beginDate,endDate);
    28         
    29         //将列表放到request里面去
    30         request.setAttribute("student_list",l);
    31         //转发
    32         request.getRequestDispatcher("/student_list.jsp").forward(request,response);
    33         
    34     }
    35 }

    然后将其编译,放到classes目录下。
    3.建立视图层,也就是用于显示查询结果的JSP(student_list.jsp)

     1 <%@ page language="java" contentType="text/html;charset=GB2312" %>
     2 <%@ page import="java.sql.Timestamp"%>
     3 <%@ page import="java.text.*"%>
     4 <%@ page import="java.util.*"%>
     5 <%@ page import="com.pojo.*"%>
     6 <%@ page import="com.services.*"%>
     7 <html>
     8     <head>
     9         <title>学生信息</title>
    10     </head>
    11     <body>
    12         <table border="1">
    13             <tr>
    14                 <td>学号</td>
    15                 <td>姓名</td>
    16                 <td>出生日期</td>
    17                 <td>性别</td>
    18                 <td>家庭住址</td>
    19             </tr>
    20             <%
    21                 List<Student> l = (List)request.getAttribute("student_list");
    22                 for(Iterator<Student> iter=l.iterator();iter.hasNext();){
    23                 Student s = iter.next();
    24             %>
    25             <tr>
    26                 <td><%=s.getSId()%></td>
    27                 <td><%=s.getSName()%></td>
    28                 <td><%=new SimpleDateFormat("yyyy-MM-dd").format(s.getSDate())%></td>
    29                 <td><%=s.getSSex()%></td>
    30                 <td><%=s.getSAddr()%></td>
    31             </tr>
    32             <%}%>
    33         </table>
    34     </body>
    35 </html>

    4.建立模型层,把先前弄好的业务逻辑exam.jar和数据库驱动拷贝到lib目录下。

    这样,基于MVC架构的学生查询已经做好。因为这是一个小小的功能,用这种架构显得页面有点多,如果项目大一点的话就会显得层次分明,MVC的优点就能够明显的体现出来。

    现在来分析一下以上功能:

     首先用户将数据提交给控制层,即SearchStudentServlet,SearchStudentServlet调用业务逻辑将结果查询出来放到一个列表里,然后再将数据发给表示层去显示给客户端。将数据从控制层交给表示层有两种方式,一种是转发,一种是重定向

      以上就是用转发的方式实现的,转发是在服务器端,客户端是不知道的,直接通过request.setAttribute("student_list",l)函数将结果放到request里面,然后再通过request.getRequestDispatcher("/student_list.jsp").forward(request,response)转发给表现层,这样在表现层student_list.jsp里面就可以直接通过request的getAttribute()函数取得结果值,再将其显示出来就可以了。

      用重定向的方式也可以实现,重定向是不共享request的,客户端提交数据给SearchStudentServlet,然后又返回给客户端,这个request就作废了。通过下面方式可以将结果集放到session里面,  HttpSession session = request.getSession();session.setAttribute("student_list",l);然后再通过response.sendRedirect(request.getContextPath() + "/student_list.jsp");将结果以重定向的方式发送给表示层student_list.jsp去显示。用这种方式的话客户端是可以看到的,因为客户端的URL会改变

       

  • 相关阅读:
    HTTP状态码
    CEFsharp使用代理及切換
    powershell生成时间戳13和10位
    不用Root卸载手机自带应用
    夜间浏览更护眼
    windows 10 1709精简版安装 Microsoft Store
    在elementary os上安装brave 浏览器
    单语言精简版win10下中文网页无法正常
    为输出添加序号
    SpringBoot对静态资源的映射规则
  • 原文地址:https://www.cnblogs.com/liuling/p/JSP3.html
Copyright © 2011-2022 走看看