当前位置: 首页 > news >正文

注解配置SpringMVC

使用配置类和注解代替web.xml和Spring和SpringMVC配置文件的功能。

创建初始化类,代替web.xml

Spring3.2引入了一个便利的WebApplicationInitializer基础实现,
名为AbstractAnnotationConfigDispatcherServletInitializer,当我们的类扩展了
AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候,
容器会自动发现它,并用它来配置Servlet上下文。

web.xml的替代配置类

//代替web.xml
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {@Override
//    设置一个配置类代替spring的配置文件protected Class<?>[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}@Override
//    设置一个配置类代替springMVC的配置文件protected Class<?>[] getServletConfigClasses() {return new Class[]{WebConfig.class};}@Override
//    设置springmvc的前端控制器DispatcherServlet的url-patternprotected String[] getServletMappings() {return new String[]{"/"};}
//    设置当前的过滤器  ctrl+o@Overrideprotected Filter[] getServletFilters() {
//        创建编码过滤器CharacterEncodingFilter characterEncodingFilter=new CharacterEncodingFilter();characterEncodingFilter.setEncoding("UTF-8");characterEncodingFilter.setForceEncoding(true);
//        处理请求方式的过滤器HiddenHttpMethodFilter hiddenHttpMethodFilter=new HiddenHttpMethodFilter();return new Filter[]{characterEncodingFilter,hiddenHttpMethodFilter};}
}

SpringConfig配置类,代替spring的配置文件

applicationContext.xml的替代配置类

//代替spring的配置文件
@Configuration  //将当前类标识为配置类
public class SpringConfig {
//ssm整合之后,spring的配置信息写在此类中
}

WebConfig配置类,代替SpringMVC的配置文件

//代替springmvc的配置文件/*** 扫描组件,视图解析器,默认的servlet,mvc的注解驱动,视图控制器,文件上传解析器,拦截器,异常解析器*///扫描组件
@ComponentScan("com.atguigu.controller")//开启mvc的注解驱动
@EnableWebMvcpublic class WebConfig implements WebMvcConfigurer {@Override//默认的servlet处理静态资源  ctrl+opublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}@Overridepublic void addViewControllers(ViewControllerRegistry registry) {
//  配置视图解析器    addViewController : 设置浏览器发送的请求为/上下文路径的时候所设置的逻辑视图就是indexregistry.addViewController("/").setViewName("index");}//    文件上传解析器@Bean //可以将标识的方法的返回值作为bean进行管理,bean的id为方法的方法名public CommonsMultipartResolver multipartResolver(){return new CommonsMultipartResolver();}//    配置拦截器@Overridepublic void addInterceptors(InterceptorRegistry registry) {FirstInterceptor firstInterceptor=new FirstInterceptor();registry.addInterceptor(firstInterceptor).addPathPatterns("/**");}//    异常解析器@Overridepublic void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {SimpleMappingExceptionResolver exceptionResolver=new SimpleMappingExceptionResolver();Properties properties=new Properties();properties.setProperty("java.lang.ArithmeticException","error");//设置异常映射exceptionResolver.setExceptionMappings(properties);//设置共享异常信息的键exceptionResolver.setExceptionAttribute("ex");resolvers.add(exceptionResolver);}//配置生成模板解析器@Beanpublic ITemplateResolver templateResolver() {WebApplicationContext webApplicationContext =ContextLoader.getCurrentWebApplicationContext();
// ServletContextTemplateResolver需要一个ServletContext作为构造参数,可通过WebApplicationContext 的方法获得ServletContextTemplateResolver templateResolver = newServletContextTemplateResolver(webApplicationContext.getServletContext());templateResolver.setPrefix("/WEB-INF/templates/");templateResolver.setSuffix(".html");templateResolver.setCharacterEncoding("UTF-8");templateResolver.setTemplateMode(TemplateMode.HTML);return templateResolver;}//生成模板引擎并为模板引擎注入模板解析器@Beanpublic SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {SpringTemplateEngine templateEngine = new SpringTemplateEngine();templateEngine.setTemplateResolver(templateResolver);return templateEngine;}//生成视图解析器并未解析器注入模板引擎@Beanpublic ViewResolver viewResolver(SpringTemplateEngine templateEngine) {ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();viewResolver.setCharacterEncoding("UTF-8");viewResolver.setTemplateEngine(templateEngine);return viewResolver;}
}
http://www.lryc.cn/news/17889.html

相关文章:

  • 多项新规重磅发布,微信视频号近期需要关注这几点
  • Java调用第三方http接口的方式
  • 【跟我一起读《视觉惯性SLAM理论与源码解析》】第五章第六章 对极几何图优化库的使用
  • 从没想过开源 API 工具的 Mock 功能,这么好用
  • 智慧教室--智能管控系统
  • React的useLayoutEffect和useEffect执行时机有什么不同
  • C语言中#include<...>和#include“...“的区别
  • ubuntu本地访问nas
  • 第一章:网络参考模型
  • extends in typescript
  • 如何找回回收站删除的文件
  • Git系列——Git部署及应用
  • Java多线程(二)--线程相关内容
  • CF1692E Binary Deque 题解
  • rust方法和关联函数
  • 深度学习如何训练出好的模型
  • 智慧教室系统--重点设备监控系统
  • Linux中断处理
  • python中安装gurobi和pycharm没有语法提示问题解决
  • 滤波算法:经典卡尔曼滤波
  • flask框架(下)
  • Airbyte架构
  • anchor box只是先验知识,bounding box是一种过程,ground truth才是标准答案,
  • 带你轻松实现通讯录(C语言版)
  • 渗透测试之交换式网络嗅探实验
  • rust 安装
  • 机器学习和深度学习综述
  • SQL零基础入门学习(八)
  • 若依系统如何集成qq邮件发送【超详细,建议收藏】
  • 前端-CSS-zxst