SpringBoot学习(五)重拾Spring Web MVC
目录
- Web MVC核心组件
- Web MVC注解驱动
- xml与注解替换
- @EnableWebMvc 注解
- Web MVC 其他常用注解
- Web MVC 自动装配
Web MVC核心组件
| 组件 | 说明 | |
|---|---|---|
| HandlerMapping | 将请求与拦截器列表一起映射到处理程序,以进行预处理和后期处理。映射基于某些标准,具体标准因HandlerMapping 实现而异。两个主要HandlerMapping实现是RequestMappingHandlerMapping (支持带@RequestMapping注释的方法)和SimpleUrlHandlerMapping (将URI路径模式显式注册到处理程序) | |
| HandlerAdapter | 帮助DispatcherServlet调用映射到请求的处理程序,而不管实际如何调用该处理程序。主要目的HandlerAdapter是保护DispatcherServlet这些细节。 | |
| HandlerExceptionResolver | 解析异常 | |
| ViewResolver | String将从处理程序返回的基于逻辑的视图名称解析为实际的名称View ,以将其呈现给响应。 | |
| LocaleResolver,LocaleContextResolver | 能够提供国际化的视图 | |
| ThemeResolver |
<?xml version="1.0" encoding="UTF-8"?>
Web MVC注解驱动
- 注解配置 @Configuration
- 组件激活 @EnableWebMvc
- 自定义组件 WebMvcConfigurer(接口,基于java1.8)
xml与注解替换
@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/jsp/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HandlerInterceptor() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("addInterceptors.preHandle");
return true;
}
});
}
}
以上代码的@Configuration,@EnableWebMvc,@Bean相关代码替换以下xml配置
@EnableWebMvc 注解
-
配置@EnableWebMvc注解则会自动加载@Configuration的配置类
-
DelegatingWebMvcConfiguration中无@Bean,@Bean在WebMvcConfigurationSupport类中
Web MVC 其他常用注解
- 模型属性 @ModelAttribute
- 请求头 @RequestHeader
- Cookie @CookieValue
- 切面通知 @ControllerAdvice
- 异常处理
- 校验参数
Web MVC 自动装配
@ComponentScan(basePackages = "com.webmvc")
public class DispatcherServletConfig {
}
public class
DefaultAnnotationConfigDispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
// 对应web.xml
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[0];
}
// DispatcherServlet
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{DispatcherServletConfig.class};
}
// 映射
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
替换
- web.xml
app
org.springframework.web.servlet.DispatcherServlet
1
contextConfigLocation
/WEB-INF/app-context.xml
app
/
- app-context.xml
相关代码
- https://github.com/zhaimiya/springboot