找回密码
 立即注册
首页 业界区 业界 JavaWeb和MVC三层架构

JavaWeb和MVC三层架构

廖彗云 前天 22:21
JavaWeb 概述

网站发布和部署一定要依托技术语言吗:
不一定,一个网站可以直接发布和部署,因为因为浏览器能够识别网页只需要两样东西,网络和静态页面,还有一个装在他们的容器,比如 nginx。
静态页面面临的问题:

  • 1:静态网页是固定的,是不可变的。如果一个网站比如腾讯首页,这里需要 1000 文章,那么就必须编写 1000 的 html 页面。
  • 2:难以管理维护,而且需要大量人工去查询和维护。
  • 3:难以修改,如果需要修改某页面中的错别字,就必须要找到这个页面,再进行修改才可以生效。
JavaWeb 技术解决了什么问题:
JSP + Servlet 解决静态网页的动态渲染问题,MySQL 解决数据存储的问题。
JavaWeb 技术是如何解决的:

  • 1:将所有的静态页面的数据进行结构化,存储到 MySQL 数据库中。
  • 2:JavaWeb 对 MySQL 的服务器提供客户端支持,Java可以通过数据库驱动去连接 MySQL 服务,去实现数据的维护工作,也就是 CRUD。
  • 3:Java 通过 JDBC 查询数据后把数据放到对象中,如果是多个数据就放到集合中。
  • 4:将存储数据的对象,通过 Servlet 放入到作用域中。
  • 5:通过 EL 表达式或者标签等技术,将作用域中的对象的数据提取出来渲染到 JSP 模板中。
具体的执行过程是怎么样的:
查询数据库数据 → Serlvet 放入到作用域中(request、session、application、pageContext)→ JSP 模板通过 EL 表达式 + 标签 → 将其作用域中存储的对象取出来动态替换。
查询数据库数据 → SpringMVC 放入到作用域中(ModelMap、Model、ModelAndView、request)→ Freemarker / Thymeleaf 模板通过 EL 表达式 + 标签 → 将其作用域中存储的对象取出来动态替换。
这个具体的执行过程其实就是经典 MVC 的开始架构设计模式。
MVC 架构设计提出的意义:
1:分层架构
2:解耦
3:各司其职(单一职能原则)
MVC 设计模式的由来

MVC 模式的概念:
MVC 模式并不是 JavaWeb 项目中独有的,MVC 是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),是一种软件设计的典范。
MVC 模式的详解:
控制器 Controller:控制请求的处理逻辑,对请求进行处理,负责请求转发,
视图 View:用户看到并与之交互的界面,比如 HTML(静态资源),JSP(动态资源)等等。
模型 Model:一种企业规范,也就是业务流程、状态的处理以及业务规则的规定。业务流程的处理过程对其他层来说是不透明的,模型接受视图数据的请求,并返回最终的处理结果。业务模型的设计可以说是 MVC 的核心。
MVC 模式的应用:
MVC 模式被广泛用于 Java 的各种框架中,比如早期的 Struts2 框架和目前市面上主流的 SpringMVC 框架都用到了这种思想。
JavaWeb 的经典三层架构

JSP Model1 第一代:
JSP Model1 是 JavaWeb 早期的模型,它适合小型 Web 项目,开发成本低。Model1 第一代时期,服务器端只有 JSP 页面,所有的操作都在 JSP 页面中,连访问数据库的 API 也在 JSP 页面中完成。也就是说,所有的东西都耦合在一起,对后期的维护和扩展极为不利。
1.png

"""
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
  4. <html>
  5. <head>
  6.         <meta charset="UTF-8">
  7.         <title>Title</title>
  8. </head>
  9. <body>
  10.    <sql:query var="user" sql="select * from user">
  11.                 ${user.id} == ${user.nickname}
  12.    </sql:query>
  13. </body>
  14. </html>
复制代码
"""
JSP Model1 第二代:
JSP Model1 第二代有所改进,把业务逻辑的内容放到了 JavaBean 中,而 JSP 页面负责显示以及请求调度的工作。虽然第二代比第一代好了些,但还让 JSP 做了过多的工作,JSP 中把视图工作和请求调度(控制器)的工作耦合在一起了。
2.png

"""
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
  4. <html>
  5.         <head>
  6.                 <meta charset="UTF-8">
  7.                 <title>Title</title>
  8.         </head>
  9.         <body>
  10.                 <%
  11.                 Connection connection = null;
  12.                 PreparedStatement preparedStatement = connection.prepareStatement("sql");
  13.                 ResultSet resultSet = preparedStatement.executeQuery();
  14.                 resultSet.next();
  15.                 User user = new User();
  16.                 user.setId(1);
  17.                 user.setNickname("xpy");
  18.                 pageContext.setAttribute("user",user);
  19.                 %>
  20.                 ${user.id}===${user.nickname}
  21.                 <jsp:useBean id="user" type="com.kuangstudy.bean.User" scope="page">
  22.                         <jsp:getProperty name="user" property="id"/>
  23.                         <jsp:getProperty name="user" property="nickname"/>
  24.                 </jsp:useBean>
  25.         </body>
  26. </html>
复制代码
"""
JSP Model2:

  • JSP Model2 模式已经可以清晰的看到 MVC 完整的结构。
  • JSP:视图层,用来与用户打交道。负责接收用来的数据,以及显示数据给用户。
  • Servlet:控制层,负责找到合适的模型对象来处理业务逻辑,转发到合适的视图。
  • JavaBean:模型层,完成具体的业务工作,例如开启、转账等。
3.png

JSP Model2 适合多人合作开发大型的 Web 项目,各司其职,互不干涉,有利于开发中的分工,有利于组件的重用。但是 Web 项目的开发难度加大,同时对开发人员的技术要求也提高了。
"""
  1. @WebServlet("/test")
  2. public class TestServlet extends HttpServlet {
  3.         @Override
  4.         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  5.                 request.setCharacterEncoding("UTF-8");
  6.                 response.setCharacterEncoding("UTF-8");
  7.                 try {
  8.                         Connection connection = null;
  9.                         PreparedStatement preparedStatement = connection.prepareStatement("sql");
  10.                         ResultSet resultSet = preparedStatement.executeQuery();
  11.                         resultSet.next();
  12.                         User user = new User();
  13.                         user.setId(1);
  14.                         user.setNickname("xpy");
  15.                         request.setAttribute("user", user);
  16.                         request.getRequestDispatcher("index.jsp").forward(request,response);
  17.                 }catch (Exception ex){
  18.                         ex.printStackTrace();
  19.                 }
  20.         }
  21.         @Override
  22.         protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  23.         }
  24. }
复制代码
"""
"""
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
  4. <html>
  5. <head>
  6.         <meta charset="UTF-8">
  7.         <title>Title</title>
  8. </head>
  9. <body>
  10.         ${user.id}===${user.nickname}
  11.         <jsp:useBean id="user" type="com.kuangstudy.bean.User" scope="page">
  12.                 <jsp:getProperty name="user" property="id"/>
  13.                 <jsp:getProperty name="user" property="nickname"/>
  14.         </jsp:useBean>
  15. </body>
  16. </html>
复制代码
"""

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册