SpringMVC的注解配置
创建初始化类,代替web.xml
在Servlet3.0环境中,容器会在类路径中查找实现java.servlet.ServletContainerInitializer
接口的类,如果找到的话就用它来配置Servlet容器。
Spring提供了这个接口的实现类SpringServletContainerInitailizer
,这个类反过来又会查找实现WebApplicationInitailizer
的类并将配置的任务交给它们来完成。Spring3.2引入了一个便利的WebApplicationInitailizer
基础实现类AbstractAnnotationConfigDispatcherServletInitailizer
,当我们定义的类继承了改类并将其部署到Servlet3.0容器时,容器会自动发现它,并用它来配置Servlet上下文。
// web工程的初始化类,用来代替web.xml
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
* 指定spring的配置类
* @return spring的配置类数组
*/
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
/**
* 指定springmvc的配置类
* @return springmvc的配置类数组
*/
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
/**
* 指定DispatcherServlet映射规则数组,即url-pattern
* @return DispatcherServlet映射规则数组
*/
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
/**
* 注册过滤器
* @return 过滤器数组
*/
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceResponseEncoding(true);
HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
return new Filter[]{characterEncodingFilter,hiddenHttpMethodFilter};
}
}
创建WebConfig类代替springmvc.xml
/** 代替SpringMVC的配置文件**/
// 将当前类标识为一个配置类
@Configuration
// 1. 扫描组件
@ComponentScan("com.controller")
// 5. mvc注解驱动
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
// 1. 开启组件扫描
// 2. 配置视图解析器
// 2.1配置生成模版解析器
@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;
}
// 2.2生成模版引擎并为模版引擎注入模版解析器
@Bean
public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver){
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
return templateEngine;
}
// 2.3生成视图解析器并为解析器注入模版引擎
@Bean
public ViewResolver viewResolver(SpringTemplateEngine templateEngine){
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setTemplateEngine(templateEngine);
return viewResolver;
}
// 3. 视图控制器
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/hello").setViewName("hello");
}
// 4. 默认servlet-静态资源处理
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
// 5. mvc注解驱动
// 6. 文件上传解析器
@Bean
public MultipartResolver multipartResolver(){
MultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
return commonsMultipartResolver;
}
// 7. 异常处理
@Override
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
Properties properties = new Properties();
// 不能使用put,因为properties文件中的键值对都是String
properties.setProperty("ArithmeticException","error");
exceptionResolver.setExceptionMappings(properties);
exceptionResolver.setExceptionAttribute("exception");
resolvers.add(exceptionResolver);
}
// 8. 拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
/**
* 创建拦截器类,在这里new一个对象给下面的方法作为参数
* 定义拦截规则
* add是添加规则
* exclude是排除拦截规则
* 添加规则里面是集合,可以放多个
*/
registry.addInterceptor(new TestInterceptor()).addPathPatterns("/login");
registry.addInterceptor(new TestInterceptor()).excludePathPatterns("/index");
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· spring官宣接入deepseek,真的太香了~