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

注解配置SpringMVC

文章目录

  • 目的
  • 1、创建初始化类,代替web.xml
  • 2、创建SpringConfig配置类,代替spring的配置文件
  • 3、创建WebConfig配置类,代替SpringMVC的配置文件
  • 4、测试功能

目的

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

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

在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器。
Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这个类反过来又会查找实现WebApplicationInitializer的类并将配置的任务交给它们来完成。Spring3.2引入了一个便利的WebApplicationInitializer基础实现,名为AbstractAnnotationConfigDispatcherServletInitializer,当我们的类扩展了AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候,容器会自动发现它,并用它来配置Servlet上下文。

public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {/*** 指定spring的配置类* @return*/@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}/*** 指定SpringMVC的配置类* @return*/@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{WebConfig.class};}/*** 指定DispatcherServlet的映射规则,即url-pattern* @return*/@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}/*** 添加过滤器* @return*/@Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();encodingFilter.setEncoding("UTF-8");encodingFilter.setForceRequestEncoding(true);HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();return new Filter[]{encodingFilter, hiddenHttpMethodFilter};}
}

2、创建SpringConfig配置类,代替spring的配置文件

@Configuration
public class SpringConfig {//ssm整合之后,spring的配置信息写在此类中
}

3、创建WebConfig配置类,代替SpringMVC的配置文件

@Configuration
//扫描组件
@ComponentScan("com.atguigu.mvc.controller")
//开启MVC注解驱动
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {//使用默认的servlet处理静态资源@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}//配置文件上传解析器@Beanpublic CommonsMultipartResolver multipartResolver(){return new CommonsMultipartResolver();}//配置拦截器@Overridepublic void addInterceptors(InterceptorRegistry registry) {FirstInterceptor firstInterceptor = new FirstInterceptor();registry.addInterceptor(firstInterceptor).addPathPatterns("/**");}//配置视图控制/*@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/").setViewName("index");}*///配置异常映射/*@Overridepublic void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();Properties prop = new Properties();prop.setProperty("java.lang.ArithmeticException", "error");//设置异常映射exceptionResolver.setExceptionMappings(prop);//设置共享异常信息的键exceptionResolver.setExceptionAttribute("ex");resolvers.add(exceptionResolver);}*///配置生成模板解析器@Beanpublic 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;}//生成模板引擎并为模板引擎注入模板解析器@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;}}

4、测试功能

@RequestMapping("/")
public String index(){return "index";
}

相关文章:

  • TypeScript - 枚举类型 -字符型枚举
  • DDOS版-超功能记事本 Ⅲ 8.8源码
  • Kafka-Java四:Spring配置Kafka消费者提交Offset的策略
  • Java架构师信息系统构建
  • 【图结构从入门到应用】图的表示和遍历,图搜索算法详解与示例
  • ubuntu 下的 使用anaconda 环境运行python 项目
  • [C++]——带你学习类和对象
  • C++入门精讲——入门看完这一篇就够了
  • Go学习第十五章——Gin参数绑定bind与验证器
  • c:变参函数:汇编解析;va_list;marco 宏:__VA_ARGS__
  • 数字孪生与智慧城市:开启未来智慧生活
  • 2023CCF中国开源大会 | 麒麟信安作为首批合作伙伴入驻全国信创开源广场
  • 计算机专业毕业设计如何选题、如何规避风险、避免入坑
  • uniapp解决iOS切换语言——原生导航栏buttons文字不生效
  • Elasticsearch聚合----aggregations的简单使用
  • SegmentFault for Android 3.0 发布
  • [nginx文档翻译系列] 控制nginx
  • 10个最佳ES6特性 ES7与ES8的特性
  • Cumulo 的 ClojureScript 模块已经成型
  • Fundebug计费标准解释:事件数是如何定义的?
  • Java,console输出实时的转向GUI textbox
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • PAT A1017 优先队列
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • React 快速上手 - 07 前端路由 react-router
  • Swoft 源码剖析 - 代码自动更新机制
  • vue中实现单选
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 多线程 start 和 run 方法到底有什么区别?
  • - 概述 - 《设计模式(极简c++版)》
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 如何解决微信端直接跳WAP端
  • 实现简单的正则表达式引擎
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 7行Python代码的人脸识别
  • 如何在招聘中考核.NET架构师
  • 说说我为什么看好Spring Cloud Alibaba
  • 我们雇佣了一只大猴子...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #include到底该写在哪
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (分布式缓存)Redis哨兵
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (转载)从 Java 代码到 Java 堆
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET开发不可不知、不可不用的辅助类(一)