SSM框架整合(SSM+druid+bootstrap+maven)(1)

第一篇:基礎

1、涉及到的鏈接

2、環境

3、開始搭建

3.1、新建maven項目
1.png

2.png

3.png

4.png

5.png

6.png ctrl+shift+alt+s打開設置
7.png
8.png
9.png
10.png
   <properties>
        <!-- spring版本號 -->
        <spring.version>4.3.7.RELEASE</spring.version>
        <!-- mybatis版本號 -->
        <mybatis.version>3.4.2</mybatis.version>
        <!-- log4j日志文件管理包版本 -->
        <slf4j.version>1.7.25</slf4j.version>
        <aspectjweaver.version>1.8.10</aspectjweaver.version>
        <fileupload.version>1.3.2</fileupload.version>
        <!--數據庫-->
        <mysql.version>6.0.6</mysql.version>
        <!--阿里連接池-->
        <druid.version>1.1.5</druid.version>
        <!-- gson -->
        <gson.version>2.8.0</gson.version>
        <!--fastjson-->
        <fastjson.version>1.2.32</fastjson.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- 導入java ee jar 包 -->
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- JSTL標簽類 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- mybatis/spring包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!-- mybatis核心包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <!--  aspectjweaver 依賴 begin -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${aspectjweaver.version}</version>
        </dependency>
        <!-- aspectjweaver 依賴 end -->
        <!--  spring依賴  begin-->
        <!-- spring核心依賴-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- spring ioc依賴 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- spring aop依賴 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- spring 擴展依賴 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!--spring dao層依賴-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- spring web相關依賴 -->
        <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>

        <!-- spring test相關依賴 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-websocket</artifactId>
            <version>4.3.8.RELEASE</version>
        </dependency>
        <!-- spring依賴  end-->
        <!--  log日志依賴 begin-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!--log日志依賴 end-->
        <!-- fileupload 文件上傳 -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>${fileupload.version}</version>
        </dependency>
        <!--數據庫依賴-->
        <!-- 導入Mysql數據庫鏈接jar包 start-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <!-- 導入Mysql數據庫鏈接jar包 end-->
        <!-- gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>${gson.version}</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20160810</version>
        </dependency>
        <!-- fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
        <!-- JSTL標簽類 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- POI 相關依賴 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.16</version>
        </dependency>
        <!--二維碼-->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.3.0</version>
        </dependency>
        <!-- 其他依賴 begin -->
        <!--dom4j-->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.8.RELEASE</version>
        </dependency>
        <!--shiro安全框架-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-web</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.4.0</version>
        </dependency>

        <!--mybatis自動生成-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator</artifactId>
            <version>1.3.5</version>
            <type>pom</type>
        </dependency>
        <!--mybatis分頁-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>
        <!--logback-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.logback-extensions</groupId>
            <artifactId>logback-ext-spring</artifactId>
            <version>0.1.4</version>
        </dependency>
        <!--定時-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.java-websocket</groupId>
            <artifactId>Java-WebSocket</artifactId>
            <version>1.3.6</version>
        </dependency>
        <!--驗證碼-->
        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>oldmountain</finalName>
        <plugins>
            <!--指定jdk版本-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!--mybatis反向生成Mapper.xml文件,dao,bean,這個以后會另開教程-->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>6.0.6</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
    </build>
3.2、配置文件
  • 1、阿里連接池配置 jdbc.properties
