3.1 传统的SSM开发过程

传统的SSM(Spring + SpringMVC + MyBatis),曾经是主流的企业级架构方案:标准的MVC分层架构设计模式,将整个系统划分为模板视图(View)层、控制器(Controller)层、业务逻辑Service层、数据库访问的Dao层。我们使用Spring MVC负责请求的转发和视图管理,使用Spring核心容器实现业务对象的协作和生命周期的管理,MyBatis作为数据库ORM层的对象持久化引擎。

我们需要小心翼翼地配置pom.xml中的各种项目依赖及其版本以保证jar包不冲突。这个pom.xml将是一个很庞大的依赖配置,动辄上百行。这么多的依赖,各种版本号也都必须要对得上,不能发生版本不兼容的情况。然后,我们还需要仔细配置Spring上下文spring.xml文件。这个Spring配置文件是Spring的BeanFactory工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的“图纸总纲”。Java EE程序员必须学会并灵活应用这份“图纸”来准确地表达自己的“生产意图”。

Spring配置文件是一个或多个标准的XML文档,如果在web.xml中没有显式指定contextConfigLocation,将会使用XmlWebApplicationContext的默认的配置/WEB-INF/app-licationContext.xml。applicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。

如果我们使用自定义名称的spring.xml文件,就需要在web.xml中通过配置contex-ConfigLocation参数来指定Spring的配置文件。代码示例如下:

        <? xml version="1.0" encoding="UTF-8"? >
        <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns="http://java.sun.com/xml/ns/j2ee"
                  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/
                      xml/ns/j2ee/web-app_2_4.xsd"
                  version="2.4">
            <! -- 配置Spring -->
            <context-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring.xml</param-value>
            </context-param>
            …
        </web-app>

完整的Spring配置文件spring.xml内容通常也非常庞大。

如果是Java Web项目的开发,通常还需要配置SpringMVC的上下文spring-mvc.xml这个XML。SpringMVC的上下文配置文件主要是:

        org.springframework.web.servlet.DispatcherServlet

这个DispatcherServlet类在初始化过程中使用。DispatcherServlet提供Spring Web MVC的集中访问点,负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。我们需要在spring-mvc.xml中配置默认的注解映射的支持、自动扫描包路径、视图模板引擎等等一系列配置,完整的spring-mvc.xml配置文件内容参考示例工程源代码。

在Web应用中的web.xml中通常还需要配置DispatcherServlet,在应用程序目录中的classpath: spring-mvc.xml配置springMVC的配置文件位置。一个配置实例如下:

            <! -- 配置springmvc -->
            <servlet>
                <servlet-name>springMVC</servlet-name>
                <servlet-class>org.springframework.web.servlet.DispatcherServlet</
                    servlet-class>
                <init-param>
                    <param-name>contextConfigLocation</param-name>
                    <param-value>classpath:spring-mvc.xml</param-value>
                </init-param>
                <load-on-startup>1</load-on-startup>
            </servlet>
              <servlet-mapping>
                  <servlet-name>springMVC</servlet-name>
                  <url-pattern>/</url-pattern>
              </servlet-mapping>

这样,Spring Web MVC框架将加载“classpath: spring-mvc.xml”来进行初始化上下文而不是约定的默认文件路径“/WEB-INF/[servlet名字]-servlet.xml”。

项目完整的web.xml配置文件的内容参考示例工程。

提示

本节介绍的传统SSM实例工程源代码参考:https://github.com/KotlinSpring Boot/spring_mybatis_demo

web.xml文件是用来初始化整个项目的配置信息的。比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。web.xml又叫部署描述符文件,是在Servlet规范中定义的,是web应用的配置文件。部署描述符文件就像所有XML文件一样,必须以一个XML头开始。这个头声明可以使用的XML版本并给出文件的字符编码。DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义)。所有部署描述符文件的顶层(根)元素为web-app。请注意,XML元素是大小写敏感的。因此,web-App和WEB-APP都是不合法的,web-app必须用小写。

web.xml的加载顺序是:

        <context-param>→<listener>→<filter>→<servlet>

其中,如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载。另外,当我们使用Spring的@Service、@Controller等注解的时候,需要告诉Spring去哪里扫描并注册这些Bean,这个配置在spring.xml中,例如:

        <! -- 扫描service、dao组件 --><context:component-scan base-package="com.easy.
        Spring Boot"/>

我们在上一章中已经知道了:

        <context:component-scan base-package="com.easy.Spring Boot"/>

这个配置等价于下面这段使用注解配置的代码:

        @ComponentScan(basePackage="com.easy.Spring Boot")

在Spring Boot中就是大量使用基于注解的配置,从而去除XML配置。

传统的Java Web项目的开发过程中,通常还需要单独去配置Tomcat服务器,然后在IDE中配置集成。这个过程也比较费时。