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

13.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
*/
   @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[]{"/"};
  }
   /**
    * 添加过滤器
    * @return
    */
   @Override
   protected Filter[] getServletFilters() {
       CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
       encodingFilter.setEncoding("UTF-8");
       encodingFilter.setForceRequestEncoding(true);
       HiddenHttpMethodFilter hiddenHttpMethodFilter = newHiddenHttpMethodFilter();
       return new Filter[]{encodingFilter, hiddenHttpMethodFilter};
  }
}

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

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

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

@Configuration
//扫描组件
@ComponentScan("com.atguigu.mvc.controller")
//开启MVC注解驱动
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
   //使用默认的servlet处理静态资源
   @Override
   public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
       configurer.enable();
  }
   //配置文件上传解析器
   @Bean
   public CommonsMultipartResolver multipartResolver(){
       return new CommonsMultipartResolver();
  }
   //配置拦截器
   @Override
   public void addInterceptors(InterceptorRegistry registry) {
       FirstInterceptor firstInterceptor = new FirstInterceptor();
       registry.addInterceptor(firstInterceptor).addPathPatterns("/**");
  }
   //配置视图控制
   /*@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
}*/
   //配置异常映射
   /*@Override
public 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);
}*/
   //配置生成模板解析器
   @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;
  }
}

13.4、测试功能

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

13. 注解配置SpringMVC的更多相关文章

  1. 注解配置springMVC

    在随笔“springMVC项目配置文件”的基础上,进行优化,使用注解配置,控制器类得以简化: 一.注解配置springMVC 1.在HelloController类中,去除实现的Controller接 ...

  2. 注解配置springMvc及向作用域中赋值

    1.在applicationContext.xml中配置包扫描器 <!-- 使用注解配置扫描器 --> <context:component-scan base-package=&q ...

  3. 【SpringMVC】完全注解配置SpringMVC

    创建初始化类,代替web.xml 在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来 ...

  4. springMVC学习记录2-使用注解配置

    前面说了一下使用xml配置springmvc,下面再说说注解配置.项目如下: 业务很简单,主页和输入用户名和密码进行登陆的页面. 看一下springmvc的配置文件: <?xml version ...

  5. 1-3. SpringBoot基础,Java配置(全注解配置)取代xml配置

    最近突发奇想,整合一下以前一些学习笔记,分享自己这几年爬过的坑,逐步更新文章,谢谢大家的关注和支持. 这节讲一下SpringBoot的学习必须的一些基础,Java配置.其实在Spring2.0时代就已 ...

  6. spring mvc 第一天【注解实现springmvc的基本配置】

    创建pojo,添加标识类的注解@Controller,亦可添加该Handler的命名空间:设置类的@RequestMapping(value="/hr") 该类中的方法(Handl ...

  7. SpringMVC基础配置(通过注解配置,非xml配置)

    SpringMVC是什么,有多火,我这里就不再啰嗦了,SpringMVC比Struts2好用太多,我在学校的时候私下里两种都接触过,对比之后果断选择了SpringMVC,后来在做Android应用开发 ...

  8. SpringMVC整合mybatis基于纯注解配置

    Mybatis整合Spring配置 第一部分:配置Spring框架 配置SpringMVC的步骤 配置流程图 导入包(哪些包,基本包5个,1日志依赖包,2webmvc支持包)SpringMVC配置 & ...

  9. 关于什么是SpringMVC,和SpringMVC基于xml配置、注解配置、纯注解配置

    首先我们先要了解一下,什么是SpringMVC? SpringMVC是Spring框架内置的MVC的实现.SpringMVC就是一个Spring内置的MVC子框架,也就是说SpringMVC的相关包都 ...

  10. spring-mvc注解配置小记

    Controller中注解Service时,Service的实现类需加@Service,dao的实现类需加@Repository. 另:配置文件中对应的包也需要扫描到!!! <context:a ...

随机推荐

  1. Spring注解系列——@PropertySource

    在Spring框架中@PropertySource注解是非常常用的一个注解,其主要作用是将外部化配置解析成key-value键值对"存入"Spring容器的Environment环 ...

  2. 四月二十日java基础知识

    1.不可被继承的成员与最终类:在默认情况下,所有的成员变量和成员方法都可以被覆盖,如果父类的成员不希望被子类的成员锁覆盖可以将它们声明为final.如果用final来修饰成员变量,则说明该成员变量是最 ...

  3. spring事务里面开启线程插入,报错了是否会回滚?

    1.前言 一道非常有意思的面试题目.大概是这样子的,如果在一个事务中,开启线程进行插入更新等操作,如果报错了,事务是否会进行回滚 2.代码 示例1 @RequestMapping("/tes ...

  4. homebrew 无法从 API 更新错误问题

    今天中午吃饭前,想看看有没有更新,于是打开终端模拟器(我用的是 WezTerm),brew update,结果更新出了点问题 大致情况就是我不能从 API 更新,这个特性是从 homebrew 进入 ...

  5. Win Airtest + 夜神模拟器 实现APP自动化

    前言: Airtest 是一个跨平台的UI自动化测试框架,适用于游戏和App.目前支持Windows.Android平台和 iOS 平台. 一.下载Airtest 下载地址:https://airte ...

  6. [数据库]MYSQL之授予/查验binlog权限

    在后端做主从备份:亦或是在大数据领域中,各类CDC同步(Canal / Flink CDC等),均会基于MYSQL的binlog来实现. 因此,知道需要哪些权限?怎么查验去.怎么授权就很重要了. 感觉 ...

  7. Hugging News #0428: HuggingChat 来啦

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  8. 超声波、毫米波、ToF激光雷达——在低功耗场景的应用选型

    前言: 目前主要的测距方式有:光学测距,超声波和微波雷达测距. 光学测距又可以分为:双目,结构光,ToF.微波雷达,在消费类产品中,常见的是波长在毫米级别的毫米波雷达.超声波应用比较多的是在车载倒车雷 ...

  9. Python网页开发神器fac 0.2.8、fuc 0.1.28新版本更新内容介绍

    fac项目地址:https://github.com/CNFeffery/feffery-antd-components fuc项目地址:https://github.com/CNFeffery/fe ...

  10. PaddlePaddle 自动求导

    自动求导 在 PaddlePaddle 中使用自动求导来计算导数. 要求:$ f(x)=\sin{x} $,绘制 \(f(x)\) 和 \(\dfrac{\mathrm{d}f(x)}{\mathrm ...