11.png
druid.driverClassName=com.mysql.jdbc.Driver
druid.url=jdbc:mysql://***.***.***.***/***?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
druid.username=***
druid.password=***
#初始化時建立物理連接的個數。初始化發生在顯示調用init方法,或者第一次getConnection時
druid.initialSize=0
#最大連接池數量
druid.maxActive=20
#已經不再使用,配置了也沒效果
druid.maxIdle=20
#定義最小空閑,最小連接池數量
druid.minIdle=1
#定義最長等待時間,獲取連接時最大等待時間,單位毫秒。配置了maxWait之后,缺省啟用公平鎖,并發效率會有所下降,如果需要可以通過配置useUnfairLock屬性為true使用非公平鎖
druid.maxWait=60000
#屬性類型是字符串,通過別名的方式配置擴展插件,常用的插件有:
#監控統計用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
druid.filters=stat
#有兩個含義:
#1) Destroy線程會檢測連接的間隔時間2) testWhileIdle的判斷依據,詳細看testWhileIdle屬性的說明
druid.timeBetweenEvictionRunsMillis=60000
druid.minEvictableIdleTimeMillis=300000
#用來檢測連接是否有效的sql,要求是一個查詢語句。
#如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會其作用
druid.validationQuery=SELECT 'x'
#建議配置為true,不影響性能,并且保證安全性。申請連接的時候檢測,
#如果空閑時間大于timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。
druid.testWhileIdle=true
#申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能
druid.testOnBorrow=false
#歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能
druid.testOnReturn=false
#要啟用PSCache,必須配置大于0,當大于0時,poolPreparedStatements自動觸發修改為true。
#在Druid中,不會存在Oracle下PSCache占用內存過多的問題,可以把這個數值配置大一些,比如說100
druid.maxOpenPreparedStatements=100
druid.removeAbandoned=true
druid.removeAbandonedTimeout=1800
druid.logAbandoned=true
  • 2、配置spring-mybatis.xml
