第02课:SSM

第02课:SSM 框架的搭建

上一篇通过 Maven 已将项目骨架搭好,本文主要向骨架中添充内容,也就是完成配置文件的配置。

我们首先看下 SSM 框架搭建核心步骤:

  1. 在 pom.xml 中添加 Maven 依赖,主要目的是将项目中所需要用到的 jar 包引入到项目,通过 Maven 进行管理。
  2. 配置文件的配置,主要是 web.xml 的配置,数据库连接池的配置,日志文件的配置,SpringMVC 的配置,MyBatis 的配置等,具体配置内容下面会做详细说明。
  3. 添加 Web 服务器 Tomcat,因为项目启动需要载体。
  4. 启动 Tomcat 服务,访问 127.0.0.1:8080 或者 localhost:8080,页面成功访问,即表示 SSM 框架搭建完成。

查看 Maven 的本地仓库

在配置之前,我们需先了解下 Maven 仓库。

Maven 仓库是 Maven 管理 jar 包的地方,有本地仓库,远程仓库和中央仓库之分。本地仓库即存在于本机。远程仓库,可通过配置 settings.xml 获取,比如阿里云的远程仓库。中央仓库为 Maven 的仓库,不配置远程仓库,默认从中央仓库下载 jar 依赖,然而中央仓库在国外,下载起来速度会很慢,所以我们多会选择配置阿里云远程仓库。

如何查看 Maven 本地仓库的位置,具体步骤如下。

首先,打开 CMD 命令窗口,输入如下 Maven 命令,即可查看 Maven 本地仓库的位置。

mvn help:effective-settings

如果没有配置 Maven 本地仓库的位置,默认位置在 C:\Users\你的主机名\.m2\repository 下,如图:

如果你有自己的 Maven 仓库,可在 Maven 的解压目录 apache-maven-3.3.9\conf 下的 settings.xml 中配置。

<localRepository>你的仓库路径</localRepository>    

我的 Maven 仓库路径为 D:/repository,配置如下图所示:

上面提到,我们多会使用阿里云远程仓库,接下来我们看看它的配置过程。

首先,配置阿里云镜像。这时我们可在 settings.xml 中找到 mirrors 标签,在 mirrors 标签内配置如下内容:

     <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>

如下图所示:

配置阿里云镜像的目的是使用阿里云的远程仓库,如果不配置,则默认使用中央仓库,而中央仓库在国外,下载依赖时会很慢。

然后在 file -> settings 中找到 Maven,在下图所示的位置添加 Maven 的路径以及 Maven 配置文件 settings.xml 的路径,仓库的位置(即在 settings.xml 中配置的仓库)将自动显示出来。

选用 MySQL 数据库

MySQL 是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言——结构化查询语言(SQL)进行数据库管理。

因为 MySQL 相比 Oracle 开源、免费,很多企业也在用,所以本课程我们选用 MySQL 数据库作为存储数据库。

如果还没有安装 MySQL 数据的同学请参考这篇博文:《MySQL 安装》

添加 Maven 依赖

完成了以上的准备工作,接下来,我们就可以正式开始 SSM 的搭建了。首先是添加 Maven 依赖。

Maven 依赖有很多,这里只给出部分依赖,用来正常启动项目。每个依赖都在代码中添加了注释,这里就不赘述了。如果遇到报错,通过 Alt+Enter 组合键进行下载即可。

在 dreamland-web 子工程的 pom.xml 中添加以下代码:

        <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>

        <!-- spring版本号 -->
        <spring.version>4.2.5.RELEASE</spring.version>

        <!-- mybatis版本号 -->
        <mybatis.version>3.2.8</mybatis.version>

        <!-- mysql驱动版本号 -->
        <mysql-driver.version>5.1.29</mysql-driver.version>

        <!-- log4j日志包版本号 -->
        <slf4j.version>1.7.18</slf4j.version>
        <log4j.version>1.2.17</log4j.version>

        <!--spring-security版本号-->
        <spring-security.version>4.1.3.RELEASE</spring-security.version>

        <!--spring-data-redis版本号-->
        <spring.data.redis.version>1.7.1.RELEASE</spring.data.redis.version>
    </properties>

    <dependencies>
        <!-- 添加jstl依赖 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
        </dependency>

        <!-- 添加spring核心依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- 添加mybatis依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>

        <!-- 添加mybatis/spring整合包依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>

        <!-- 添加mysql驱动依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-driver.version}</version>
        </dependency>
        <!-- 添加数据库连接池依赖 -->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.2.2</version>
        </dependency>

        <!-- 添加日志相关jar包 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!-- log end -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.xbean/xbean-spring -->
        <dependency>
            <groupId>org.apache.xbean</groupId>
            <artifactId>xbean-spring</artifactId>
            <version>4.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.3</version>
        </dependency>
        <!-- 通用mapper -->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>3.1.2</version>
        </dependency>
    </dependencies>

