您现在的位置是:首页 >技术杂谈 >Spring MVC网站首页技术杂谈
Spring MVC
简介Spring MVC
Spring MVC(一)
一、MVC设计模式
MVC 设计不仅限于 Java Web 应用,还包括许多应用,比如前端、PHP、.NET 等语言。之所以那么做的根本原因在于各个模块的解耦。
MVC 是 Model、View 和 Controller 的缩写,分别代表 Web 应用程序中的三种职责。
— 模型:用于存储数据以及处理用户请求的业务逻辑。
— 视图:向控制器提交数据,显示模型中的数据。
— 控制器:根据视图提出的请求判断将请求和数据交给哪个模型,将处理后的有关结果交给哪个视图更新显示。
二、Spring MVC
Spring MVC 实现了MVC的核心概念。它为控制器和处理程序提供了大量与此模式相关的功能。通过Spring使应用程序高度解耦,提供了通过简单的配置更改即可动态更改组件的灵活性。
Spring MVC 框架是高度可配置的,包含多种视图技术,例如:JSP、themlefy等。Spring MVC 框架并不关心使用的视图技术,也不会强迫开发者只使用指定的技术。
三、关于版本问题:
原因:Java EE ————> Jakarta
2009年,Oracle宣布收购SUN,Java相关技术归Oracle所有,在2017年,Oracle 宣布开源 Java EE 并将项目移交给Eclipse 基金会,但Oracle移交并不爽快,提了很多要求,其中就包括不能再使用Java EE这个名称,虽然有点无理但Eclipse基金会还是接受了这个要求并且改名为Jakarta EE,经历了从 j22 到 Java ee 的改名再经历一次似乎也无所谓,但是Oracle要求Jakarta EE 不能修改 javax 命名空间,这个就意味着 java ee 移交后代码就此封版。
结果:javax.* 转为 jakarta.*
Spring6+ 转向 jakarta
目前Web项目搭配
1、Spring5.X、java.* 、Tomcat9- ==> SpringBoot 2.X
2、Spring6.X、jakarta.* 、Tomcat10- ==> SpringBoot 3.X
四、基本使用与匹配
(一)、通过maven-archetype-webapp摸板创建项目,补全
(二)、基本依赖
**spring-aop
spring-beans
spring-context
spring-core
spring-expres
spring-web
spring-webmvc**
(三)、创建Spring MVC 的配置文件springMVC-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--
使用扫描机制扫描控制器类,控制器类都在controller包及其子包下
包含了<context:annotation‐config>的功能
-->
<context:component-scan base-package="com.gx.controller"/>
<!--配置视图解析器 使用JSP-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--视图路径前缀 /WEB-INF/jsp/目录-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--视图的后缀 JSP的后缀为.jsp-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
(四)、在web.xml中配置Spring MVC
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 如果不给初始化参数,DispatcherServlet 会默认在WEB-INF目录下找 springMVC-servlet.xml -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC-servlet.xml</param-value>
</init-param>
<!-- 配置跟随web容器启动 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
(五)、编写Controller、页面等
五、Spring MVC 的工作流程及其重要类或者接口
- 用户发送请求至前端控制器DispatcherServlet。
- DispatcherServlet 收到请求,调用HandlerMapping 处理器映射器。
- 处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器一并返回给DispatcherServlet。
- DispatcherServlet 调用HandlerAdapter适配器
- HandlerAdapter 经过适配器调用具体的处理器(一般是开发人员编写的Controller)。
- Controller 执行完成后返回ModelAndView。
- HandlerAdapter 将Controller 执行结果ModelAndView 返回DispatcherServlet。
- DispatcherServlet 将ModelAndView 传给ViewResolver 视图解析器。
- ViewResolver 解析后返回具体View。
- DispatcherServlet 根据View 进行渲染视图。
- DispatcherServlet 响应用户。
DispatcherServlet 也是整个Spring MVC 的核心,它负责接收HTTP请求组织协调Spring MVC 的各个组成部分。
①DispatcherServlet
Spring MVC 所有的请求都经过DispatcherServlet 来统一分发,在 DispatcherServlet 将请求分发给Controller 之前需要借助Spring MVC 提供的HandlerMapping 定位到具体的Controller。
②HandlerMapping
HandlerMapping 接口负责完成客户请求到Controller 映射。
③Controller
Controller 接口将处理用户请求,这和Java Servlet 扮演的角色一致的。一旦Controller 处理网用户请求,这将返回ModelAndView 对象给DispatcherServlet 前端控制器,ModelAndView 中包含了模型(Model)和视图(View)。从宏观角度看DispatcherServlet 是整个Web 应用的控制器;从微观考虑,Controller 是单个Http 请求处理过程中的控制器,而ModelAndView 是Http 请求过程中返回的模型(Model)和视图(View)。
④ViewResoLver
ViewResoLver 接口(视图解析器)在Web 应用中负责查找View 对象,从而将相应结果渲染给用户。
/**
* {@link org.springframework.web.servlet.DispatcherServlet#doService(HttpServletRequest, HttpServletResponse)}
* {@link org.springframework.web.servlet.DispatcherServlet#doDispatch(HttpServletRequest, HttpServletResponse)}
* 获取Handler {@link org.springframework.web.servlet.DispatcherServlet#getHandler(HttpServletRequest)}
* 获取Handler适配器 HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
* 执行Handler 获取ModelView mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
* 处理视图{@link org.springframework.web.servlet.DispatcherServlet#processDispatchResult(HttpServletRequest, HttpServletResponse, HandlerExecutionChain, ModelAndView, Exception)}
* {@link org.springframework.web.servlet.DispatcherServlet#render(ModelAndView, HttpServletRequest, HttpServletResponse)}
* view.render(mv.getModelInternal(), request, response);
*
*/
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。