12.png
<?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: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/aop
                        http://www.springframework.org/schema/aop/spring-aop-4.1.xsd">

    <!-- 啟用注解 -->
    <context:annotation-config/>
    <!-- 自動掃描 -->
    <!-- 啟動組件掃描,排除@Controller組件,該組件由SpringMVC配置文件掃描 -->
    <!--@Controller組件 在spring-mvc中配置掃描-->
    <context:component-scan base-package="com.demo.oldmountain">
        <context:exclude-filter type="annotation"
                                expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!-- 事務相關控制 -->
    <bean id="transactionManager" name="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 引入配置文件 -->
    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties"/>
    </bean>

    <!-- 配置DataSource數據源 -->
    <!-- 阿里 druid 數據庫連接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <!-- 數據庫基本信息配置 -->
        <property name="url" value="${druid.url}"/>
        <property name="username" value="${druid.username}"/>
        <property name="password" value="${druid.password}"/>
        <property name="driverClassName" value="${druid.driverClassName}"/>
        <property name="filters" value="${druid.filters}"/>

        <!-- 最大并發連接數 -->
        <property name="maxActive" value="${druid.maxActive}"/>

        <!-- 初始化連接數量 -->
        <property name="initialSize" value="${druid.initialSize}"/>

        <!-- 配置獲取連接等待超時的時間 -->
        <property name="maxWait" value="${druid.maxWait}"/>

        <!-- 最小空閑連接數 -->
        <property name="minIdle" value="${druid.minIdle}"/>

        <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}"/>

        <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}"/>
        <property name="validationQuery" value="${druid.validationQuery}"/>
        <property name="testWhileIdle" value="${druid.testWhileIdle}"/>
        <property name="testOnBorrow" value="${druid.testOnBorrow}"/>
        <property name="testOnReturn" value="${druid.testOnReturn}"/>
        <property name="maxOpenPreparedStatements" value="${druid.maxOpenPreparedStatements}"/>

        <!-- 打開 removeAbandoned 功能 -->
        <property name="removeAbandoned" value="${druid.removeAbandoned}"/>

        <!-- 1800 秒,也就是 30 分鐘 -->
        <property name="removeAbandonedTimeout" value="${druid.removeAbandonedTimeout}"/>

        <!-- 關閉 abanded 連接時輸出錯誤日志 -->
        <property name="logAbandoned" value="${druid.logAbandoned}"/>
    </bean>

    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="delete*" propagation="REQUIRED" read-only="false"
                       rollback-for="java.lang.Exception"/>
            <tx:method name="insert*" propagation="REQUIRED" read-only="false"
                       rollback-for="java.lang.Exception"/>
            <tx:method name="update*" propagation="REQUIRED" read-only="false"
                       rollback-for="java.lang.Exception"/>
            <tx:method name="save*" propagation="REQUIRED" read-only="false"
                       rollback-for="java.lang.Exception"/>
        </tx:attributes>
    </tx:advice>

    <aop:aspectj-autoproxy proxy-target-class="true"/>

    <!-- 事物處理 -->
    <aop:config>
        <aop:pointcut id="pc" expression="execution(* com.demo.oldmountain.service..*(..))"/>
        <aop:advisor pointcut-ref="pc" advice-ref="txAdvice"/>
    </aop:config>

    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>-->
        <!-- 自動掃描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
        <property name="typeAliasesPackage" value="com.demo.oldmountain.entity"/>
        <!--分頁pagehelper-->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <!-- 這里的幾個配置主要演示如何使用,如果不理解,一定要去掉下面的配置 -->
                    <property name="properties">
                        <value>
                            helperDialect=mysql
                            <!--當reasonable設置為 true 時,pageNum<=0 時會查詢第一頁, pageNum>pages(超過總數時),會查詢最后一頁-->
                            reasonable=true
                            <!--支持通過 Mapper 接口參數來傳遞分頁參數-->
                            supportMethodsArguments=true
                            <!--params=count=countSql-->
                            <!--允許在運行時根據多數據源自動識別對應方言的分頁-->
                            autoRuntimeDialect=true
                        </value>
                    </property>
                </bean>
            </array>
        </property>
    </bean>
    <!-- 通過掃描的模式,掃描在com.demo.oldmountain.dao.mapper目錄下的所有mapper -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.demo.oldmountain.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
    <!-- 創建一個sqlSession實例,線程安全的,可以在所有DAO實例共享,原理是將sqlSession,事務與當前線程掛鉤 -->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>


    <!-- ================ Shiro start 本教程不涉及,略 ================ -->
    <!--<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">-->
        <!--<property name="realm" ref="ShiroRealm"/>-->
    <!--</bean>-->

    <!-- 項目自定義的Realm -->
    <!--<bean id="ShiroRealm" class="com.demo.oldmountain.interceptor.shiro.ShiroRealm"></bean>-->

    <!-- Shiro Filter -->
    <!--<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">-->
        <!--<property name="securityManager" ref="securityManager"/>-->

        <!--<property name="loginUrl" value="/"/>-->

        <!--<property name="successUrl" value="/toIndex"/>-->

        <!--<property name="unauthorizedUrl" value="/login"/>-->

        <!--<property name="filterChainDefinitions">-->
            <!--<value>-->
                <!--/system/** = anon-->
                <!--/static/** = anon-->
                <!--/picture/* = anon-->
                <!--/uploadFiles/* = anon-->
            <!--</value>-->
        <!--</property>-->
    <!--</bean>-->
    <!-- ================ Shiro end ================ -->
    <!--驗證碼配置,比如登錄時會要求輸入4位隨機驗證碼,下面配置是生成驗證碼圖片,本教程不涉及,可不配置-->
    <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
        <property name="config">
            <bean class="com.google.code.kaptcha.util.Config">
                <constructor-arg>
                    <props>
                        <!--Border around kaptcha. Legal values are yes or no. -->
                        <prop key="kaptcha.border">no</prop>
                        <!--Color of the border. Legal values are r,g,b (and optional alpha) or white,black,blue. -->
                        <prop key="kaptcha.border.color">green</prop>
                        <!--Thickness of the border around kaptcha. Legal values are > 0. -->
                        <prop key="kaptcha.border.thickness">1</prop>
                        <!--Width in pixels of the kaptcha image. -->
                        <prop key="kaptcha.image.width">100</prop>
                        <!--Height in pixels of the kaptcha image. -->
                        <prop key="kaptcha.image.height">45</prop>
                        <!--The image producer. -->
                        <prop key="kaptcha.producer.impl">com.google.code.kaptcha.impl.DefaultKaptcha</prop>
                        <!--The text producer. -->
                        <prop key="kaptcha.textproducer.impl">com.google.code.kaptcha.text.impl.DefaultTextCreator
                        </prop>
                        <prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.ShadowGimpy</prop>
                        <!--The background implementation. -->
                        <prop key="kaptcha.background.impl">com.google.code.kaptcha.impl.DefaultBackground</prop>
                        <!--The word renderer implementation. -->
                        <prop key="kaptcha.word.impl">com.google.code.kaptcha.text.impl.DefaultWordRenderer</prop>
                        <!--The value for the kaptcha is generated and is put into the HttpSession. This is the key value for that item in the session. -->
                        <prop key="kaptcha.session.key">KAPTCHA_SESSION_KEY</prop>
                        <!--The date the kaptcha is generated is put into the HttpSession. This is the key value for that item in the session. -->
                        <prop key="kaptcha.session.date">KAPTCHA_SESSION_DATE</prop>
                        <!-- 驗證碼背景顏色漸變,開始顏色 -->
                        <prop key="kaptcha.background.clear.from">248,248,248</prop>
                        <!-- 驗證碼背景顏色漸變,結束顏色 -->
                        <prop key="kaptcha.background.clear.to">248,248,248</prop>
                        <!-- 驗證碼的字符 -->
                        <prop key="kaptcha.textproducer.char.string">0123456789abcdefghijklmnopqrstuvwxyz</prop>
                        <!-- 驗證碼字體顏色 -->
                        <prop key="kaptcha.textproducer.font.color">0,0,255</prop>
                        <!-- 驗證碼的效果,水紋 -->
                        <prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.WaterRipple</prop>
                        <!-- 驗證碼字體大小 -->
                        <prop key="kaptcha.textproducer.font.size">35</prop>
                        <!-- 驗證碼字數 -->
                        <prop key="kaptcha.textproducer.char.length">4</prop>
                        <!-- 驗證碼文字間距 -->
                        <prop key="kaptcha.textproducer.char.space">2</prop>
                        <!-- 驗證碼字體 -->
                        <prop key="kaptcha.textproducer.font.names">new Font("Arial", 1, fontSize), new Font("Courier",
                            1, fontSize)
                        </prop>
                        <!-- 不加噪聲 -->
                        <prop key="kaptcha.noise.impl">com.google.code.kaptcha.impl.DefaultNoise</prop>
                        <!--The noise color. Legal values are r,g,b. -->
                        <prop key="kaptcha.noise.color">black</prop>
                    </props>
                </constructor-arg>
            </bean>
        </property>
    </bean>
</beans>
  • 3、配置spring-mvc.xml
13.png
<?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:mvc="http://www.springframework.org/schema/mvc"
       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/mvc
            http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!-- 自動掃描該包,使SpringMVC認為包下用了@controller注解的類是控制器 -->
    <mvc:annotation-driven/>
    <mvc:default-servlet-handler/>
    <context:component-scan base-package="com.demo.oldmountain.controller"/>
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
    <!-- 對靜態資源的訪問 -->
    <mvc:resources mapping="/static/**" location="/static/"/>
    <mvc:resources mapping="/plugins/**" location="/plugins/"/>
    <mvc:resources mapping="/pages/**" location="/pages/"/>


    <!-- 訪問攔截  -->
    <!--登錄攔截,驗證用戶是否登錄,本教程不涉及,略-->
    <!--<mvc:interceptors>-->
        <!--<mvc:interceptor>-->
            <!--<mvc:mapping path="/**/**"/>-->
            <!--<bean class="com.demo.oldmountain.interceptor.LoginHandlerInterceptor"/>-->
        <!--</mvc:interceptor>-->
    <!--</mvc:interceptors>-->
    <!-- pjax視圖攔截 ,本教程不涉及,略 -->
    <!--<mvc:interceptors>-->
        <!--<mvc:interceptor>-->
            <!--<mvc:mapping path="/**/**.view"/>-->
            <!--<mvc:mapping path="/**/**.modal"/>-->
            <!--<bean class="com.demo.oldmountain.interceptor.PjaxHandlerInterceptor"/>-->
        <!--</mvc:interceptor>-->
    <!--</mvc:interceptors>-->


    <!-- 國際化資源配置,本教程不涉及,略 -->
    <!--<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">-->
    <!--&lt;!&ndash; 國際化信息所在的文件名 &ndash;&gt;-->
    <!--<property name="basename" value="messages/message"/>-->
    <!--&lt;!&ndash; 如果在國際化資源文件中找不到對應代碼的信息,就用這個代碼作為名稱  &ndash;&gt;-->
    <!--<property name="useCodeAsDefaultMessage" value="true" />-->
    <!--</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>
    <!--配置SessionLocaleResolver-->
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
    <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>


    <!-- 配置文件上傳,如果沒有使用文件上傳可以不用配置,當然如果不配,那么配置文件中也不必引入上傳組件包 -->
    <!--本教程不涉及,略-->
    <!--如果自定義監聽上傳,請修改class中CommonsMultipartResolver為繼承的那個類-->
    <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>
  • 3、配置logback.xml
