使用配置类和注解代替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. C#中event和delegate的区别

    event是一种特殊签名格式的delegate,event的定义必须在类内,delegate可以脱离类的存在. event的引发是通过调用委托实现的,而委托不仅仅用来实现事件的引发. 通过加入even ...

  2. selenium之文件的上传

    文件的上传:主要是两种实现方法: 1.如果定位的元素是type类型是file类型的话,那么直接定位元素并使用send_keys方法完成文件上传 2.如果是非file类型的话,则需要使用第三方工具完成文 ...

  3. selenium验证码处理-打码平台操作

    1.进入打码平台(超人,斐斐) 斐斐-------官网: 超人-------官网: 2.选择对应的开发文档,下载对应的demo示例,并把demo的python脚本放到项目包管理地址去 参考: 超人的开 ...

  4. [J2EE]SSM整合/Spring 与 MyBatis的整合【待续】

    参考文献 spring与mybatis五种整合方法 - 博客园/推荐

  5. xtrabackup+MySQL8全备+增备脚本

    问题描述:运用xtrabackup进行mysql全备,mysql8之前使用的是innodbxtrabackup,mysql8之后开始使用xtrabackup,innobackupex把功能都集成到xt ...

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

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

  7. SpringBoot应用集成微服务组件Nacos

    目录 springboot与微服务组件nacos Nacos服务快速启动 STS4 开发工具 Maven 环境配置 STS4开发工具引入Maven配置 Maven Repo配置阿里云镜像源 Sprin ...

  8. 没有杯子的世界:OOP设计思想的应用实践

    最近看到一个有趣的问题:Person类具有Hand,Hand可以操作杯子Cup,但是在石器时代是没有杯子的,这个问题用编程怎么解决? 简单代码实现 我们先用简单代码实现原问题: @Data publi ...

  9. DeFi-DEX-借贷

    不知道为什么上课的笔记没保存上55555 看看ppt和视频吧(

  10. RateLimiter使用

    1.maven依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava ...