Spring MVC 整合 Servlet 3.0

根据 Servlet 3.0 的新特性,web 容器启动的时候会扫描每个 jar 包下的 /META-INF/services/javax.servlet.ServletContainerInitializer 文件。

使用 Spring MVC 的 web 包,可以看到有这个文件:

文件内容如下:

org.springframework.web.SpringServletContainerInitializer

该类的头部信息如下:

@HandlesTypes(WebApplicationInitializer.class)
public class SpringServletContainerInitializer implements ServletContainerInitializer {

Spring 的应用一启动就会加载感兴趣的 WebApplicationInitializer 接口下的组件,并且为这些组件创建对象。

  • AbstractContextLoaderInitializer:创建根容器 rootAppContext;
  • AbstractDispatcherServletInitializer
    1. 创建一个 web 的 IOC 容器 servletAppContext
    2. 创建一个 dispatcherServlet
    3. 将创建的 dispatcherServlet 添加到容器中;
  • AbstractAnnotationConfigDispatcherServletInitializer:注解方式配置 dispatcherServlet 的初始化器:
    1. 首先创建根容器;
    2. 创建 web IOC 容器;

所以我们要想以注解的方式启动 SpringMVC 只需要写一个类继承 AbstractAnnotationConfigDispatcherServletInitializer ,然后实现抽象方法指定 DispatcherServlet 的配置信息。

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    /**
     * 获取根容器的配置类: 相当于 Spring 的配置文件
     *
     * @return 根容器的配置类
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{RootConfig.class};
    }
    /**
     * 获取 Web 容器的配置类: 相当于 Spring MVC 的配置文件
     *
     * @return Web 容器的配置类
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{ServletConfig.class};
    }
    /**
     * 获取 Servlet 的映射信息
     * "/"  代表拦截所有请求: 包括静态资源,但是不拦截 *.jsp
     * "/*" 也是拦截所有请求,也拦截 *.jsp
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

指定两个类,一个是根容器的配置类,另一个是 Web 容器的配置类,两个容器是父子容器的关系。

根容器只扫描所有的 ServiceRepository 组件,所以要排除 Controller

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

而 Web 容器只扫描 Controller

@ComponentScan(value = "top.wsuo", includeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class})
}, useDefaultFilters = false)
@EnableWebMvc
public class ServletConfig {
}

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2g2deaym94lc8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
因为这本电子书太大了,只能分开上传,需要下载完 Struts_2+Spring_3+Hibernate整合开发.part1.rar Struts_2+Spring_3+Hibernate整合开发.part2.rar Struts_2+Spring_3+Hibernate整合开发.part3.rar Struts_2+Spring_3+Hibernate整合开发.part4.rar Struts_2+Spring_3+Hibernate整合开发.part5.rar 才能解压开。 《轻量级Java EE企业应用实战:Struts2+Spring3+Hibernate整合开发(第3版)》是《轻量级Java EE企业应用实战》的第3版,第3版保持了第2版内容全面、深入的特点,主要完成全部知识的升级。   《轻量级Java EE企业应用实战:Struts2+Spring3+Hibernate整合开发(第3版)》介绍了Java EE领域的三个开源框架:Struts 2、Spring和Hibernate。其中Struts 2升级到2.2.1,Spring升级到3.0.5,Hibernate升级到了3.6.0。本书还全面介绍了Servlet 3.0的新特性,以及Tomcat 7.0的配置和用法,本书的示例应该在Tomcat 7.0上运行。   本书重点介绍如何整合Struts 2.2+Spring 3.0+Hibernate 3.6进行Java EE开发,主要包括三部分,第一部介绍Java EE开发的基础知识,以及如何搭建开发环境。第二部分详细讲解Struts 2.2、Spring 3.0和Hibernate 3.6三个框架的用法,介绍三个框架时,从Eclipse IDE的使用来上手,一步步带领读者深入三个框架的核心。这部分内容是笔者讲授“疯狂Java实训”的培训讲义,因此是本书的重点部分,既包含了笔者多年开发经历的领悟,也融入了丰富的授课经验。第三部分示范开发了一个包含7个表、表之间具有复杂的关联映射、继承映射等关系,且业务也相对复杂的工作流案例,希望让读者理论联系实际,将三个框架真正运用到实际开发中去,该案例采用目前最流行、最规范的Java EE架构,整个应用分为领域对象层、DAO层、业务逻辑层、MVC层和视图层,各层之间分层清晰,层与层之间以松耦合的方法组织在一起。该案例既提供了IDE无关的、基于Ant管理的项目源码,也提供了基于Eclipse IDE的项目源码,最大限度地满足读者的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕子鸽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值