14.png
<?xml version="1.0" encoding="UTF-8"?>

<!-- For assistance related to logback-translator or configuration  -->
<!-- files in general, please contact the logback user mailing list -->
<!-- at http://www.qos.ch/mailman/listinfo/logback-user             -->
<!--                                                                -->
<!-- For professional support please see                            -->
<!--    http://www.qos.ch/shop/products/professionalSupport         -->
<!--                                                                -->
<configuration debug="true" scan="true" scanPeriod="60 seconds" packagingData="true">
    <!--控制臺輸出 -->
    <!--級別:TRACE < DEBUG < INFO < WARN < ERROR-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--<Encoding>UTF-8</Encoding>-->
        <!--<Target>System.out</Target>-->
        <encoding>UFT-8</encoding>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <!--<filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
        <!--<level>error</level>-->
        <!--</filter>-->
    </appender>
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--See http://logback.qos.ch/manual/appenders.html#RollingFileAppender-->
        <!--and http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy-->
        <!--for further documentation-->
        <file>${catalina.home}/logs/oldmountain_log/PurePro_</file>
        <encoder>
            <pattern>[oldmountain_sys] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${catalina.home}/logs/oldmountain_log/PurePro_.%d{yyyy-MM-dd'.log'}</fileNamePattern>
        </rollingPolicy>
    </appender>

    <logger name="com.demo.oldmountain.dao" level="DEBUG" />
    <logger name="org.mybatis">
        <level value="TRACE"/>
    </logger>
    <logger name="logback"/>
    <!--打印SQL語句-->
    <logger name="jdbc.sqltiming" level="TRACE"/>
    <logger name="com.ibatis" level="TRACE"/>
    <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="TRACE"/>
    <logger name="com.ibatis.common.jdbc.ScriptRunner" level="TRACE"/>
    <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate"
            level="TRACE"/>
    <logger name="java.sql.Connection" level="TRACE"/>
    <logger name="java.sql.Statement" level="TRACE"/>
    <logger name="java.sql.PreparedStatement" level="TRACE"/>
    <logger name="java.sql.ResultSet" level="TRACE"/>
    <root level="info">
        <level value="info"/>
        <appender-ref ref="file"/>
        <appender-ref ref="console"/>
    </root>

