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

}

相关推荐
计算机毕设指导62 小时前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
ExiFengs3 小时前
实际项目Java1.8流处理, Optional常见用法
java·开发语言·spring
瓜牛_gn3 小时前
依赖注入注解
java·后端·spring
一元咖啡4 小时前
SpringCloud Gateway转发请求到同一个服务的不同端口
spring·spring cloud·gateway
java亮小白19976 小时前
Spring循环依赖如何解决的?
java·后端·spring
苏-言6 小时前
Spring IOC实战指南:从零到一的构建过程
java·数据库·spring
草莓base7 小时前
【手写一个spring】spring源码的简单实现--容器启动
java·后端·spring
冰帝海岸13 小时前
01-spring security认证笔记
java·笔记·spring
没书读了14 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
代码小鑫17 小时前
A043-基于Spring Boot的秒杀系统设计与实现
java·开发语言·数据库·spring boot·后端·spring·毕业设计