首页 > 编程语言 >JavaWeb和MVC三层架构

JavaWeb和MVC三层架构

时间:2023-08-01 19:33:27浏览次数:39  
标签:架构 JavaWeb request MVC JSP user 页面

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 页面中完成。也就是说,所有的东西都耦合在一起,对后期的维护和扩展极为不利。
image

"""

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<html>
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>
   <sql:query var="user" sql="select * from user">
		${user.id} == ${user.nickname}
   </sql:query>
</body>
</html>

"""
JSP Model1 第二代:

JSP Model1 第二代有所改进,把业务逻辑的内容放到了 JavaBean 中,而 JSP 页面负责显示以及请求调度的工作。虽然第二代比第一代好了些,但还让 JSP 做了过多的工作,JSP 中把视图工作和请求调度(控制器)的工作耦合在一起了。

image

"""

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Title</title>
	</head>
	<body>
		<%
		Connection connection = null;
		PreparedStatement preparedStatement = connection.prepareStatement("sql");
		ResultSet resultSet = preparedStatement.executeQuery();
		resultSet.next();
		User user = new User();
		user.setId(1);
		user.setNickname("xpy");
		pageContext.setAttribute("user",user);
		%>
		${user.id}===${user.nickname}
		<jsp:useBean id="user" type="com.kuangstudy.bean.User" scope="page">
			<jsp:getProperty name="user" property="id"/>
			<jsp:getProperty name="user" property="nickname"/>
		</jsp:useBean>
	</body>
</html>

"""
JSP Model2:

  • JSP Model2 模式已经可以清晰的看到 MVC 完整的结构。

  • JSP:视图层,用来与用户打交道。负责接收用来的数据,以及显示数据给用户。

  • Servlet:控制层,负责找到合适的模型对象来处理业务逻辑,转发到合适的视图。

  • JavaBean:模型层,完成具体的业务工作,例如开启、转账等。

image

JSP Model2 适合多人合作开发大型的 Web 项目,各司其职,互不干涉,有利于开发中的分工,有利于组件的重用。但是 Web 项目的开发难度加大,同时对开发人员的技术要求也提高了。

"""

@WebServlet("/test")
public class TestServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		try {
			Connection connection = null;
			PreparedStatement preparedStatement = connection.prepareStatement("sql");
			ResultSet resultSet = preparedStatement.executeQuery();
			resultSet.next();
			User user = new User();
			user.setId(1);
			user.setNickname("xpy");
			request.setAttribute("user", user);
			request.getRequestDispatcher("index.jsp").forward(request,response);
		}catch (Exception ex){
			ex.printStackTrace();
		}
	}
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}
}

"""
"""

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<html>
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>
	${user.id}===${user.nickname}
	<jsp:useBean id="user" type="com.kuangstudy.bean.User" scope="page">
		<jsp:getProperty name="user" property="id"/>
		<jsp:getProperty name="user" property="nickname"/>
	</jsp:useBean>
</body>
</html>

"""

标签:架构,JavaWeb,request,MVC,JSP,user,页面
From: https://www.cnblogs.com/xw-01/p/17598857.html

相关文章

  • 哈啰云原生架构落地实践
    哈啰云原生架构落地实践https://mp.weixin.qq.com/s?__biz=MzI3OTE3ODk4MQ==&mid=2247487194&idx=1&sn=61603e375b91c2a6188b51d030c593e9&chksm=eb4af550dc3d7c46adc3c1b82a376249036904263f42d3f50ebbe9220f867d6a612a387741f8&mpshare=1&scene=1&srcid=0......
  • mvc的return view复选框反填
    首先我后台返回的是选中的复选框id字符串,把这个字符串绑定到一个控件上             在文档就绪函数获取要反填的id字符串和复选框元素,遍历多选框元素并设置选中状态,最后刷新表单。  ......
  • 云原生网络架构规划
    网络连通以Multus为多网络平面,搭配OveralyCNI(低内Calico、高内核Cilium)+UnderlayCNI(Spidernet、Macvlan、SRIOV),打造一套网络联通的网络生态。网络服务暴露公有云-内外部DNS- L4/L7负载均衡及TLS证书管理 ......
  • XSAN架构迁移至STORNEXT架构导致存储数据丢失的服务器数据恢复案例
    服务器数据恢复环境:昆腾存储,操作系统:MACOS,存放的数据类型:MXF、MOV等格式视频文件。存储中有9个数据卷,其中包括1个META信息卷,8个DATA信息卷。服务器故障:由于业务需求,需要将整个存储空间从XSAN架构迁移到STORNEXT架构,迁移完成后管理员发现存储空间中的数据全部丢失。管理员查......
  • 系统架构设计师笔记第39期:数据架构规划与设计
    数据架构规划与设计是指在软件系统中规划和设计数据的组织结构、存储方式和访问方法,以满足系统需求和实现数据的有效管理和利用。在数据架构规划与设计中,通常包括以下几个关键方面:数据模型设计:数据模型是描述系统中数据的逻辑结构和关系的抽象表示。常见的数据模型包括层次模型、网......
  • SpringCloud Gateway 在微服务架构下的最佳实践
    作者:徐靖峰(岛风)前言本文整理自云原生技术实践营广州站Meetup的分享,其中的经验来自于我们团队开发的阿里云CSB2.0这款产品,其基于开源SpringCloudGateway开发,在完全兼容开源用法的前提下,做了诸多企业级的改造,涉及功能特性、稳定性、安全、性能等方面。为什么需要微服务网......
  • Android应用程序架构学习之一
    Android应用程序架构学习之一 核心类: MessagingController是一个线程控制类,通过put方法构造Command类放入队列依次执行Command类实现线程. 方法为command请求和MessageingListener实例提供服务 listener作为一个registeredlistener通过addListener()方法被增加 当......
  • [回馈]ASP.NET Core MVC开发实战之商城系统(四)
    经过一段时间的准备,新的一期【ASP.NETCoreMVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面等功能的开发,今天继续讲解商品详情功能开发,仅供学习分享使......
  • 基于端-边-云一体化架构的SkeyeVSS国标视频融合云平台在自助银行中的应用
    银行ATM功能的完善与升级,使得人们对ATM的依赖和使用度越来越高。然而ATM作为一个开放的公共环境,在服务应用中易造成各种异常情况及业务纠纷,一些不法分子也趁机利用ATM进行犯罪活动。而对于银行用户而言,提前预警、制止案件发生、避免人身、财产损失是对客户最基本的保护。如何保证AT......
  • X86架构CPU下Ubuntu系统环境源码编译pytorch-gpu-2.0.1版本
    本文操作步骤与aarch64架构CPU下Ubuntu系统环境源码编译pytorch-gpu-2.0.1版本大致相同,只是CPU架构不同而已,因此这里只记录不同的地方。 重点:一个个人心得,那就是要编译pytorch源码最好是选择docker环境,因为这种环境下配置比较纯净,一定要避免那种自己使用多年的Linux系统,那种......