在此之前,一直使用的是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. BZOJ 4569 【SCOI2016】 萌萌哒

    题目链接:萌萌哒 我先不吐槽题目名……这道题的并查集好像我们考过……既然那道题我没写就来把这道题写了吧(雾 这道题由于合并操作只有\(m\)次,那么很显然的一个想法就是把建一棵线段树类似物,然后每次在 ...

  2. 学习gulpfile.babel.js随笔

    'use strict' import gulp from 'gulp' //将gulp插件包含进来 import sass from 'gulp-sass' //编译sass文件 import im ...

  3. 将 R 整合到 markdown 中

    markdown 易于写入和读取,具有编写报告的必要功能,例如简单的文本格式,嵌入图片.链接.表.引用.数学公式以及代码块.虽然在 markdown 中编写纯文本很容易,但是创建具有许多图片和表格的报 ...

  4. key寻址算法

    分布式寻址算法 hash 算法(大量缓存重建) 一致性 hash 算法(自动缓存迁移)+ 虚拟节点(自动负载均衡) redis cluster 的 hash slot 算法 hash 算法 来了一个 ...

  5. hdu1564博弈+找规律

    #include<map> #include<set> #include<cmath> #include<queue> #include<stac ...

  6. canvas绘制进度条(wepy)

    <template> <canvas canvas-id="canvas" style="width:{{width+10}}px;height:{{w ...

  7. STL中的map

    map 容器 提供 1 对 1 的关系 定义方式: map<string,int>mp; 写在前面的是关键字. 数据插入: 1.使用 insert 插入 pair 数据 mp.insert ...

  8. Http协议中Cookie详细介绍

    Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的.硬盘Cookie ...

  9. 049——VUE中使用animation与transform实现vue的动画效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. IOS下使用多线程

    ios有三种主要方法:1.NSThread.2.NSOperation.3.GCD. 1.  NSThread: 调用方法如下:如果需要函数参数的话,可以通过Object传递. 1.1:[NSThre ...