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

}

相关推荐
Flynn Liang5 小时前
AI 应用的安全红线:Spring AI 下的 Prompt 注入防护、PII 脱敏、输出审计与密钥管理
人工智能·安全·spring·数据泄露·springai·prompt注入
QCoding5 小时前
企业级Agent Evaluation实战:Agent能跑就能上线?AI Agent到底怎么测?
后端·spring
Flynn Liang12 小时前
Spring AI 上生产:限流熔断、密钥与成本治理、私有化/混合部署、降级与 Prompt 灰度架构全解
人工智能·spring·架构·高可用·springai·成本治理·生产架构
Flynn Liang12 小时前
Spring AI 2.0 深度解析:ChatClient、Advisor 链与 MCP——Java 工程师的 AI 落地最优解
java·人工智能·spring·大模型·架构设计·spring ai
liangbo714 小时前
Spring系列01:IoC 与 DI 到底解决了什么
java·spring
杨凯凡15 小时前
Spring Boot 的 @Transactional 为什么会失效?从代理、自调用到异常回滚的排查实战
java·spring boot·spring·事务·后端开发
哦虎!16 小时前
【JavaEE进阶】SpringBoot
spring
霸道流氓气质1 天前
AI 流式对话与实时聊天平台:SSE 解码竞态、有状态会话隔离与背压取消的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
frjc1 天前
Spring AI 高级实战:ChatMemory、Tool Calling 与 MCP 架构解析
人工智能·spring·架构
T量子永生1 天前
Unisoc(紫光展锐) Kernel 6.18 DDK 编译框架详解
linux·运维·spring