在此之前,一直使用的是XML的方式配置SpringMVC,现在为了适应Servlert3.0以及JavaConfig的Spring配置方式,在这里记录一下使用Java代码配置SpringMVC。首先,来回顾一下使用XML配置的过程:

1.在web.xml中配置DispatcherServlet

2.在SpringMVC配置文件中配置viewResolver(视图解析器)

3.在SpringMVC配置文件中配置两个基本配置

  • <mvc:annotation-driven/>
  • <mvc:default-servlet-handler/>

4.在SpringMVC配置文件中配置组件扫描Controller(注意与Spring的组件扫描分开,形成父子容器,这也是Spring建议的)

这几步下来,SpringMVC基本上已经配置完成。我们使用Java配置的过程也大致如此。

配置DispatcherServlet

因为不再使用web.xml,那么去哪里配置DispatcherServlet ?

我们需要使用一个类继承 AbstractAnnotationConfigDispatcherServletInitializer ,继承之后这个类就相当于前端控制器了:

public class WebAppinitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?> [] {RootConfig.class};
} @Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?> [] {WebConfig.class};
} @Override
protected String[] getServletMappings() {
return new String[] {"/"};
} }

getRootConfigClasses()方法用于获取根容器的配置类;(Spring的配置文件),相当于父容器配置,这里使用的是名为RootConfig的类

getServletConfigClasses()方法用于获取web容器的配置类(SpringMVC配置文件),相当于子容器配置,这里使用的是名为WebConfig的类

getServletMappings() 方法就是用于表明DispatcherServlet的映射信息,“/”表示拦截所有请求,因为是个字符串数组,所以可以写多个映射。

SpringMVC的配置

SpringMVC的基本配置包括:视图解析器,两个基本配置。编写一个配置类继承 WebMvcConfigurerAdapter (该类已经过时,新实现WebMvcConfigurationSupport)
@Configuration
@ComponentScan(value="com.atguigu",includeFilters={
        @Filter(type=FilterType.ANNOTATION,classes={Controller.class})
},useDefaultFilters=false)
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter{ @Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/view/");
viewResolver.setSuffix(".jsp");return viewResolver;
} @Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
} }

在这里我是将视图解析器配置为一个Bean,还可以直接重写WebMvcConfigurerAdapter 类的 configureViewResolvers方法,效果是一样的

@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/view/", ".jsp");
}

@EnableWebMvc 注解就相当于应用了<mvc:annotation-driven/> ,启用了SpringMVC的高级特性

重写 configureDefaultServletHandling 方法就是将SpringMVC不能处理的静态资源交给Tomcat处理,相当于<mvc:default-servlet-handler/>

Spring的配置

因为要使用父子容器的方式,所以还需要配置Spring,在这里不用配置太复杂,直接扫描除了Controller层的其他组件即可

@Configuration
@ComponentScan(value="cn.lynu",excludeFilters={
@Filter(type=FilterType.ANNOTATION,classes={Controller.class})
})
public class RootConfig { }

因为这里只是简单的处理Web层,所以不需要太复杂,在这个Spring配置类中就没有任何方法

OK,至此SpringMVC的Java配置方式已经完成了。继承 AbstractAnnotationConfigDispatcherServletInitializer的方式,会自动注册DispatcherServlet和ContextLoaderListener,而使用XML的方式,我们还需要自己在web.xml中完成它们的注册。
 

