springMVC 三大组件解析

springMVC组件概述

  1. DispatcherServlet(调度器Servlet): DispatcherServlet 是 Spring MVC 的前端控制器(Front Controller)。它负责接收来自客户端的请求,然后将请求分发给相应的处理器(Controller)进行处理。DispatcherServlet 还负责管理其他 Spring MVC 组件的生命周期。

  2. HandlerMapping(处理器映射): HandlerMapping 负责将请求映射到具体的处理器(Controller)。它决定了哪个处理器应该处理特定的请求。Spring MVC 提供了多种 HandlerMapping 的实现,包括注解扫描、配置文件等方式。

  3. Controller(控制器): Controller 是处理请求的组件,它负责处理用户请求并生成响应。在 Spring MVC 中,Controller 通常是一个带有 @Controller 注解的类,其中的方法使用 @RequestMapping 注解来指定处理的请求路径。

  4. Model(模型): Model 用于封装处理器方法处理请求时所需要的数据。在处理器方法中,你可以通过方法参数传递 Model 对象,并在方法内设置属性,这些属性最终会被传递给视图进行渲染。

  5. ViewResolver(视图解析器): ViewResolver 负责将逻辑视图名解析为实际的视图对象。它决定了返回给用户的视图应该是什么。Spring MVC 支持多种视图解析器,包括 InternalResourceViewResolver(用于 JSP 视图)、FreeMarkerViewResolver、ThymeleafViewResolver 等。

  6. View(视图): View 负责将模型数据渲染成最终的响应输出。在 Spring MVC 中,视图可以是 JSP、FreeMarker、Thymeleaf 等模板引擎生成的页面。

  7. Interceptor(拦截器): Interceptor 允许你在请求被处理之前或之后执行一些操作。拦截器可以用于日志记录、权限检查、性能监控等。在 Spring MVC 中,你可以通过实现 HandlerInterceptor 接口来定义拦截器。

  8. HandlerAdapter(处理器适配器): HandlerAdapter 负责将处理器(Controller)包装成一个能够被 DispatcherServlet 调用的处理器对象。它使得不同类型的处理器能够统一被调用。

InternalResourceViewResolver(视图解析器)

通过查看它的源码可以知道他可以设置前缀后缀

复制代码
    public InternalResourceViewResolver(String prefix, String suffix) {
        this();
        this.setPrefix(prefix);
        this.setSuffix(suffix);
    }

在配置文件里可以这样设置

复制代码
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" /> 前缀
    <property name="suffix" value=".jsp" /> 后缀
</bean>

RequestMappingHandlerAdapter(处理器适配器)

源码

可以知道它可以设置一个消息转换器列表。消息转换器在 Spring MVC 中负责处理请求和响应的数据格式转换,例如将 Java 对象转换为 JSON 格式或将 JSON 数据转换为 Java 对象。

复制代码
public void setMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
        this.messageConverters.clear();
        this.messageConverters.addAll(messageConverters);
    }

配置文件

可以把返回的字符串自动转换成json字符串 用的是jackson

复制代码
 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="MessageConverters">
     <list>
      <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">            </bean>
     </list>
    </property>

RequestMappingHandlerMapping(处理器映射器)

@Controller public class MyController {

复制代码
@RequestMapping("/hello")
public String hello() {
    // 处理请求的业务逻辑
    return "helloPage"; // 返回视图名
}
​
// 支持多个映射路径
@RequestMapping(value = {"/greet", "/welcome"})
public String greet() {
    // 处理请求的业务逻辑
    return "greetPage"; // 返回视图名
}
​
// 指定请求方法
@RequestMapping(value = "/greetPost", method = RequestMethod.POST)
public String greetPost() {
    // 处理POST请求的业务逻辑
    return "greetPostPage"; // 返回视图名
}
​
// 接收路径变量
@RequestMapping("/user/{id}")
public String getUserById(@PathVariable Long id) {
    // 使用路径变量id,处理请求的业务逻辑
    return "userPage"; // 返回视图名
}

}

相关推荐
冉冰学姐15 分钟前
基于ssm的技能比赛报名管理系统29817vn0(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
java·数据库·spring·ssm 框架应用
pjw198809034 小时前
Spring Framework 中文官方文档
java·后端·spring
bropro7 小时前
【Spring Boot】Spring AOP中的环绕通知
spring boot·后端·spring
luom01027 小时前
springcloud springboot nacos版本对应
spring boot·spring·spring cloud
zuoerjinshu9 小时前
【spring专题】编译spring5.3源码
java·后端·spring
南昌彭于晏9 小时前
springcloud+openFeign单元测试解决初始化循环依赖的问题
spring·spring cloud·单元测试
SmartBrain12 小时前
FastAPI + LangGraph 与 SpringAI 在医疗场景应用及分析
人工智能·spring boot·spring·fastapi
Rsun0455112 小时前
Spring AI + RAG + 向量库 10 道模拟面试
人工智能·spring·面试
SmartBrain12 小时前
基于 Spring AI 构建多智能体协作系统(高级版)
java·人工智能·spring
Holen&&Beer14 小时前
Spring-Profile与部署说明
java·后端·spring