一.SSM剩余概念和配置
在之前的三篇文章里,我分别讲了SpringMVC、Spring、Mybatis三个子框架的概念、运行流程以及配置说明,再往前的一篇文章,我也讲过了maven的概念和配置,其中的配置文件,包含了config.properties、mybatis-config.xml、spring-context.xml、spring-mvc.xml,还有maven的pom.xml文件。
整个项目的路径构成和resources里的配置文件,以及pom.xml的位置如上图所示,可见还有几个配置文件是我们没讲过的,这里就先说一说还有那些个关键的配置文件,他们都有什么作用,处在什么路径。
1.Web.xml
身为一个web工程,别管是不是maven管理,也别管用没用ssm框架,web.xml一定是必备的,也是项目第一步加载的一个配置文件,先来看一下它的路径位置:
然后再直接贴一下web.xml的内容,附上部分核心配置语句的功能:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID"
version="3.1">
<!-- 项目名称 -->
<display-name>xxx-bs-maintaining-app</display-name>
<!-- Context ConfigLocation -->
<!-- 加载Spring容器配置 -->
<!-- 设置spring容器加载所有的配置文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring-context*.xml</param-value>
</context-param>
<!-- 配置ContextLoaderListener监听器,启动web时自动装配ApplicationContext。默认执行实现方法 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<!-- 解决工程编码过滤器 -->
<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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Apache Shiro -->
<!-- 配置Shiro安全认证过滤器以及映射 -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- SiteMesh -->
<!-- SiteMesh网页布局和修饰框架配置 -->
<filter>
<filter-name>sitemeshFilter</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemeshFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- MVC Servlet -->
<!-- 配置SpringMVC核心控制器 -->
<!-- 配置DispatcherServlet前端控制器 -->
<servlet>
<servlet-name>springServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置DispatcherServlet的路径 -->
<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>
<!-- 为DispatcherServlet建立映射 -->
<servlet-mapping>
<servlet-name>springServlet</servlet-name>
<!-- 也可以写成*.do -->
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- DruidStatView -->
<!-- Druid Monitor监控java web项目 -->
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<!--init-param>
<param-name>allow</param-name>
<param-value>127.0.0.1</param-value>
</init-param-->
<!-- 允许清空统计数据 -->
<!--init-param>
<param-name>resetEnable</param-name>
<param-value>true</param-value>
</init-param-->
<init-param>
<!-- 用户名 -->
<param-name>loginUsername</param-name>
<param-value>druid</param-value>
</init-param>
<init-param>
<!-- 密码 -->
<param-name>loginPassword</param-name>
<param-value>druid#dyb</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
<!-- Validate code -->
<servlet>
<servlet-name>ValidateCodeServlet</servlet-name>
<servlet-class>com.xxx.lrt.frame.core.web.servlet.ValidateCodeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidateCodeServlet</servlet-name>
<url-pattern>/servlet/validateCodeServlet</url-pattern>
</servlet-mapping>
<!-- [INSERT FRAGMENT HERE] -->
<!-- Session configure, to "config.properties" file "session.sessionTimeout" parameter.
<session-config>
<session-timeout>30</session-timeout>
</session-config>-->
<!-- Error page -->
<!-- <error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/WEB-INF/views/error/500.jsp</location>
</error-page> -->
<error-page>
<error-code>500</error-code>
<location>/WEB-INF/views/error/500.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/views/error/404.jsp</location>
</error-page>
</web-app>
2.decorators.xml
其中,在sitemesh配置的地方,sitemesh应用Decorator模式,用filter截取request和response,在src的WEB-INF下,与web.xml同级,建立以下decorators.xml:
<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/WEB-INF/views">
<!-- 默认装饰页面, 在需要装饰的页面增加<meta name="decorator" content="default"/> -->
<decorator name="blank" page="layouts/blank.jsp" />
<decorator name="default" page="layouts/default.jsp" />
</decorators>
3.pom.xml
pom.xml是maven集成项目的核心文件,也是牵扯甚广,下面贴一下,里面标注出配置的作用,主要包含的是maven引入的jar包:
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<!-- 存储包的路径,命名规则第一段为org(非盈利组织)/com(商业组织),第二段为公司名,第三段为项目名 -->
<groupId>com.xxx.bs</groupId>
<!-- 打包类型,这里是war包 -->
<packaging>war</packaging>
<!-- 模块名 -->
<artifactId>xxx-bs-maintaining-app</artifactId>
<version>1.0.0</version>
<name>xxx-bs-maintaining-app</name>
<url>http://maven.apache.org</url>
<!-- 项目属性 -->
<properties>
<!-- main version setting -->
<!-- spring版本号 -->
<spring.version>4.3.7.RELEASE</spring.version>
<validator.version>5.1.1.Final</validator.version>
<!-- mybatis版本号 -->
<mybatis.version>3.4.5</mybatis.version>
<mybatis-spring.version>1.3.1</mybatis-spring.version>
<druid.version>1.1.6</druid.version>
<ehcache.version>2.6.9</ehcache.version>
<ehcache-web.version>2.0.4</ehcache-web.version>
<!-- 安全框架shiro缓存版本号 -->
<shiro.version>1.4.0</shiro.version>
<!-- jedis、redis缓存版本号 -->
<jedis.version>2.9.0</jedis.version>
<spring.data.redis.version>1.8.1.RELEASE</spring.data.redis.version>
<sitemesh.version>2.4.2</sitemesh.version>
<!-- tools version setting -->
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.7.7</slf4j.version>
<logback.version>1.1.2</logback.version>
<commons-lang3.version>3.3.2</commons-lang3.version>
<commons-io.version>2.4</commons-io.version>
<commons-codec.version>1.9</commons-codec.version>
<commons-fileupload.version>1.3.1</commons-fileupload.version>
<commons-beanutils.version>1.9.1</commons-beanutils.version>
<jackson.version>2.9.3</jackson.version>
<fastjson.version>1.2.44</fastjson.version>
<xstream.version>1.4.7</xstream.version>
<guava.version>18.0</guava.version>
<dozer.version>5.5.1</dozer.version>
<poi.version>3.17</poi.version>
<zip4j.version>1.3.2</zip4j.version>
<quartz.version>2.2.2</quartz.version>
<!--引入themeleaf-->
<thymeleaf.version>3.0.9.RELEASE</thymeleaf.version>
<!-- jdbc driver setting -->
<mysql.driver.version>5.1.31</mysql.driver.version>
<!-- environment setting -->
<jdk.version>1.8</jdk.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<downloadSources>true</downloadSources>
<war.plugin.version>2.6</war.plugin.version>
<compiler.plugin.version>3.5.1</compiler.plugin.version>
<clean.plugin.version>2.5</clean.plugin.version>
<antrun.plugin.version>1.8</antrun.plugin.version>
<dependency.plugin.version>2.10</dependency.plugin.version>
<install.plugin.version>2.5.2</install.plugin.version>
</properties>
<!-- 依赖项定义 -->
<dependencies>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>${thymeleaf.version}</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
<version>${thymeleaf.version}</version>
</dependency>
<dependency>
<groupId>com.github.theborakompanioni</groupId>
<artifactId>thymeleaf-extras-shiro</artifactId>
<version>2.0.0</version>
</dependency>
<!-- SPRING begin -->
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</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>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring orm -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>${spring.data.redis.version}</version>
</dependency>
<!-- bean validate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${validator.version}</version>
</dependency>
<!-- SPRING end -->
<!-- AOP begin -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.1</version>
</dependency>
<!-- AOP end -->
<!-- PERSISTENCE begin -->
<!-- MyBatis -->
<!-- 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>${mybatis-spring.version}</version>
</dependency>
<!-- connection pool -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- jdbc driver -->
<!-- 导入Mysql数据库链接jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.driver.version}</version>
<scope>compile</scope>
</dependency>
<!-- PERSISTENCE end -->
<!-- WEB begin -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</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-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>opensymphony</groupId>
<artifactId>sitemesh</artifactId>
<version>${sitemesh.version}</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
&l