使用Java配置SpringMVC的更多相关文章

  1. 纯java配置SpringMVC

    一般情况下,我们会在web.xml下配置好Spring和SpringMVC,并指定好它们的配置文件 是最常用的也是最方便的方法 例如: web.xml <!-- The definition o ...

  2. JAVA配置&注解方式搭建简单的SpringMVC前后台交互系统

    前面两篇文章介绍了 基于XML方式搭建SpringMVC前后台交互系统的方法,博文链接如下: http://www.cnblogs.com/hunterCecil/p/8252060.html htt ...

  3. springmvc java配置

    配置DispatcherServlet DispatcherServlet的是SpringMVC的核心.在这里请求会第一次接触都框架,它要负责将请求路由到其他的组件之中. 使用Java配置将Dispa ...

  4. IDEA用maven创建springMVC项目和配置(XML配置和Java配置)

    1.DEA创建项目 新建一个maven project,并且选择webapp原型. 然后点击next 这里的GroupId和ArtifactID随意填写,但是ArtifactID最好和你的项目一名一样 ...

  5. 第7章—SpringMVC高级技术—不用web.xml,而使用java类配置SpringMVC

    不用web.xml,而使用java类配置SpringMVC DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置 ...

  6. SSM Spring SpringMVC Mybatis框架整合Java配置完整版

    以前用着SSH都是老师给配好的,自己直接改就可以.但是公司主流还是SSM,就自己研究了一下Java版本的配置.网上大多是基于xnl的配置,但是越往后越新的项目都开始基于JavaConfig配置了,这也 ...

  7. springmvc基于java配置的实现

    该案例的github地址:https://github.com/zhouyanger/demo/tree/master/springmvc-noxml-demo 1.介绍 之前搭建SpringMvc项 ...

  8. 第一节(配置springmvc环境)学习尚硅谷-springmvc视频教程

    之前,一直从事C#开发.后来,公司调整后领导决定使用java开发,因此需要收集相关学习资料.该视频教程比较入门,也适合自己,于是边看边写的同时再总结一下便于自己牢记,遇到分歧不对之处望指正. 开发环境 ...

  9. Spring完全基于Java配置和集成Junit单元测试

    要点: 配置继承WebApplicationInitializer的类作为启动类,相当于配置web.xml文件 使用@Configuration注解一个类,在类中的方式使用@Bean注解,则表名该方法 ...

随机推荐

  1. SQL server 2012 阻塞分析查询

    最近公司的数据库并发有点大,由于CPU不高.内存不高.硬盘正常.网络也正常等等,但系统还是会卡,所以就怀疑是数据库阻塞导致的,于是去查询资料,看书及经过用以下sql观查,经过几天对数据的分析找到原因并 ...

  2. bzoj 2818 gcd 线性欧拉函数

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 给定整数N,求1< ...

  3. shell 判断文件是否是可执行文件

    测试变量指定的文件是否存在且是可执行文件.如果存在且是可执行文件,则执行该文件,否则通过chmod命令赋予该文件可执行权限. //test.sh #!/bin/bash echo "ente ...

  4. linux 常用操作以及概念

    一.常用操作以及概念 查看LINUX发行版的名称及其版本号的命令: lsb_release -a cat /etc/redhat-release(针对redhat,Fedora) 0.rpm包路径:/ ...

  5. do-while语句和while的区别

    do-while语句是一种后测试循环语句,即只有在循环体中的代码执行之后,才会测试出口条件.其实就是,代码在刚开始执行的时候,都是要先走一遍do循环体内的代码,然后在与while里面的条件进行判断,成 ...

  6. 数据库连接池druid 监控台配置

    这篇文章主要讲druid 监控台的配置及界面使用介绍. 业界把 Druid 和 HikariCP 做对比后,虽说 HikariCP 的性能比 Druid 高,但是因为 Druid 包括很多维度的统计和 ...

  7. New Concept English Two 9 22

    The video can be found on the website. $课文20 独坐孤舟 190. Fishing is my favourite sport. 钓鱼是我特别喜爱的一项运动. ...

  8. 面试题总结(一)、TCP协议

    声明:本文主要探讨当TCP协议出现在面试笔试场合可能会涉及的问题,每一个知识点讨论力求简洁,便于记忆,但讨论深度有限,如要深入研究可点击参考链接,希望对正在找工作的同学有点帮助. 一.TCP协议简介 ...

  9. SELU︱在keras、tensorflow中使用SELU激活函数

    arXiv 上公开的一篇 NIPS 投稿论文<Self-Normalizing Neural Networks>引起了圈内极大的关注,它提出了缩放指数型线性单元(SELU)而引进了自归一化 ...

  10. c#TextBox输入框自动提示、自动完成、自动补全功能

    功能概览 相关属性 TextBox.AutoCompleteCustomSource 属性 获取或设置当 TextBox.AutoCompleteSource 属性设置为 [CustomSource] ...