pom.xml 的位置如下图所示:

配置文件

这一小节,我们将完成配置文件的配置。配置文件的加载顺序以及各配置文件有什么作用,我会在最后进行介绍。

各配置文件位置如下图:

jdbc.properties文件配置——数据库连接的配置

这个配置文件主要是 spring-mybatis.xml 引用的主要参数,jdbc.properties 包括 JDBC 加载类、URL、用户名和密码.

jdbcUrl=jdbc:mysql://localhost:3306/dream_db?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull

上面代码表示使用的是 MySQL 数据库,关于 MySQL 数据库的下载安装,这里不做介绍了,MySQL 数据库的默认端口是3306,端口号后的 dream_db 是你的数据库名称,后面的 useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull是指定字符的编码和解码格式。

配置代码如下:

    driverClasss=com.mysql.jdbc.Driver
    jdbcUrl=jdbc:mysql://localhost:3306/dream_db?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
    username=root
    password=root

    #定义初始连接数
    initialSize=0
    #定义最大连接数
    maxActive=20
    #定义最大空闲
    maxIdle=20
    #定义最小空闲
    minIdle=1
    #定义最长等待时间
    maxWait=60000

注意 dream_db 是数据库名称,username 和 password 分别是数据库用户名和密码。

log4j.properties文件配置——log日志的配置

log4j.properties 为 log4j 日志配置文件,主要将程序中打印的日志信息输出到控制台、保存到目录文件,可以通过配置设置日志文件的输出级别、格式、输出路径等。

配置代码如下:

    log4j.rootLogger=DEBUG,Console,File

    #日志输出到控制台
    og4j.appender.Console=org.apache.log4j.ConsoleAppender
    #指定输出到控制台
    log4j.appender.Console.Target=System.out
    #灵活地指定布局模式
    log4j.appender.Console.layout=org.apache.log4j.PatternLayout
    #日志输出格式设置
    log4j.appender.Console.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n

    #日志输出到文件
    log4j.appender.File=org.apache.log4j.RollingFileAppender
    #日志存放位置
    log4j.appender.File.File=D/wly/git/dreamland/logs/run.log
    #单个日志文件大小设置
    log4j.appender.File.MaxFileSize=10MB
    #输出日志,如果换成DEBUG表示输出DEBUG以上级别日志
    log4j.appender.File.Threshold=ALL
    log4j.appender.File.layout=org.apache.log4j.PatternLayout
    log4j.appender.File.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n

下面我们解释下以上代码中需要注意的地方。

(1)日志输出级别分为以下四种,优先级别为:

ERROR > WARN > INFO > DEBUG

输出原则为:程序会打印出高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少,即:

设置级别为 ERROR 只会打印出 ERROR 日志;

设置级别为 WARN 会打印出 ERROR 和 WRAN 日志;

设置级别为 INFO 会打印出 ERROR、WARN 和 INFO 日志;

设置为 DEBUG 会打印出所有日志。

本案例中 log4j.rootLogger=DEBUG,Console,File表示输出 DEBUG 以上级别日志。

(2)上面代码中出现的 %m%p%d%c%n……分别代表的含义如下所示:

    %m 输出代码中指定的消息 
    %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 
    %r 输出自应用启动到输出该log信息耗费的毫秒数 
    %c 输出所属的类目,通常就是所在类的全名 
    %t 输出产生该日志事件的线程名 
    %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n” 
    %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 :10:28,921
    %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
    %x Used to output the NDC (nested diagnostic context) associated with the thread that generated the logging event
    %X Used to output the MDC (mapped diagnostic context) associated with the thread that generated the logging event for specified key

(3)如下代码用来设定当文件到达设定大小时产生一个新的文件。

log4j.appender.File=org.apache.log4j.RollingFileAppender

将 RollingFileAppender 换成 DailyRollingFileAppender,则表示每天产生一个日志文件。

(4)可以在下面的代码中设置你的日志文件的存放位置。

    log4j.appender.File.File=D/wly/git/dreamland/logs/run.log

spring-mvc.xml 的配置

srping-mvc.xml 为 SpringMVC 核心配置文件,主要包括 Controller 层的包扫描、视图模式配置(跳转路径的前后缀)、文件上传配置、静态资源处理等。

