• 简化SSM搭建详细分析配置


    一直使用SSH2 和 spring boot,最近换工作,使用新框架SpringMVC,带着SSH2的思路学习SpringMVC还是挺容易的,下面分享一下SSM的搭建

    总体来说搭建SSM分五步

    一:创建maven工程

    这里是创建maven项目教程:

    http://blog.csdn.net/xybelieve1990/article/details/52043127

    二:引入相关JAR包

     maven工程引入jar非常简单,只需要我们修改pom.xml文件就行了

    以下资源可以直接复制使用

    <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>com.thc.center</groupId>
      <artifactId>myspringmvc</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>myspringmvc Maven Webapp</name>
      <url>http://maven.apache.org</url>
      
      <properties>  
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
          <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>  
          <spring.version>3.2.9.RELEASE</spring.version>  
          <mybatis.version>3.1.1</mybatis.version>  
          <mybatisspring.version>1.1.1</mybatisspring.version>  
      </properties>
        
      <dependencies>  
            <dependency>  
                <groupId>org.springframework</groupId>  
                <artifactId>spring-core</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-test</artifactId>  
                <version>${spring.version}</version>  
            </dependency>  
            <dependency>  
                <groupId>org.mybatis</groupId>  
                <artifactId>mybatis</artifactId>  
                <version>${mybatis.version}</version>  
            </dependency>  
            <dependency>  
                <groupId>org.mybatis</groupId>  
                <artifactId>mybatis-spring</artifactId>  
                <version>${mybatisspring.version}</version>  
            </dependency>  
            <dependency>  
                <groupId>mysql</groupId>  
                <artifactId>mysql-connector-java</artifactId>  
                <version>5.1.34</version>  
            </dependency>  
            <dependency>  
                <groupId>junit</groupId>  
                <artifactId>junit</artifactId>  
                <version>4.11</version>  
                <scope>test</scope>  
            </dependency>  
           <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>0.2.20</version>
            </dependency>  
            <dependency>  
                <groupId>org.aspectj</groupId>  
                <artifactId>aspectjweaver</artifactId>  
                <version>1.8.1</version>  
            </dependency>  
            <dependency>  
                <groupId>javax.servlet</groupId>  
                <artifactId>jstl</artifactId>  
                <version>1.2</version>  
            </dependency>  
          <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>jsp-api</artifactId>  
                <version>2.2</version>  
                <scope>provided</scope>  
            </dependency>  
            <dependency>  
                <groupId>commons-fileupload</groupId>  
                <artifactId>commons-fileupload</artifactId>  
                <version>1.3.1</version>  
            </dependency>  
            <dependency>  
                <groupId>commons-lang</groupId>  
                <artifactId>commons-lang</artifactId>  
                <version>2.6</version>  
            </dependency>  
            <dependency>  
                <groupId>commons-codec</groupId>  
                <artifactId>commons-codec</artifactId>  
                <version>1.9</version>  
            </dependency>  
            <dependency>  
                <groupId>org.apache.httpcomponents</groupId>  
                <artifactId>httpclient</artifactId>  
                <version>4.5</version>  
            </dependency>  
            <dependency>  
                <groupId>org.slf4j</groupId>  
                <artifactId>slf4j-api</artifactId>  
                <version>1.7.10</version>  
            </dependency>  
            <dependency>  
                <groupId>org.slf4j</groupId>  
                <artifactId>slf4j-log4j12</artifactId>  
                <version>1.7.10</version>  
            </dependency>  
            <dependency>  
                <groupId>log4j</groupId>  
                <artifactId>log4j</artifactId>  
                <version>1.2.17</version>  
            </dependency>  
            <dependency>
                <groupId>com.alibaba</groupId>  
                <artifactId>fastjson</artifactId>  
                <version>1.1.41</version>  
            </dependency>  
            <dependency>  
                <groupId>org.codehaus.jackson</groupId>  
                <artifactId>jackson-mapper-asl</artifactId>  
                <version>1.9.13</version>  
            </dependency>  
        </dependencies>
      <build>
        <finalName>myspringmvc</finalName>
      </build>
    </project>

    三:配置SpringMVC

     

    当你创建好maven web项目时,web.xml就会在这个位置

    <?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" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"  
        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配置文件 可以在配置文件中打开任意spring功能 -->  
        <context-param>  
            <param-name>contextConfigLocation</param-name>  
            <param-value>classpath:spring.xml</param-value>  
        </context-param>
        <!-- 容器初始化监听器 -->
        <listener>  
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
        </listener>  
        <!-- 此监听器主要用于解决java.beans.Introspector导致的内存泄漏的问题 -->
        <!-- JDK中的java.beans.Introspector类的用途是发现Java类是否符合JavaBean规范如果有的框架或程序用到了Introspector类,那么就会启用一个系统级别的缓存,此缓存会
       存放一些曾加载并分析过的JavaBean的引用。当Web服务器关闭时,由于此缓存中存放着这些JavaBean的引用,所以垃圾回收器无法回收Web容器中的JavaBean对象,最后导致
         内存变大。而org.springframework.web.util.IntrospectorCleanupListener就是专门用来处理Introspector内存泄漏问题的辅助类。IntrospectorCleanupListener会在
         Web服务器停止时清理Introspector缓存,使那些Javabean能被垃圾回收器正确回收。Spring自身不会出现这种问题,因为Spring在加载并分析完一个类之后会马上刷新
         JavaBeans Introspector缓存,这就保证Spring中不会出现这种内存泄漏的问题。但有些程序和框架在使用了JavaBeans Introspector之后,没有进行清理工作(如                    Quartz,Struts),最后导致内存泄漏 -->
        <listener>  
            <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  
        </listener>  
      
        <!-- 加载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>  
          
        <!-- 字符集过滤器 -->  
        <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>  
          
    </web-app>  
    

      红色字体部分是也就是我们集成SpringMVC, 上面有引入新的配置文件名字叫spring-mvc-xml,这样我们去

    目录下创建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.0.xsd  
        http://www.springframework.org/schema/context  
        http://www.springframework.org/schema/context/spring-context-3.0.xsd  
        http://www.springframework.org/schema/mvc    
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">  
      
        <!-- 默认的注解映射的支持 -->  
        <mvc:annotation-driven />  
      
        <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->  
        <context:component-scan base-package="com.thc.center">
          <!-- com.thc.center下的所有包 缺少则会导致路径下的包内扫描不到 -->
    	  <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    	</context:component-scan>  
      
        <!--避免IE执行AJAX时,返回JSON出现下载文件 -->  
        <bean id="mappingJacksonHttpMessageConverter"  
            class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
            <property name="supportedMediaTypes">  
                <list>  
                    <value>text/html;charset=UTF-8</value>  
                </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>  
    

      这个配置文件中有几个配置是必不可少的都有用红色字条标明,其实我们目的很明确,就是为了让Spring能够识别我们的controller层

    四:配置Mybatis

     注意上面web.xml蓝色字体部分有引入Spring,这样我们需要创建一个spring容器的配置文件

    这里面我们的目的其实也是明确的,就是为了能够让Spring 来识别我们的@Service Spring等提供的注解

    <?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:mvc="http://www.springframework.org/schema/mvc"  
        xmlns:context="http://www.springframework.org/schema/context"  
        xmlns:aop="http://www.springframework.org/schema/aop" 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.0.xsd   
                http://www.springframework.org/schema/mvc   
                http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd   
                http://www.springframework.org/schema/context   
                http://www.springframework.org/schema/context/spring-context-3.0.xsd   
                http://www.springframework.org/schema/aop   
                http://www.springframework.org/schema/aop/spring-aop-3.0.xsd   
                http://www.springframework.org/schema/tx   
                http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">  
      
        <!-- 扫描service、dao组件 -->  
        <context:component-scan base-package="com.thc.center" />  
        <!-- 分解配置 jdbc.properites -->  
        <context:property-placeholder location="classpath:jdbc.properties" />  
          
        <!-- 配置数据源 -->
    	<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    		<property name="url" value="${jdbc_url}" />
    		<property name="username" value="${jdbc_username}" />
    		<property name="password" value="${jdbc_password}" />
    
    		<!-- 初始化连接大小 -->
    		<property name="initialSize" value="5" />
    		<!-- 连接池最大使用连接数量 -->
    		<property name="maxActive" value="200" />
    		<!-- 连接池最大空闲 -->
    		<!-- 连接池最小空闲 -->
    		<property name="minIdle" value="3" />
    		<!-- 获取连接最大等待时间 -->
    		<property name="maxWait" value="60000" />
    		<!-- <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="33" /> -->
    
    		<property name="validationQuery" value="${validationQuery}" />
    		<property name="testOnBorrow" value="false" />
    		<property name="testOnReturn" value="false" />
    		<property name="testWhileIdle" value="true" />
    
    		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    		<property name="timeBetweenEvictionRunsMillis" value="60000" />
    		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    		<property name="minEvictableIdleTimeMillis" value="25200000" />
    
    		<!-- 打开removeAbandoned功能 -->
    		<property name="removeAbandoned" value="true" />
    		<!-- 1800秒,也就是30分钟 -->
    		<property name="removeAbandonedTimeout" value="1800" />
    		<!-- 关闭abanded连接时输出错误日志 -->
    		<property name="logAbandoned" value="true" />
    
    		<!-- 监控数据库 -->
    		<!-- <property name="filters" value="stat" /> -->
    		<property name="filters" value="mergeStat" />
    	</bean> 
      
      
        <!-- sessionFactory 将spring和mybatis整合 -->  
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
            <property name="dataSource" ref="dataSource" />  
            <property name="configLocation" value="classpath:spring-mybatis.xml" />
            <!-- 加载mapper.xml文件 -->
            <property name="mapperLocations" value="classpath:mapper/**/*.xml" />
        </bean>
        
        <!-- 扫描mapper接口 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
            <property name="basePackage" value="com.thc.center.**.dao" />  
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />  
        </bean>  
      
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
            <property name="dataSource" ref="dataSource" />  
        </bean>
        
        <!-- 拦截器方式配置事物 -->
        <tx:advice id="transactionAdvice" transaction-manager="transactionManager">  
            <tx:attributes>  
                <tx:method name="add*" propagation="REQUIRED" />  
                <tx:method name="append*" propagation="REQUIRED" />  
                <tx:method name="insert*" propagation="REQUIRED" />  
                <tx:method name="save*" propagation="REQUIRED" />  
                <tx:method name="update*" propagation="REQUIRED" />  
                <tx:method name="modify*" propagation="REQUIRED" />  
                <tx:method name="edit*" propagation="REQUIRED" />  
                <tx:method name="delete*" propagation="REQUIRED" />  
                <tx:method name="remove*" propagation="REQUIRED" />  
                <tx:method name="repair" propagation="REQUIRED" />  
                <tx:method name="delAndRepair" propagation="REQUIRED" />  
      
                <tx:method name="get*" propagation="SUPPORTS" />  
                <tx:method name="find*" propagation="SUPPORTS" />  
                <tx:method name="load*" propagation="SUPPORTS" />  
                <tx:method name="search*" propagation="SUPPORTS" />  
                <tx:method name="datagrid*" propagation="SUPPORTS" />  
      
                <tx:method name="*" propagation="SUPPORTS" />  
            </tx:attributes>  
        </tx:advice>  
        <aop:config>  
            <aop:pointcut id="transactionPointcut" expression="execution(* com.thc.center.biz..*.service..*Manager.*(..))" />  
            <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" />  
        </aop:config>  
    </beans>    
    

      红色字体部分为核心,不可缺少,否则Spring注解一律不识别

    这里又引入新的

    jdbc.properties 我们创建新的配置文件 (其实也可以不用引入的但是介于开发中切换数据库等操作,引入配置文件便于维护)

    这里没什么好说的了上述 数据源引入的我们都要在这里给到
    jdbc_url=jdbc:mysql://127.0.0.1:3306/mydb?characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
    jdbc_username=root
    jdbc_password=root
    validationQuery=select 1
    

      我们不希望自己手动管理mybatis事务,希望交给Spring来管理

    蓝色字体部分就是核心所在将事务完全交给Spring,这样Spring就要知道你的数据源,也就是我们说的JNDI就是绿色背景部分

    既然交给了Spring管理,那么我们就要求Spring能够识别我们的mapper.xml文件和dao层就是我们黄色字体部分,注意这里引入了新的配置文件是mybatis的相关配置

    于是我们就需要创建

    spring-mybatis.xml路径如下

    这里你可以根据你的需求做一些自己的mybatis的配置,这边只是搭建简单的框架暂时没有需要。也就没有配置里面是空的
    <?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>  
         
    </configuration>
    

      既然把事务交给了Spring,我们需要告诉Spring都帮我们管理哪些事务,事务发生在哪也就是我们粉色字体部分。以上简单的把SpringMVC,Spring,Mybatis 集成在一起

    五:集成框架

    以上只是简单的搭建SSM,实际企业开发中还会涉及到日志,第三方框架等集成,我们可以在Spring中集成,当然,我们也会有一些内存监控等等需求,这些也可以在web.xml中配置

    根据实际需求继续把相关的需要集成到框架中

    以上,希望能帮助搭架框架中的童鞋,最后如果有需要源码的童鞋,可以留言邮箱。

    刚接触SpringMVC理解不是很深入,如有说错的地方,还请大神不吝赐教!

  • 相关阅读:
    nightwatchjs --Expect element to not include text
    Iterating elements using NightWatchJS
    nightwatch 切换窗口
    nodejs读取配置文件
    spring 事务
    重载,重写,重构
    python 元组不变 列表可变
    WebStorm ES6 语法支持设置
    docker日志
    curl -O 下载文件
  • 原文地址:https://www.cnblogs.com/zhuxiansheng/p/7814824.html
Copyright © 2020-2023  润新知