一、Maven依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.5.RELEASE</version>
</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视图相关内容
}