提示:个人学习笔记
文章目录
- 一、WebInit配置类
- 二、spring与springmvc配置类
将springmvc工程中的web.xml、springmvc.xml等配置文件使用注解来进行配置;
一、WebInit配置类
将web.xml配置文件用WebInit类代替,该类需要继承AbstractAnnotationConfigDispatcherServletInitializer
抽象类,并重写以下方法:
-
Class<?>[] getRootConfigClasses()
: 设置spring的配置类 -
Class<?>[] getServletConfigClasses()
: 设置springmvc的配置类 -
String[] getServletMappings()
: 设置前端控制器的映射路径 -
Filter[] getServletFilters()
: 设置过滤器
该配置类如下:
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
* 指定spring的配置类
* @return
*/
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
/**
* 指定SpringMVC的配置类
* @return
*/
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
/**
* 指定DispatcherServlet的映射规则,即url-pattern
* @return
*/
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected Filter[] getServletFilters() {
//编码过滤器
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
//响应编码
characterEncodingFilter.setForceResponseEncoding(true);
//HiddenHttpMethodFilter设置put与delete请求方式的响应
HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
return new Filter[]{characterEncodingFilter,hiddenHttpMethodFilter};
}
}
二、spring与springmvc配置类
1. spring配置类SpringConfig
:
@Configuration //标识为配置类
public class SpringConfig {
//spring相关配置
}
2. springmvc配置类WebConfig
:
在原来的springmvc.xml配置文件中,一般设置了如下配置:
- 1 开启组件扫描
<context:component-scan base-package=""/>
- 2 视图控制器
<mvc:view-controller path="" view-name=""/>
- 3 视图解析器
ThymeleafViewResolver视图解析器
- 4 开启静态资源
<mvc:default-servlet=handler/>
- 5 springmvc注解驱动
<mvc:annotation-driven/>
- 6 异常处理
//springmvc异常处理器:SimpleMappingExceptionResolver
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<pros>
<pro key="异常的类型">出现异常跳转的视图页面</pro>
</pros>
//exceptionAttribute将出现的异常存入域对象,实现共享参数,根据设置的value回显异常信息
<property name="exceptionAttribute" value="自定义键名"/>
</bean>
- 7 拦截器
第一种:<bean class="拦截器全限类名"/> 拦截所有请求
第二种:<ref bean="拦截器bean"/> 拦截所有请求
第三种:
<mvc:interceptors>
<mvc:mapping="需要拦截的请求映射"/>
<mvc:exclude-mapping="不需要拦截的请求映射"/>
<ref bean="拦截器的bean"/>
</mvc:interceptors>
在WebConfig配置类
中以上配置为:
@Configuration //将当前类标识为一个配置类
@ComponentScan("controller") //扫描组件
@EnableWebMvc //mvc注解驱动
public class WebConfig implements WebMvcConfigurer {
/**
开启静态资源
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
/**
* 视图控制器
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//registry.addViewController("请求映射").setViewName("响应的视图名");
registry.addViewController("/hello").setViewName("error");
}
/**
* 异常处理
* @param resolvers
*/
@Override
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
Properties pro = new Properties();
//pro.setProperty("异常类型","出现异常跳转的视图名");
pro.setProperty("java.lang.ArithmeticException","error");
exceptionResolver.setExceptionMappings(pro);
//设置请求域中共享的建,使用键获取异常信息
exceptionResolver.setExceptionAttribute("exception");
resolvers.add(exceptionResolver);
}
/**
* 拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
//FirstInterceptor是一个拦截类,实现HandlerInterceptor,并重写preHandler,postHandler,afterCompletion
FirstInterceptor firstInterceptor = new FirstInterceptor();
//registry.addInterceptor(拦截器实例对象).addPathPatterns("拦截路径");
registry.addInterceptor(firstInterceptor).addPathPatterns("/**");//拦截所有
}
//原配置中ThymeleafViewResolver有内部bean(SpringTemplateEngine),SpringTemplateEngine中有内部bean(templateresolver)
//配置生成模板解析器
@Bean //返回值作为ioc容器的一个bean
public ITemplateResolver templateResolver() {
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
// ServletContextTemplateResolver需要一个ServletContext作为构造参数,可通过WebApplicationContext 的方法获得
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(
webApplicationContext.getServletContext());
templateResolver.setPrefix("/WEB-INF/templates/"); //前缀
templateResolver.setSuffix(".html"); //后缀
templateResolver.setCharacterEncoding("UTF-8"); //编码
templateResolver.setTemplateMode(TemplateMode.HTML);
return templateResolver;
}
//生成模板引擎并为模板引擎注入模板解析器
@Bean
public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
return templateEngine;
}
//生成视图解析器并未解析器注入模板引擎
@Bean
public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setTemplateEngine(templateEngine);
return viewResolver;
}
}
文件目录结构: