Spring + Mybatis + SpringMvc 框架搭建小结

附参考博文地址:http://blog.csdn.net/gebitan505/article/details/44455235

一、maven项目构建(此处暂略)

二、集成Spring与Mybatis

  1. Maven引入需要的jar包——pom.xml

    在pom.xml中配置所需jar包,网上可找到大量范例,此处以笔者构建的项目为例,用时需注意jar包的版本。

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>QF</groupId>
      <artifactId>happyFarm</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>happyFarm Maven Webapp</name>
      <url>http://maven.apache.org</url>
        <properties>
            <spring.version>4.1.4.RELEASE</spring.version>
            <shiro.version>1.2.3</shiro.version>
            <mybatis.version>3.2.8</mybatis.version>
            <mybatis-spring.version>1.2.2</mybatis-spring.version>
            <mysql.version>5.1.26</mysql.version>
            <druid.version>1.0.9</druid.version>
            <log4j.version>1.2.17</log4j.version>
            <slf4j.version>1.7.5</slf4j.version>
            <commons-lang3.version>3.1</commons-lang3.version>
            <commons-io.version>2.4</commons-io.version>
            <commons-codec.version>1.8</commons-codec.version>
            <commons-fileupload.version>1.3.1</commons-fileupload.version>
            <commons-beanutils.version>1.8.3</commons-beanutils.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <jdk.version>1.7</jdk.version>
        </properties>
        <dependencies>
        <!-- junit 测试包 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!-- servlet 服务包 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
            <scope>runtime</scope>
        </dependency>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</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-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
    
        <!--Apache Shiro所需的jar包 -->
        <!-- <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> 
            <version>${shiro.version}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> 
            <artifactId>shiro-web</artifactId> <version>${shiro.version}</version> </dependency> 
            <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> 
            <version>${shiro.version}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> 
            <artifactId>shiro-ehcache</artifactId> <version>${shiro.version}</version> 
            </dependency> -->
    
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${mybatis-spring.version}</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!-- druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <!-- ################### json解释 ################ -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-lgpl</artifactId>
            <version>1.9.6</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
            <version>1.9.4</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.5</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-lgpl</artifactId>
            <version>1.9.6</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.1.4</version>
        </dependency>
        <!-- ############################################## -->
        <!--json-lib -->
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>
    
        <!-- aop代理 -->
        <dependency>
            <groupId>asm</groupId>
            <artifactId>asm</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version> 1.6.11</version>
        </dependency>
        <!-- log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
    
        <!-- GENERAL UTILS begin <dependency> <groupId>org.apache.commons</groupId> 
            <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> 
            </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> 
            <version>${commons-codec.version}</version> </dependency> -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons-io.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>${commons-fileupload.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>${commons-beanutils.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        </dependencies>
        <build>
          <finalName>happyFarm</finalName>
        </build>
    </project>
    
  2. 配置数据库连接——jdbc.properties

    此处需要注意数据库名(myhappyfarm),数据库用户名(root),密码(“”),以及字符编码(useUnicode=true&characterEncoding=UTF-8),以上均以笔者所用框架为例。

    jdbc.driverClass = com.mysql.jdbc.Driver
    jdbc.url = jdbc:mysql://localhost:3306/myhappyfarm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
    jdbc.username = root
    jdbc.password = 
    jdbc.minPoolSize=2
    jdbc.maxPoolSize=20
    jdbc.checkoutTimeout=3000
    jdbc.maxStatements=50
    jdbc.testConnectionOnCheckin = false
    jdbc.idleConnectionTestPeriod = 18000
    
  3. 配置Spring与Mybatis配置文件——spring-mybatis.xml(命名无所谓)

    <?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" xmlns:task="http://www.springframework.org/schema/task"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd   
        http://www.springframework.org/schema/context   
        http://www.springframework.org/schema/context/spring-context-4.1.xsd  
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
        http://www.springframework.org/schema/task 
        http://www.springframework.org/schema/task/spring-task-4.1.xsd     
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-4.1.xsd"
        default-lazy-init="true">
        <!-- 定时器开关 开始 -->
        <task:annotation-driven />
        <!-- 标注类型 的事务配置 如果使用注解事务。就放开 <tx:annotation-driven /> -->
        <bean
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <value>classpath:jdbc.properties</value>
                </list>
            </property>
            <property name="ignoreUnresolvablePlaceholders" value="true" />
        </bean>
        <bean id="dataSource"
            class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="url" value="${jdbc.url}" />
            <property name="username" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
            <property name="driverClassName" value="${jdbc.driverClass}" />
        </bean>
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <!-- 自动匹配Mapper映射文件 -->
            <!--Remember fucking this!!!  -->
            <property name="mapperLocations" value="classpath:com/happyFarm/mapping/*.xml" />
            <property name="typeAliasesPackage" value="com.happyFarm.model" />
        </bean>
        <!-- 通过扫描的模式,扫描目录在com.lanyuan.mapper目录下,所有的mapper都继承SqlMapper接口的接口, 这样一个bean就可以了 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.happyFarm.dao" />
        </bean>
        <!-- 事务配置 -->
        <bean id="transactionManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource" />
        </bean>
        <aop:config>
            <aop:pointcut expression="execution(public * com.happyFarm.service.*Impl.*(..))"
                id="pointcut" />
            <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut" />
        </aop:config>
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="query*" propagation="REQUIRED" read-only="true" />
                <tx:method name="find*" propagation="REQUIRED" read-only="true" />
                <tx:method name="save*" propagation="REQUIRED" />
                <tx:method name="delete*" propagation="REQUIRED" />
                <tx:method name="add*" propagation="REQUIRED" />
                <tx:method name="modify*" propagation="REQUIRED" />
                <tx:method name="logicDelById" propagation="REQUIRED" />
            </tx:attributes>
        </tx:advice>
        <tx:annotation-driven />
        <!-- 使用Spring组件扫描的方式来实现自动注入bean -->
        <context:component-scan base-package="com.happyFarm.service.impl.**" />
        <!-- 隐式地向 Spring 容器注册 -->
        <context:annotation-config />
    </beans>
    
    • 配置*.Mapper.xml的路径以及实体类路径(这里定义了mapperLocation)

      <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
          <property name="dataSource" ref="dataSource" />
          <!-- 自动匹配Mapper映射文件 -->
          <property name="mapperLocations" value="classpath:com/happyFarm/mapping/*.xml" />
          <property name="typeAliasesPackage" value="com.happyFarm.model" />
      </bean>
      
    • 注入service层的实现类

      <!-- 使用Spring组件扫描的方式来实现自动注入bean -->
      <context:component-scan base-package="com.happyFarm.service.impl.**" />
      
  4. log4j配置,基本无需改变,通用

    #######################################################################
    # Categories and levels
    #######################################################################
    #log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    #log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
    
    
    #log4j.logger.com.ibatis=debug
    #log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
    #log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
    #log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
    #log4j.logger.java.sql.Connection=debug
    #log4j.logger.java.sql.Statement=debug
    #log4j.logger.java.sql.PreparedStatement=debug,stdout
    # 每天生成一个文件 设置为FileApp,ConApp 
    log4j.rootCategory=FileApp, ConApp
    log4j.category.com.gzedu = debug
    log4j.category.com.ibatis = debug
    log4j.category.freemarker = error
    log4j.category.org.springframework = error
    log4j.category.com.opensymphony = info
    log4j.category.org.apache = info
    log4j.category.java.sql = debug
    
    #######################################################################
    # Appenders
    #######################################################################
    
    # ConApp is set to be a ConsoleAppender.
    log4j.appender.ConApp=org.apache.log4j.ConsoleAppender
    # ConApp uses PatternLayout.
    log4j.appender.ConApp.layout=org.apache.log4j.PatternLayout
    # Define Pattern
    log4j.appender.ConApp.layout.ConversionPattern=%p %d{yyyy-MM-dd HH:mm:ss,SSS} %c.%t %m%n
    
    # FileApp
    #log4j.appender.FileApp=org.apache.log4j.RollingFileAppender
    log4j.appender.FileApp=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.FileApp.DatePattern ='_'yyyy-MM-dd'.log'
    log4j.appender.FileApp.File=${project}WEB-INF/logs/log
    log4j.appender.FileApp.layout=org.apache.log4j.PatternLayout
    log4j.appender.FileApp.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %5p %c{1}:%L - %m%n
    log4j.appender.FileApp.Append=true
    
  5. 利用MyBatis Generator自动创建代码

    • 所需jar包:
      • mybatis_3.2.7.jar
      • mybatis-generator-core-1.3.2-sources.jar
      • mysql-connector-java-5.1.25-bin.jar
    • generatorConfig.xml

      <?xml version="1.0" encoding="UTF-8"?>  
      <!DOCTYPE generatorConfiguration  
            PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"  
            "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
      <generatorConfiguration>
          <classPathEntry
              location="E:\Documents and Settings\Administrator\workspace\happyFarm\src\main\webapp\WEB-INF\lib\mysql-connector-java-5.0.3-bin.jar" />
          <context id="DB2Tables" targetRuntime="MyBatis3">
              <commentGenerator>
                  <property name="suppressAllComments" value="true" />
              </commentGenerator>
      
              <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                  connectionURL="jdbc:mysql://localhost:3306/myhappyfarm?useUnicode=true&amp;characterEncoding=UTF-8"
                  userId="root" password="">
              </jdbcConnection>
      
              <javaTypeResolver>
                  <property name="forceBigDecimals" value="false" />
              </javaTypeResolver>
      
              <!-- generate Model -->
              <javaModelGenerator targetPackage="com.happyFarm.model"
                  targetProject="E:\Documents and Settings\Administrator\workspace\happyFarm\src\main\java">
                  <property name="enableSubPackages" value="true" />
                  <property name="trimStrings" value="true" />
              </javaModelGenerator>
      
              <!-- generate xml -->
              <sqlMapGenerator targetPackage="com.happyFarm.mapper"
                  targetProject="E:\Documents and Settings\Administrator\workspace\happyFarm\src\main\java">
                  <property name="enableSubPackages" value="true" />
              </sqlMapGenerator>
      
              <!-- generate Mapper -->
              <javaClientGenerator targetPackage="com.happyFarm.dao"
                  targetProject="E:\Documents and Settings\Administrator\workspace\happyFarm\src\main\java" type="XMLMAPPER">
                  <property name="enableSubPackages" value="true" />
              </javaClientGenerator>
      
              <table schema="" tableName="cropbasic" domainObjectName="CropBasic"
                  enableCountByExample="false" enableUpdateByExample="false"
                  enableDeleteByExample="false" enableSelectByExample="false"
                  selectByExampleQueryId="false">
              </table>
      
              <table schema="" tableName="cropgrowthinfo" domainObjectName="CropGrowthInfo"
                  enableCountByExample="false" enableUpdateByExample="false"
                  enableDeleteByExample="false" enableSelectByExample="false"
                  selectByExampleQueryId="false">
              </table>
      
              <table schema="" tableName="cropstoreinfo" domainObjectName="CropStoreInfo"
                  enableCountByExample="false" enableUpdateByExample="false"
                  enableDeleteByExample="false" enableSelectByExample="false"
                  selectByExampleQueryId="false">
              </table>
      
              <table schema="" tableName="friendslist" domainObjectName="FriendsList"
                  enableCountByExample="false" enableUpdateByExample="false"
                  enableDeleteByExample="false" enableSelectByExample="false"
                  selectByExampleQueryId="false">
              </table>
      
              <table schema="" tableName="harvestlist" domainObjectName="HarvestList"
                  enableCountByExample="false" enableUpdateByExample="false"
                  enableDeleteByExample="false" enableSelectByExample="false"
                  selectByExampleQueryId="false">
              </table>
      
              <table schema="" tableName="plantinfo" domainObjectName="PlantInfo"
                  enableCountByExample="false" enableUpdateByExample="false"
                  enableDeleteByExample="false" enableSelectByExample="false"
                  selectByExampleQueryId="false">
              </table>
      
              <table schema="" tableName="seedstoreinfo" domainObjectName="SeedStoreInfo"
                  enableCountByExample="false" enableUpdateByExample="false"
                  enableDeleteByExample="false" enableSelectByExample="false"
                  selectByExampleQueryId="false">
              </table>
      
              <table schema="" tableName="userbasic" domainObjectName="UserBasic"
                  enableCountByExample="false" enableUpdateByExample="false"
                  enableDeleteByExample="false" enableSelectByExample="false"
                  selectByExampleQueryId="false">
              </table>
      
              <table schema="" tableName="userinfo" domainObjectName="UserInfo"
                  enableCountByExample="false" enableUpdateByExample="false"
                  enableDeleteByExample="false" enableSelectByExample="false"
                  selectByExampleQueryId="false">
              </table>
          </context>
      </generatorConfiguration>  
      
      • 其中,jdbcConnection为数据库连接配置,需注意用户名密码及编码;
      • javaModelGenerator、sqlMapGenerator、javaClientGenerator分别对应自动生成实体类,*Mapper.xml,以及dao层的文件夹名称
      • table表示表名,以及生成的实体对象名
    • DOS命令行进入lib目录(这里需要注意的是,三个jar包和generatorConfig.xml需要在同一目录下,否则会找不到jar包)
    • 执行java -jar mybatis-generator-core-1.3.1.jar -configfile generatorConfig.xml -overwrite
    • 完成后即可在指定文件夹看到生成的model,dao,以及mapper
  6. 依照写好的dao,实体类等编写相应的service层及实现类,至此完成spring与mybatis整合

  7. 配置springMVC配置文件——spring-mvc.xml

    <?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-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/mvc    
                            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">  
        <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->  
      <context:component-scan base-package="com.happyFarm.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>  
         <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->  
         <bean  
             class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
             <property name="messageConverters">  
                 <list>
                     <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转换器 -->  
                 </list>  
             </property>  
         </bean>  
         <!-- 定义跳转的文件的前后缀 ,视图模式配置-->  
         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
             <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->  
             <property name="prefix" value="/WEB-INF/jsp/" />  
             <property name="suffix" value=".jsp" />  
         </bean>  
         <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->  
         <bean id="multipartResolver"    
             class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
             <!-- 默认编码 -->  
             <property name="defaultEncoding" value="utf-8" />    
             <!-- 文件大小最大值 -->  
             <property name="maxUploadSize" value="10485760000" />    
             <!-- 内存中的最大值 -->  
             <property name="maxInMemorySize" value="40960" />    
         </bean>   
    </beans>  
    

8.配置web.xml文件

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>
    <!-- Spring和mybatis的配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-application.xml</param-value>
    </context-param>
    <!-- 编码过滤器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <async-supported>true</async-supported>
        <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内存溢出监听器 -->
    <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-name>SpringMVC</servlet-name>
        <!-- 此处可以可以配置成*.do,对应struts的后缀习惯 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>
</web-app>  

至此,完成ssm框架搭建的小结,编码时需注意注解等事项,待补充


版权声明:本文为yyzp1993原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。