Servlet3.0——定制和接管SpringMVC

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rubulai/article/details/80993327

1、使用@EnableWebMvc注解开启SpringMVC定制配置功能,相当于<mvc:annotation-driven/>

①实现WebMvcConfigurer接口,并重写该接口中的方法(高版本的Spring中该接口中的方法不一定必须实现)

@EnableWebMvc
@ComponentScan(value = "com.bdm", useDefaultFilters = false, includeFilters = {
		@Filter(type = FilterType.ANNOTATION, classes = { Controller.class }) })
public class AppConfig implements WebMvcConfigurer {
	public void configurePathMatch(PathMatchConfigurer configurer) {
	}

	public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
	}

	public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
	}

	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();//相当于<mvc:default-servlet-handler/>,将SpringMVC处理不了的请求交给tomcat,比如静态资源的访问
	}

	public void addFormatters(FormatterRegistry registry) {
	}

	public void addInterceptors(InterceptorRegistry registry) {
	}

	public void addResourceHandlers(ResourceHandlerRegistry registry) {
	}

	public void addCorsMappings(CorsRegistry registry) {
	}

	public void addViewControllers(ViewControllerRegistry registry) {
	}

	public void configureViewResolvers(ViewResolverRegistry registry) {
	}

	public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
	}

	public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
	}

	public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
	}

	public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
	}

	public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
	}

	public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
	}

	@Nullable
	public Validator getValidator() {
		return null;
	}

	@Nullable
	public MessageCodesResolver getMessageCodesResolver() {
		return null;
	}
}

②继承WebMvcConfigurerAdapter,高版本中已不建议使用这种方式,因为和实现WebMvcConfigurer接口一样

@SuppressWarnings("deprecation")
@EnableWebMvc
@ComponentScan(value = "com.bdm", useDefaultFilters = false, includeFilters = {
		@Filter(type = FilterType.ANNOTATION, classes = { Controller.class }) })
public class AppConfig extends WebMvcConfigurerAdapter {
	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		// 配置视图解析器
		// registry.jsp();//内部调用了jsp("/WEB-INF/", ".jsp");从/WEB-INF/中找jsp
		registry.jsp("/WEB-INF/pages/", ".jsp");
	}

	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();// 配置静态资源访问,不开启则静态资源无法访问
	}

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");// 添加自定义的拦截器和拦截的请求
	}
}

自定义的拦截器:

public class MyInterceptor implements HandlerInterceptor {

	// 目标方法运行之前执行
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("preHandle...");
		return true;//return true才会继续往下执行请求方法,否则请求方法得不到执行
	}

	// 目标方法执行正确之后执行
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable ModelAndView modelAndView) throws Exception {
		System.out.println("postHandle...");
	}

	// 页面响应之后执行
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable Exception ex) throws Exception {
		System.out.println("afterCompletion...");
	}
}

猜你喜欢

转载自blog.csdn.net/rubulai/article/details/80993327