</configuration>
  • 3、配置web.xml
15.png
<?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/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID"
         version="3.0">
  <display-name>Archetype Created Web Application</display-name>
  <!-- Spring和mybatis的配置文件 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/spring-mybatis.xml</param-value>
  </context-param>
  <!--logback-->
  <context-param>
    <param-name>logbackConfigLocation</param-name>
    <param-value>classpath:logback.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>
  <!--shiro安全框架,本教程不涉及,略-->
  <!--<filter>-->
    <!--<filter-name>shiroFilter</filter-name>-->
    <!--<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>-->
    <!--<async-supported>true</async-supported>-->
    <!--<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>-->
  <!-- Spring監聽器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 防止Spring內存溢出監聽器 -->
  <listener>
    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
  </listener>
  <!--logback監聽-->
  <listener>
    <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</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/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>
  <error-page>
    <error-code>404</error-code>
    <location>/pages/common/404.html</location>
  </error-page>
  <!--<error-page>-->
  <!--<error-code>500</error-code>-->
  <!--<location>/page/error404</location>-->
  <!--</error-page>-->
  <!--此處可以不配置,如果一個tomcat發布多個項目,可能需要配置這個-->
  <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>mos_ms.root</param-value>
  </context-param>
</web-app>

4、配置tomcat發布項目

16.png
18.png
17.png
18.png

19.png
20.png
21.png
22.png

4、開始搭建、配置tomcat發布項目

發布成功

注意!!!在沒有寫mapper的情況下,請注釋掉spring-mybatis.xml
中對mapper的配置

23.png
24.png

未完待續,持續更新

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容