我们常常会创建一个config包 ,在这个包里面新建一个MyMvcConfig类,这个类实现WebMvcConfigurer接口,并且重写这个接口里面的方法
这个接口里面的常用方法:
public interface WebMvcConfigurer
{
/* 拦截器配置 */
void addInterceptors(InterceptorRegistry var1);
/* 视图跳转控制器 */
void addViewControllers(ViewControllerRegistry registry);
/*静态资源处理*/
void addResourceHandlers(ResourceHandlerRegistry registry);
/* 默认静态资源处理器 */
void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);
/*这里配置视图解析器*/
void configureViewResolvers(ViewResolverRegistry registry);
/* 配置内容裁决的一些选项*/
void configureContentNegotiation(ContentNegotiationConfigurer configurer);
/** 解决跨域问题 **/
public void addCorsMappings(CorsRegistry registry) ;
}
1. 设置拦截器:
public class MyMvcConfig implements WebMvcConfigurer
{
@Override
public void addInterceptors(InterceptorRegistry registry)
{
registry.addInterceptor(new myHandlerInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/index.html","/","/user/login","/css/**","/js/**","/img/**");
}
}
- addInterceptor:需要传入一个实现HandlerInterceptor接口的拦截器实例
- addPathPatterns:用于设置拦截器的过滤路径规则;
addPathPatterns("/**")
对所有请求都拦截,如果写addPathPatterns("/abc"),那就只对/abc开头的路径进行拦截
- excludePathPatterns:用于设置不需要拦截的过滤规则,比如/user/login路径本来就是请求登录,就不用拦截
常用来实现效果:用户想访问一个页面,先检查用户是否已经登录,如果没有登陆,就会提示你还没有登录,需要先登录,并返回登陆页面
2.页面跳转:
public class MyMvcConfig implements WebMvcConfigurer
{
@Override
public void addViewControllers(ViewControllerRegistry registry)
{
registry.addViewController("/toLogin").setViewName("login");
//也就是说在浏览器中输入localhost:8080/toLogin会跳转到login.html页面
}
}
3.跨域:
public class MyMvcConfig implements WebMvcConfigurer
{
@Override
public void addCorsMappings(CorsRegistry registry)
{
super.addCorsMappings(registry);
registry.addMapping("/cors/**")
.allowedHeaders("*")
.allowedMethods("POST","GET")
.allowedOrigins("*");
}
}
4.视图解析器
public class MyMvcConfig implements WebMvcConfigurer
{
/**
* 配置请求视图映射
* @return
*/
@Bean
public InternalResourceViewResolver resourceViewResolver()
{
InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
//请求视图文件的前缀地址
internalResourceViewResolver.setPrefix("/WEB-INF/jsp/");
//请求视图文件的后缀
internalResourceViewResolver.setSuffix(".jsp");
//最后的地址就是前缀地址+视图文件的地址+后缀地址
return internalResourceViewResolver;
}
/**
* 视图配置
* @param registry
*/
@Override
public void configureViewResolvers(ViewResolverRegistry registry)
{
super.configureViewResolvers(registry);
registry.viewResolver(resourceViewResolver());
/*registry.jsp("/WEB-INF/jsp/",".jsp");*/
}
}