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"; // 返回视图名
}

}

相关推荐
看浪的路人10 分钟前
第9讲:大模型应用监控与可观测性——OpenTelemetry + Prometheus + Grafana 全链路追踪
java·前端·spring
来福猿3 小时前
Nacos 源码解析:服务注册、配置中心与心跳续约机制
spring·spring cloud
Java爱好狂.4 小时前
挑战一周速通Spring+SpringBoot+SpringCloud!
java·后端·spring·springboot·架构师·java面试·java程序员
萧瑟余晖4 小时前
Spring Security认证机制详解
spring
m0_587383004 小时前
无人自助拼豆系统开发实战指南 核心功能架构搭建与落地经验分享
java·经验分享·spring·小程序·架构·需求分析
泡海椒4 小时前
Spring 项目中如何组织 JQuick-Excel 的 XML 与 Bean
xml·spring·excel
鱼宵5 小时前
Spring AI RAG 问答助手:回答带引用,AI 不再睁眼说瞎话
java·人工智能·spring·springai
captain3765 小时前
Spring Web MVC入门(1)
ide·spring·java-ee·tomcat
java_nnnn7 小时前
Spring Web MVC 入门:从一个 URL 到 Java 后端完整处理请求
java·前端·spring boot·spring
SL_staff19 小时前
为什么业务总在等BI报表?JVS-BI的可视化ELT实践解析
spring·数据分析·数据可视化