springMVC组件概述
-
DispatcherServlet(调度器Servlet): DispatcherServlet 是 Spring MVC 的前端控制器(Front Controller)。它负责接收来自客户端的请求,然后将请求分发给相应的处理器(Controller)进行处理。DispatcherServlet 还负责管理其他 Spring MVC 组件的生命周期。
-
HandlerMapping(处理器映射): HandlerMapping 负责将请求映射到具体的处理器(Controller)。它决定了哪个处理器应该处理特定的请求。Spring MVC 提供了多种 HandlerMapping 的实现,包括注解扫描、配置文件等方式。
-
Controller(控制器): Controller 是处理请求的组件,它负责处理用户请求并生成响应。在 Spring MVC 中,Controller 通常是一个带有
@Controller
注解的类,其中的方法使用@RequestMapping
注解来指定处理的请求路径。 -
Model(模型): Model 用于封装处理器方法处理请求时所需要的数据。在处理器方法中,你可以通过方法参数传递 Model 对象,并在方法内设置属性,这些属性最终会被传递给视图进行渲染。
-
ViewResolver(视图解析器): ViewResolver 负责将逻辑视图名解析为实际的视图对象。它决定了返回给用户的视图应该是什么。Spring MVC 支持多种视图解析器,包括 InternalResourceViewResolver(用于 JSP 视图)、FreeMarkerViewResolver、ThymeleafViewResolver 等。
-
View(视图): View 负责将模型数据渲染成最终的响应输出。在 Spring MVC 中,视图可以是 JSP、FreeMarker、Thymeleaf 等模板引擎生成的页面。
-
Interceptor(拦截器): Interceptor 允许你在请求被处理之前或之后执行一些操作。拦截器可以用于日志记录、权限检查、性能监控等。在 Spring MVC 中,你可以通过实现
HandlerInterceptor
接口来定义拦截器。 -
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"; // 返回视图名
}
}