浅谈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 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 
 8     
 9         
10     
11     
12         
13
14
15
16
17
18
19
20             <%
21                 List l = (List)request.getAttribute(“student_list”);
22                 for(Iterator iter=l.iterator();iter.hasNext();){
23                 Student s = iter.next();
24             %>
25             
26
27
28
29
30
31
32             <%}%>
33
                              学号                 	姓名                 	出生日期                 	性别                 	家庭住址             
                 <%=s.getSId()%>                 	<%=s.getSName()%>                 	<%=new SimpleDateFormat(“yyyy-MM-dd”).format(s.getSDate())%>                 	<%=s.getSSex()%>                 	<%=s.getSAddr()%>             
         

34     
35 


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

   

 

相关文章
|
4月前
|
设计模式 前端开发 数据库
从MVC到MVVC:软件架构的演变和迭代(二)
从MVC到MVVC:软件架构的演变和迭代
|
5月前
|
设计模式 前端开发 Java
了解 Spring MVC 架构、Dispatcher Servlet 和 JSP 文件的关键作用
Spring MVC 是 Spring 框架的一部分,是一个 Web 应用程序框架。它旨在使用 Model-View-Controller(MVC) 设计模式轻松构建Web应用程序。
64 0
|
5月前
|
XML 前端开发 算法
计算机毕业设计|外文文献翻译之MVC架构详细介绍
计算机毕业设计|外文文献翻译之MVC架构详细介绍
|
5月前
|
前端开发 数据库 Python
Python Web 开发: 解释 Django 框架的 MVC 架构是什么?
Python Web 开发: 解释 Django 框架的 MVC 架构是什么?
|
5月前
|
存储 设计模式 前端开发
MVC架构和DDD架构的区别?
最近在学习一个开源社区项目,第一次听说了DDD项目架构,于是通过搜索之后来分享给大家
|
16天前
|
前端开发 Java PHP
信息系统架构模型(1) MVC
信息系统架构模型(1) MVC
21 0
|
25天前
|
XML 前端开发 测试技术
安卓架构模式:MVC、MVP、MVVM及更多
【4月更文挑战第13天】本文探讨了安卓应用开发中的常见架构模式,包括MVC、MVP和MVVM,以及VIPER和Clean Architecture。MVC分离关注点,易于理解,但安卓不直接支持。MVP通过呈现器实现更清晰的分层和便于单元测试。MVVM利用数据绑定简化UI逻辑,适合声明式编程。开发者应根据项目需求、团队技能和维护周期选择合适架构,随着工具和框架的进步,未来将提供更多模块化、可测试性和敏捷性的解决方案。
|
2月前
|
设计模式 前端开发 数据处理
MVC架构中,控制器和模型之间是如何交互的
MVC架构中,控制器和模型之间是如何交互的
12 0
|
2月前
|
存储 设计模式 前端开发
请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
【2月更文挑战第26天】【2月更文挑战第89篇】请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
|
4月前
|
设计模式 监控 前端开发
从MVC到MVVC:软件架构的演变和迭代(一)
从MVC到MVVC:软件架构的演变和迭代