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会改变

       

  • 相关阅读:
    MFC tab页面中获到其它页面的数据
    sqlite数据库中"Select * From XXX能查到数据,但是Select DISTINCT group From xxx Order By group却查不出来
    关闭程序出现崩溃(exe 已触发了一个断点及未加载ucrtbased.pdb)
    springboot 通用Mapper使用
    springBoot 发布war包
    springCloud Zuul网关
    springboot hystrix turbine 聚合监控
    springBoot Feign Hystrix Dashboard
    springBoot Ribbon Hystrix Dashboard
    springBoot Feign Hystrix
  • 原文地址:https://www.cnblogs.com/liuling/p/JSP3.html
Copyright © 2011-2022 走看看