基于注解方式启动SpringMVC

一、Maven依赖
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-webmvcartifactId>
      <version>5.0.5.RELEASEversion>
    dependency>
二、定义MyMVConfig配置类
@Configuration
@EnableWebMvc//相当于WebMvcConfigurationSupport,使用@EnableWebMvc注解就等于扩展了WebMvcConfigurationSupport,但是没有扩展任何方法。
@ComponentScan("com.test.controller")//扫描Controller层将其装配到Spring的bean容器中
public class MyMvcConfig {
}
三、配置文件信息
public class WebInitializer implements WebApplicationInitializer {//相当于web.xml中的配置
    public void onStartup(javax.servlet.ServletContext servletContext) throws ServletException {
        // 1.启动SpringMVC 容器 类注入到Spring中
        AnnotationConfigWebApplicationContext app = new AnnotationConfigWebApplicationContext();// 启动SpringMVC Web
        // 2.注入springmvc 的配置文件
        app.register(SpringMvcConfig.class);
        // 3. 将DispatcherServlet 注入到 serlvet容器中
        ServletRegistration.Dynamic dynamic =
                servletContext.addServlet("dispatcher", new DispatcherServlet(app));
        // 4.填写url路径映射
        dynamic.addMapping("/");
        dynamic.setLoadOnStartup(1);// 优先级最高表示 最早被加载
    }
}
四、整合jsp页面
@Bean
public ViewResolver viewResolver() {
    InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
    // 前缀
    internalResourceViewResolver.setPrefix("/WEB-INF/view/");
    // 后缀
    internalResourceViewResolver.setSuffix(".jsp");
    return internalResourceViewResolver;
}
五、SpringMVC拦截器使用
1.拦截器和过滤器的区别

拦截器和过滤器都是基于Aop实现的,能够对请求之前之后实现拦截

过滤器是基于Servlet容器实现,对web请求之前之后进行拦截

拦截器不需要依赖Servlet容器, 不仅可以对web请求进行拦截,还可以对方法进行拦截。

使用:

拦截器:权限控制、日志打印、参数验证 、会话。

过滤器:编码转换、跨域解决、xss攻

2.SpringMVC拦截器的使用

自定义拦截器拦截请求Token

preHandle在业务处理器处理请求之前被调用

postHandle在业务处理器处理请求执行完成后,生成视图之前执行

afterCompletion在DispatcherServlet完全处理请求后被调用,可用于清理资源等。

public class TokenInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println(">>>preHandle<<<");
        String token = request.getParameter("token");
        if (StringUtils.isEmpty(token)) {
            response.getWriter().print("not find token");
            return false;
        }
        return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println(">>>>>postHandle<<<<<<<<<");
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println(">>>afterCompletion<<<");
    }
}
六、SpringMvcConfig配置类

相当于springmvc.xml配置文件

@Configuration
@ComponentScan(basePackages = {"com.test.controller","com.test.service"})
//@EnableWebMvc
@EnableAsync
public class SpringMvcConfig extends WebMvcConfigurationSupport {
    //@EnableWebMvc 等于开启SpringMVC注解方式
    //@EnableWebMvc 底层会帮助我们注入WebMvcConfigurationSupport这类 覆盖我们自定义配置类
    @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
        // 1.需要前缀
        InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
        // 2.需要后缀
        internalResourceViewResolver.setPrefix("/WEB-INF/view/");
        internalResourceViewResolver.setSuffix(".jsp");
        return internalResourceViewResolver;
    }

    // 1.手动注入拦截器到Spring中
    @Bean
    public TokenInterceptor tokenInterceptor() {
        return new TokenInterceptor();
    }

    // 2.添加拦截器
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(tokenInterceptor()).addPathPatterns("/**");// 拦截所有的请求
    }
    // 配置springmvc相关一些信息WebMvcConfigurationSupport web视图相关内容
}
七、Controller层、Service层(略)

你可能感兴趣的:(Java,Java源码分析及手写)