关于SpringMVC的整理

什么是SpringMVC?

SpringMVC是Spring框架的一个模块,是一个基于Java的实现了MVC设计模式的轻量级Web框架。它通过一套注解和接口,让开发者能够更简单、更快速地开发Web应用程序。

SpringMVC的核心组件?

  1. DispatcherServlet:前端控制器,接收所有请求并分发

  2. HandlerMapping:映射请求到处理器(Controller)

  3. Controller:处理请求的业务逻辑

  4. ModelAndView:封装模型数据和视图信息

  5. ViewResolver:解析视图名称到具体视图实现

  6. HandlerAdapter:实际执行处理器 【视图:数据和模版的总称】

SpringMVC的工作流程?

  1. 用户发送请求到DispatcherServlet

  2. DispatcherServlet调用HandlerMapping查找Handler

  3. HandlerMapping返回HandlerExecutionChain(包含Handler和拦截器)

  4. DispatcherServlet调用HandlerAdapter执行Handler

  5. Handler(Controller)执行完成返回ModelAndView

  6. DispatcherServlet调用ViewResolver解析视图

  7. ViewResolver返回View对象

  8. DispatcherServlet渲染视图并返回响应

SpringMVC的常用注解?

@Controller:标识一个类为控制器

@RequestMapping:映射URL到控制器方法

@RequestParam:绑定请求参数到方法参数

@PathVariable:绑定URL模板变量到方法参数

@ResponseBody:将返回值直接写入HTTP响应体

@RestController:组合了@Controller和@ResponseBody

@ModelAttribute:绑定请求参数到模型对象

@SessionAttributes:声明会话属性

SpringMVC项目代码

web.xml的早期形式:【基于配置】

过滤器:对请求和响应进行过滤

拦截器:对请求进行拦截

java 复制代码
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

  <!--在web.xml中配置Spring提供的过滤器类 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value><!--设置字符集为utf-8 -->
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern><!--/ 匹配所有的请求 但是不包含资源  /* 匹配所有的请求 -->
  </filter-mapping>



  <!--配置前端控制器,对浏览器发送的请求进行统一处理-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name><!--取别名-->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--类-->
    <!--加载springmvc.xml配置文件的位置和名称,配置的是Spring配置-->
    <!--Spring加载在DispatcherServlet之后 -->
    <init-param><!--初始化参数-->
      <!--contextConfigLocation:上下文配置路径,固定值-->
      <param-name>contextConfigLocation</param-name>
      <!--classpath:类路径,值得是Java和resources文件夹-->
      <!--springmvc.xml:指的是配置文件的名称:需要配置springmvc.xml,在下面-->
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--DispatcherServlet什么时候加载-->
    <!--1 项目一启动就会加载 0 请求打过来时才会加载-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern><!--localhost:8080  /代表着可以匹配到所有的请求-->
  </servlet-mapping>
  <!--有一些请求不能打到dispatcherServlet当中 https://localhost:8080/a.html-->
  <!--剔除这些请求-->
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.html</url-pattern>
  </servlet-mapping>

  <!--开启项目时打开的页面-->
  <welcome-file-list>
    <welcome-file>/index.html</welcome-file>
  </welcome-file-list>

</web-app>

MVC执行流程图

处理器适配器作用广泛,涉及转码,加密解密行为

springmvc.xml

java 复制代码
<?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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--配置spring创建容器时要扫描的包-->
    <context:component-scan base-package="com.qcby"></context:component-scan>

    <!--配置处理器映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <!--配置处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!--配置视图解析器-->
    <bean id="viewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/><!--设置字符集-->
        <property name="templateEngine" ref="templateEngine"/>
    </bean>
    <!-- templateEngine -->
    <bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
        <property name="templateResolver" ref="templateResolver"/>
    </bean>
    <bean id="templateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
        <property name="prefix" value="/html/" /><!--
        设置模板文件的前缀路径(默认从webapp/resources下开始查找)
        示例:/html/ 表示模板文件存放在 webapp/html/ 目录下
    -->
        <property name="suffix" value=".html" /> <!--
        设置模板文件的后缀
        示例:.html 表示所有模板文件都以.html结尾
        访问时只需写文件名,无需加后缀(如"index"会自动补全为"/html/index.html")
    -->
        <property name="templateMode" value="HTML5"/><!--
        设置模板模式:
        HTML5 - 标准HTML5解析模式
        其他可选值:LEGACYHTML5(宽松HTML5)、XHTML等
    -->
    </bean>
    <!-- 返回JSON数据 -->
    <bean
            class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
    </bean>
    <!-- 配置spring开启注解mvc的支持  默认就是开启的 ,要想让其他组件(不包含映射器、适配器、处理器)生效就必须需要配置了-->
    <mvc:annotation-driven></mvc:annotation-driven>
</beans>

HelloController

java 复制代码
@Controller
public class HelloController {
    @RequestMapping("/toIndex")
    @ResponseBody /*返回JSON数据*/
    public String Index(){

        return "aaaa";
    }

    @RequestMapping("/hello")
    public String hello(){
        return "hello"; //8080/html/hello.html
    }

}
复制代码
相关推荐
Exclusive_Cat2 小时前
SpringMVC参数接收与数据返回详解
spring·mvc
ChinaRainbowSea3 小时前
补充:问题:CORS ,前后端访问跨域问题
java·spring boot·后端·spring
hqxstudying5 小时前
java依赖注入方法
java·spring·log4j·ioc·依赖
Bug退退退1236 小时前
RabbitMQ 高级特性之重试机制
java·分布式·spring·rabbitmq
hello早上好7 小时前
CGLIB代理核心原理
java·spring
先睡13 小时前
Redis的缓存击穿和缓存雪崩
redis·spring·缓存
Bug退退退12318 小时前
RabbitMQ 高级特性之死信队列
java·分布式·spring·rabbitmq
booooooty1 天前
基于Spring AI Alibaba的多智能体RAG应用
java·人工智能·spring·多智能体·rag·spring ai·ai alibaba
极光雨雨1 天前
Spring Bean 控制销毁顺序的方法总结
java·spring