配置代码如下,关键地方均有注释说明:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-4.0.xsd
                        http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

    <mvc:default-servlet-handler />
    <!-- 自动扫描 -->
    <context:component-scan base-package="wang.dreamland.www.controller"/>

    <!--避免IE执行AJAX时,返回JSON出现下载文件 -->
    <bean id="mappingJacksonHttpMessageConverter"
          class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
            </list>
        </property>
    </bean>

    <!-- 默认的注解映射的支持,自动注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
    <mvc:annotation-driven />

    <!-- 定义跳转的文件的前后缀 ,视图模式配置 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/" />
        <property name="suffix" value=".jsp"/>
    </bean>

    <!-- 文件上传配置 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 默认编码 -->
        <property name="defaultEncoding" value="UTF-8"/>
        <!-- 上传文件大小限制为31M,31*1024*1024 -->
        <property name="maxUploadSize" value="32505856"/>
        <!-- 内存中的最大值 -->
        <property name="maxInMemorySize" value="4096"/>
    </bean>

    <!-- 对静态资源文件的访问-->
    <mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/>
    <mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"/>
    <mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"/>

    </beans>

配置后会看到有报红,我们创建相对应的包路径和文件夹,注意 css、js、images 在 webapp 路径下。

在 java 目录右键 new -> Package -> wang.dreamland.www.controller。

然后在 webapp 下右键 new -> Directory 分别创建 css、js 和 images 文件夹,如下图:

spring-mybatis.xml 配置

spring-mybatis.xml 为 Spring 和 Mybatis 整合配置文件,主要进行扫描包的配置、数据源的配置、映射文件的配置、事务管理配置等,配置文件中都有注释,这里不再赘述。

配置代码如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd
                        http://www.springframework.org/schema/tx
                        http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!-- 自动扫描 -->
    <context:component-scan base-package="wang.dreamland.www"/>

     <!--第二种方式:加载多个properties文件-->
    <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
            </list>
        </property>
        <property name="fileEncoding" value="UTF-8"/>
    </bean>
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
        <property name="properties" ref="configProperties"/>
    </bean>

    <!-- 配置数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${driverClasss}"/>
        <property name="url" value="${jdbcUrl}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="${initialSize}"></property>
        <!-- 连接池最大数量 -->
        <property name="maxActive" value="${maxActive}"></property>
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="${maxIdle}"></property>
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${minIdle}"></property>
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="${maxWait}"></property>
    </bean>

    <!-- mybatis和spring完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- 配置Mybati的核心配置文件 -->
        <property name="configLocation" value="classpath:mybatis-config.xml" />

        <!-- 自动扫描mapping.xml文件 -->
     <!--   <property name="mapperLocations" value="classpath:mapping/*.xml"></property>-->
    </bean>

    <!--  DAO接口所在包名,Spring会自动查找其下的类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="wang.dreamland.www.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>


    <!-- 事务管理-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>
    </beans>

注意 dao 接口扫描包路径是 wang.dreamland.www.dao,之后配置 dao 时记得别配错路径了,否则会报错。

     <property name="basePackage" value="wang.dreamland.www.dao"/>

mybatis-config.xml 配置

mybatis-config.xml 是 MyBatis 的核心配置文件,包括驼峰命名、别名、通用 mapper、分页插件配置等。

配置代码如下,关键地方均有注释说明:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

    <configuration>
    <!-- 开启驼峰匹配 -->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <!-- 别名 -->
    <typeAliases>
        <!--默认别名为:javabean 的首字母小写的非限定类名来作为它的别名-->
        <package name="wang.dreamland.www.entity" />
    </typeAliases>
    <plugins>
        <plugin interceptor="tk.mybatis.mapper.mapperhelper.MapperInterceptor">
            <!--主键自增回写方法,默认值MYSQL,详细说明请看文档HSQLDB-->
            <property name="IDENTITY" value="MYSQL"/>

            <!--可选参数一共3个,对应0,1,2,分别为SequenceName,ColumnName,PropertyName-->
            <property name="seqFormat" value="{0}.nextval"/>

            <!--通用Mapper接口,多个通用接口用逗号隔开-->
            <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
        </plugin>
            <!-- 自定义分页插件 -->
         <!--   <plugin interceptor="wang.dreamland.www.common.PageHelper"></plugin>-->

    </plugins>
    </configuration>

上面代码中,wang.dreamland.www.entity 对应的是实体类包路径,之后新建实体时就放在该路径下:

     <package name="wang.dreamland.www.entity" />

web.xml 配置

