您现在的位置是:首页 >技术杂谈 >Spring MVC网站首页技术杂谈

Spring MVC

我,休伯利安舰长 2024-06-17 11:28:08
简介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 的工作流程及其重要类或者接口

  1. 用户发送请求至前端控制器DispatcherServlet。
  2. DispatcherServlet 收到请求,调用HandlerMapping 处理器映射器。
  3. 处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器一并返回给DispatcherServlet。
  4. DispatcherServlet 调用HandlerAdapter适配器
  5. HandlerAdapter 经过适配器调用具体的处理器(一般是开发人员编写的Controller)。
  6. Controller 执行完成后返回ModelAndView。
  7. HandlerAdapter 将Controller 执行结果ModelAndView 返回DispatcherServlet。
  8. DispatcherServlet 将ModelAndView 传给ViewResolver 视图解析器。
  9. ViewResolver 解析后返回具体View。
  10. DispatcherServlet 根据View 进行渲染视图。
  11. 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);
     *
     */
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。