SpringBoot学习(五)重拾Spring Web MVC

Web WVC核心组件

组件 说明
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"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.imooc.web"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>

Web WVC 注解驱动

  • 注解配置 @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配置

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
    </bean>

@EnableWebMvc 注解

  • 配置@EnableWebMvc注解则会自动加载@Configuration的配置类

  • DelegatingWebMvcConfiguration中无@Bean,@Bean在WebMvcConfigurationSupport类中

Web MVC 其他常用注解

  • 模型属性 @ModelAttribute
  • 请求头 @RequestHeader
  • Cookie @CookieValue
  • 切面通知 @ControllerAdvice
  • 异常处理
  • 校验参数

相关代码

  • https://github.com/zhaimiya/springboot

猜你喜欢

转载自www.cnblogs.com/VVII/p/12462464.html
今日推荐