web.xml 为 Web 容器的配置文件,用来初始化配置信息,主要定义了:

  1. Web 应用的名字、描述(display-name 和 description 标签);
  2. 应用范围的初始化参数(context-param 标签);
  3. 过滤器配置(filter 标签);
  4. 监听器配置(listener 标签);
  5. servlet 配置(servlet 标签,如前端控制器和验证码);
  6. 欢迎页面(welcome-file-list 标签,如 index.jsp 页面);
  7. session失效时间(session-config 标签);
  8. 错误页面配置(error-page 标签,如 404、500错误页面等)。

配置代码如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

    <display-name>dreamland-web</display-name>

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      classpath*:spring-mybatis.xml
    </param-value>
    </context-param>

      <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
      </context-param>

    <!-- 编码过滤器 解决POST乱码问题-->
    <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
      </filter>
      <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
      </filter-mapping>

      <!-- spring监听器 -->
      <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>

      <!-- 防止spring内存溢出监听器,比如quartz -->
      <listener>
    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
      </listener>

      <!-- spring mvc servlet-->
      <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>
    <async-supported>true</async-supported>
      </servlet>
      <!-- servlet-mapping -->
      <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <!-- 此处也可以配置成 *.do 形式 -->
    <url-pattern>/</url-pattern>
      </servlet-mapping>

      <!-- 指明对于如下资源文件不采用spring的过滤器 -->
      <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.xml</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
      </servlet-mapping>

      <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>

      <!-- session配置 -->
      <session-config>
    <session-timeout>15</session-timeout>
      </session-config>
    </web-app>

配置完成后的整体目录结构如下:

添加 Tomcat 服务并启动

添加 Tomcat Server

点击右上角的倒三角 -> Edit Configurations,如下图所示:

接下来的设置请参考下面图示说明:

启动 Tomcat

启动项目后,访问 127.0.0.1:8080 或者 localhost:8080,可以看到页面上出现了熟悉的 “Hello World!”,表示 SSM 框架搭建完成!

配置文件加载顺序

Web 容器加载配置文件顺序

上面,我们把配置文件配置好了,那怎样才能起作用呢?这就需要 Web 容器来加载了。Web 容器加载配置文件的过程如下。

启动 Tomcat 后,Web 容器首先加载 web.xml 文件。

web.xml 文件是创建 Web 项目所需要的配置文件,用来初始化配置信息,主要包含拦截器、过滤器、servlet 等的配置,它的位置在项目 WEB-INF 目录下。

在 web.xml 的 <context-param>中加载其他 XML 和 log4j.properties 文件,代码如下:

     <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      classpath*:spring-mybatis.xml,
      classpath*:applicationContext-redis.xml,
      classpath*:applicationContext-activemq.xml,
    </param-value>
      </context-param>

     <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
      </context-param>

其中 param-name 的名称是固定格式,param-value 是要加载的配置文件名,多个用逗号隔开,通过 Ctrl+鼠标左键可定位到相应配置文件。

接着,根据 spring-mybatis.xml 中的 PropertiesFactoryBean 加载多个 properties 文件,代码如下:

       <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
                <value>classpath:redis.properties</value>              
            </list>
        </property>
        <property name="fileEncoding" value="UTF-8"/>
    </bean>
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
        <property name="properties" ref="configProperties"/>
    </bean>

通过 property 标签内的 list 标签可以加载多个 properties 文件,value 标签内就是具体的 properties 文件的路径,通过 Ctrl+鼠标左键可以定位到相应的文件。

根据 spring-mybatis.xml 的 SqlSessionFactoryBean 加载 mybatis 核心配置文件 mybatis-config.xml 以及其他映射文件

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- 配置Mybatis的核心配置文件 -->
        <property name="configLocation" value="classpath:mybatis-config.xml" />
        <!-- 自动扫描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath:mapping/*.xml"></property>
    </bean>

其中 property 标签的 name 值是固定的,通过该属性加载对应的 value 中的值,value 的值是配置文件的路径,通过 Ctrl+鼠标左键可访问该文件。

然后,加载前端控制器 DispatcherServlet 的配置文件 srping-mvc.xml。

      <!-- spring mvc servlet-->
      <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>
    <async-supported>true</async-supported>
      </servlet>
      <!-- servlet-mapping -->
      <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <!-- 此处也可以配置成 *.do 形式 -->
    <url-pattern>/</url-pattern>
      </servlet-mapping>

其中 init-param 标签是前端控制器的初始化参数配置,param-name 参数名为固定值,param-value 参数值为具体的配置文件路径,以此来加载对应的配置文件。

<load-on-startup>1</load-on-startup>的正数值越小,启动该 Servlet 的优先级越高。

这样所有的配置文件就加载完毕了!

上一篇
下一篇
内容互动
写评论
加载更多
评论文章