1. 程式人生 > 實用技巧 >SSM框架整合的最新開啟方式(打造最詳細的SSM整合教程)

SSM框架整合的最新開啟方式(打造最詳細的SSM整合教程)

SSM整合

文章已託管到GitHub,大家可以去GitHub檢視閱讀,歡迎老闆們前來Star!
搜尋關注微信公眾號 【碼出Offer】 領取各種學習資料!

SSM

一、建立一個Maven專案

File -> NewProject
image-20200711100406109
建立Maven專案
image-20200711100511187

二、宣告war打包方式並建立web專案目錄結構

2.1 建立web專案結構

有關於Maven不瞭解的小夥伴不要灰心,請參考Maven教程

宣告war包打包方式,即在pom.xml檔案中加入一行標籤<packaging>war</packaging>

,隨後建立web專案目錄結構!

手動構建web專案結構
基於main目錄下建立webapp資料夾
image-20200617124249878
image-20200617124319926
基於webapp目錄建立WEB-INF資料夾
image-20200617124624648
基於WEB-INF目錄建立web.xml檔案
image-20200617125038803
image-20200617125055216
xml檔案內容展示
image-20200617125729115
基於webapp目錄建立index.jsp檔案
image-20200617125613861
目錄展示 (完整的web專案目錄結構)
image-20200617125808227

2.2 所需依賴

<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>

<!--jsp-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0
</version>
</dependency>

<!--jstl-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

三、引入tomact伺服器並設定

關於Tomact服務的引入,需要我們手動新增tomact服務

新增tomact服務後,如果對tomact伺服器在IDEA中的開發流程不熟悉的小夥伴,不要灰心。請參考tomact伺服器基礎和開發步驟即可,此文章中詳細講到了關於tomact的各種知識點!

新增tomact服務
image-20200617131801103

四、spring+MyBatis(Dao層/Mapper層)

4.1 jdbc.properties

JDBC配置檔案

#jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/temp?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456

4.2 spring-mybatis.xml(Dao/Mapper層相關配置)

功能元件: JDBC、Durid連線池、SQLSessionFactory(等價於Connection,可生產連線,內需添加註冊Mapper、別名和關聯mybaits配置檔案)、Dao/Mapper層註解掃描器

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

<!--jdbc-->
<context:property-placeholderlocation="classpath:jdbc.properties"/>

<!--連線池-->
<beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close">
<propertyname="driverClassName"value="${jdbc.driver}"/>
<propertyname="password"value="${jdbc.password}"/>
<propertyname="url"value="${jdbc.url}"/>
<propertyname="username"value="${jdbc.username}"/>

<!--配置初始化大小、最小、最大-->
<propertyname="initialSize"value="1"/>
<propertyname="minIdle"value="1"/>
<propertyname="maxActive"value="3"/>

<!--配置獲取連線等待超時的時間-->
<propertyname="maxWait"value="60000"/>

<!--配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒-->
<propertyname="timeBetweenEvictionRunsMillis"value="60000"/>

<!--配置一個連線在池中最小生存的時間,單位是毫秒-->
<propertyname="minEvictableIdleTimeMillis"value="300000"/>
</bean>

<!--SqlSessionFactory(mybatis核心配置)-->
<beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">
<!--連線池-->
<propertyname="dataSource"ref="dataSource"/>

<!--註冊mapper-->
<propertyname="mapperLocations"value="classpath:com/ziphtracks/mapper/*.xml"/>

<!--別名-->
<propertyname="typeAliasesPackage"value="com.ziphtracks.bean"/>

<!--關聯mybatis的配置檔案-->
<propertyname="configLocation"value="classpath:mybatis-config.xml"></property>
</bean>

<!--Dao/Mapper掃描器-->
<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">
<propertyname="basePackage"value="com.ziphtracks.mapper"/>
<!--如果當前spring工廠中,只有一個SqlSesionFactory,則此配置可省略-->
<!--<propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"/>-->
</bean>
</beans>

4.3 mybatis-congfig.xml(分頁和快取)

功能元件: 分頁查詢、二級快取

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<!--MyBatis配置-->
<configuration>
<!--mybaits-config.xml中開啟全域性快取(預設開啟)-->
<settings>
<settingname="cacheEnabled"value="true"/>
</settings>
<!--分頁外掛-->
<plugins>
<!--com.github.pagehelper為PageHelper類所在包名-->
<plugininterceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
</configuration>

4.4 Mapper.xml

書寫SQL語句的Mapper.xml

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--namespace:所需實現的介面全限定名-->
<mappernamespace="">
<!--書寫標籤和sql語句-->
</mapper>

4.5 所需依賴

所需依賴: Spring核心、Spring提供的JDBC、Spring與MyBatis繼承、MyBatis核心、MySQL驅動、連線池Durid、分頁外掛、Lombok類庫、Spring提供的Junit整合、Junit4測試

<!--Spring核心-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>

<!--SpringJDBC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>

<!--spring+mybatis整合依賴-->
<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>3.4.6</version>
</dependency>

<!--MySql驅動依賴-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>

<!--連線池Druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>

<!--分頁外掛-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>

<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>

<!--SpringJunit-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>

<!--Junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

五、spring整合(Service層)

5.1 spring-context.xml(Service層)

Servie層整合元件: 註解掃描器(掃描Service層註解)、事務管理器、事務驅動器、事務增強(註解和事務增強可選)、開啟AOP註解

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

<!--註解掃描器,配置掃描位置(掃描Service層註解)-->
<context:component-scanbase-package="com.ziphtracks"use-default-filters="true">
<!--忽略有@Controller註解的類-->
<context:exclude-filtertype="annotation"expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

<!--事務管理器-->
<beanid="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<propertyname="dataSource"ref="dataSource"/>
</bean>

<!--事務驅動器,告知@Transactional註解,誰是事務管理器-->
<tx:annotation-driventransaction-manager="txManager"/>

<!--事務增強(不適用註解事務的時候自行增強事務)-->
<!--為需要事務的方法,設定事務屬性,這裡沒有列舉事務屬性-->
<!--
<tx:adviceid="txAdvice"transaction-manager="txManager">
<tx:attributes>
<tx:methodname="selectUserById"propagation="SUPPORTS"/>
<tx:methodname="insertUser"read-only="false"isolation="DEFAULT"propagation="REQUIRED"timeout="5"rollback-for="Exception"/>
<tx:methodname="updateUser"read-only="false"isolation="DEFAULT"propagation="REQUIRED"timeout="5"/>
</tx:attributes>
</tx:advice>
-->

<!--開啟AOP註解-->
<aop:aspectj-autoproxy/>
</beans>

5.2 logback.xml(Logback+SLF4j日誌)

實現日誌管理功能

佔位符 描述
%d{yyyy-MM-dd HH:mm:ss.SSS} 日期
%5p 日誌級別,5位字元長度顯示,如果內容佔不滿5位則內容右對齊並在左側補空格
%-5p 5位字元長度顯示日誌級別,如果內容佔不滿5位則內容左對齊並在右側補空格 -代表左對齊
%logger 日誌所在包和類
%M 日誌所在方法名
%L 日誌所在程式碼行
%m 日誌正文
%n 換行
<?xmlversion="1.0"encoding="UTF-8"?>
<!--scan:當此屬性設定為true時,配置檔案如果發生改變,將會被重新載入,預設值為true-->
<!--scanPeriod:設定監測配置檔案是否有修改的時間間隔,如果沒有給出時間單位,預設單位是毫秒。當scan為true時,此屬性生效。
預設的時間間隔為1分鐘。-->
<!--debug:當此屬性設定為true時,將打印出logback內部日誌資訊,實時檢視logback執行狀態。預設值為false。-->
<configurationscan="true"scanPeriod="60seconds"debug="true">

<!--定義變數,可通過${log.path}和${CONSOLE_LOG_PATTERN}得到變數值-->
<propertyname="log.path"value="D:/log"/>
<propertyname="CONSOLE_LOG_PATTERN"
value="%d{yyyy-MM-ddHH:mm:ss.SSS}|-[%-5p]in%logger.%M[line-%L]-%m%n"/>

<!--輸出到控制檯-->
<appendername="CONSOLE"class="ch.qos.logback.core.ConsoleAppender">
<!--Threshold=即最低日誌級別,此appender輸出大於等於對應級別的日誌
(當然還要滿足root中定義的最低級別)
-->
<filterclass="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<!--日誌格式(引用變數)-->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!--設定字符集-->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--追加到檔案中-->
<appendername="file"class="ch.qos.logback.core.FileAppender">
<file>${log.path}/hello2.log</file>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--滾動追加到檔案中-->
<appendername="file2"class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--正在記錄的日誌檔案的路徑及檔名-->
<file>${log.path}/hello.log</file>
<!--日誌檔案輸出格式-->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset><!--設定字符集-->
</encoder>
<!--日誌記錄器的滾動策略,按日期,按大小記錄
檔案超過最大尺寸後,會新建檔案,然後新的日誌檔案中繼續寫入
如果日期變更,也會新建檔案,然後在新的日誌檔案中寫入當天日誌
-->
<rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--新建檔案後,原日誌改名為如下%i=檔案序號,從0開始-->
<fileNamePattern>${log.path}/hello-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--每個日誌檔案的最大體量-->
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>8kb</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日誌檔案保留天數,1=則只保留昨天的歸檔日誌檔案,不設定則保留所有日誌-->
<maxHistory>1</maxHistory>
</rollingPolicy>
</appender>

<rootlevel="trace">
<appender-refref="CONSOLE"/>
<appender-refref="file"/>
<appender-refref="file2"/>
</root>
</configuration>

5.3 spring-quartz.xml(Quartz定時任務排程器)

實現定時任務排程管理功能

<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">

<!--
Spring整合Quartz進行配置遵循下面的步驟:
1:定義工作任務的Job
2:定義觸發器Trigger,並將觸發器與工作任務繫結
3:定義排程器,並將Trigger註冊到Scheduler
-->

<!--1:定義任務的bean,這裡使用JobDetailFactoryBean,也可以使用MethodInvokingJobDetailFactoryBean,配置類似-->
<beanname="myJob"class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!--指定job的名稱-->
<propertyname="name"value="job2004"/>
<!--指定job的分組-->
<propertyname="group"value="job_group2004"/>
<!--指定具體的job類-->
<propertyname="jobClass"value="com.mylifes1110.job.MyJob2004"/>
</bean>

<beanname="myJob2"class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!--指定job的名稱-->
<propertyname="name"value="job2005"/>
<!--指定job的分組-->
<propertyname="group"value="job_group2004"/>
<!--指定具體的job類-->
<propertyname="jobClass"value="com.mylifes1110.job.MyJob2005"/>
</bean>

<!--2:定義觸發器的bean,定義一個Cron的Trigger,一個觸發器只能和一個任務進行繫結-->
<beanid="cronTrigger2004"class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!--指定Trigger的名稱-->
<propertyname="name"value="trigger2004"/>
<!--指定Trigger的名稱-->
<propertyname="group"value="trigger_group2004"/>
<!--指定Tirgger繫結的JobDetail-->
<propertyname="jobDetail"ref="myJob"/>
<!--指定Cron的表示式,當前是每隔2s執行一次-->
<propertyname="cronExpression"value="*****?"/>
</bean>
<beanid="cronTrigger2005"class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!--指定Trigger的名稱-->
<propertyname="name"value="trigger2005"/>
<!--指定Trigger的名稱-->
<propertyname="group"value="trigger_group2005"/>
<!--指定Tirgger繫結的JobDetail-->
<propertyname="jobDetail"ref="myJob2"/>
<!--指定Cron的表示式,當前是每隔2s執行一次-->
<propertyname="cronExpression"value="*****?"/>
</bean>

<!--3.定義排程器,並將Trigger註冊到排程器中-->
<beanid="scheduler"class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<propertyname="triggers">
<list>
<refbean="cronTrigger2004"/>
<refbean="cronTrigger2005"/>
</list>
</property>
<!--新增quartz配置,如下兩種方式均可-->
<!--<propertyname="configLocation"value="classpath:quartz.properties"></property>-->
<propertyname="quartzProperties">
<!--<props>
<propkey="org.quartz.scheduler.instanceName">MyScheduler</prop>
</props>-->
<value>
#指定排程器名稱,實際型別為:QuartzScheduler
org.quartz.scheduler.instanceName=MyScheduler2004
#指定連線池
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
#連線池執行緒數量
org.quartz.threadPool.threadCount=11
#優先順序
org.quartz.threadPool.threadPriority=5
#不持久化job
org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore
</value>
</property>
</bean>
</beans>

5.4 spring-aop.xml(配置AOP)

SpringAOP面向切面程式設計(動態代理)

<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"
>

<!--注入AOP增強目標-->
<beanid="userService"class="com.mylifes1110.service.impl.UserServiceImpl"/>

<!--注入代理物件-->
<beanid="userServiceProxy"class="com.mylifes1110.advice.MyAdvice"/>
<beanid="userServiceProxy1"class="com.mylifes1110.advice.AfterReturningAdvices"/>
<beanid="userServiceProxy2"class="com.mylifes1110.advice.MethodInterceptors"/>

<!--定義切入點並形成切面-->
<aop:config>
<!--切入點-->
<aop:pointcutid="increaseUserService"expression="execution(*selectUserById())"/>
<!--組裝切入點和增強目標並形成切面-->
<aop:advisoradvice-ref="userServiceProxy2"pointcut-ref="increaseUserService"/>
</aop:config>
</beans>

5.5 所需依賴

所需依賴: Springtx事務處理、logback日誌管理依賴(傳遞依賴匯入slf4j和logback-core)、Quartz任務排程依賴、Spring與Quartz任務排程

<!--事務處理-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>

<!--Logback依賴,還會傳遞依賴slf4j和logback-core-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>

<!--Quartz任務排程-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>

<!--Spring與Quartz任務排程-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>

六、springMVC整合

6.1 web.xml配置(前端控制器)

前端控制器元件: 載入SpringMVC工廠、解決同名Servlet與html衝突問題、載入Spring工廠相關配置、二維碼配置

目的: 確保SpringMVC工廠和Spring工廠同時載入,否則執行失敗

<?xmlversion="1.0"encoding="UTF-8"?>
<web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">

<!--前端控制器,載入SpringMVC工廠-->
<servlet>
<servlet-name>mvc</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>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

<!--解決同名Servlethtml衝突問題-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

<!--載入Spring工廠等相關配置-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-*.xml</param-value>
</context-param>

<!--二維碼-->
<servlet>
<servlet-name>cap</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
<init-param>
<param-name>kaptcha.border</param-name>
<param-value>no</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.char.length</param-name>
<param-value>4</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.char.string</param-name>
<param-value>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789</param-value>
</init-param>
<init-param>
<param-name>kaptcha.background.clear.to</param-name>
<param-value>211,229,237</param-value>
</init-param>
<init-param>
<!--session.setAttribute("captcha","驗證碼")-->
<param-name>kaptcha.session.key</param-name>
<param-value>captcha</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>cap</servlet-name>
<url-pattern>/captcha</url-pattern>
</servlet-mapping>
</web-app>

6.2 spring-mvc.xml(SpringMVC元件配置)

SpringMVC元件: 註解掃描器(Controller層)、識別註解驅動、FastJson轉換器、檢視解析器、靜態資源載入器、異常解析器、攔截器、上傳解析器

<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"
>

<!--註解掃描器(主掃描Controller層)-->
<!--use-default-filters="false"誰也不生產-->
<context:component-scanbase-package="com.ziphtracks"use-default-filters="false">
<!--掃描有@Controller註解的類-->
<context:include-filtertype="annotation"expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

<!--識別註解驅動-->
<mvc:annotation-driven>
<!--安裝FastJson,轉換器-->
<mvc:message-converters>
<beanclass="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<!--宣告轉換型別:json-->
<propertyname="supportedMediaTypes">
<list>
<value>application/json</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>

<!--檢視解析器
1.捕獲後端控制的方法返回值"hello"
2.拼接前後綴/hello.jsp
-->
<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="prefix"value="/"/>
<propertyname="suffix"value=".jsp"/>
</bean>

<!--處理載入靜態資源-->
<mvc:default-servlet-handler/>

<!--異常解析器-->
<beanclass="com.ziphtracks.exception.resolver.MyExResolver"></bean>

<!--攔截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mappingpath="/inter/test1"/>
<mvc:mappingpath="/inter/test2"/>
<mvc:mappingpath="/inter/test*"/><!--test開頭-->
<mvc:mappingpath="/inter/**"/><!--/**任意多級任意路徑-->
<mvc:exclude-mappingpath="/inter/a/**"/><!--不攔截此路徑-->
<beanclass="com.ziphtracks.interceptor.MyInter1"></bean><!--攔截器類-->
</mvc:interceptor>
</mvc:interceptors>

<!--上傳解析器(id必須是:“multipartResolver”)-->
<beanid="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--最大可上傳的檔案大小單位:byte超出後會丟擲MaxUploadSizeExceededException異常,可以異常解析器捕獲-->
<propertyname="maxUploadSize"value="1048576"></property>
</bean>
</beans>

6.3 所需依賴

所需依賴: Jackson(Json解析)、SpringMVC核心(webmvc)、IO、檔案上傳(因檔案上傳依賴與其他依賴重名所以需要排除其他依賴)、FastJson(Json解析)、二維碼所需依賴(排除其他影響的二維碼依賴)

<!--Jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>

<!--SpringMVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>

<!--IO-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>

<!--檔案上傳-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>

<!--FastJson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>

<!--二維碼-->
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>

七、IDEA建立模板

新建模板
image-20200724184630438
建立模板並新增程式碼/名稱/檔案型別
image-20200724184952111
使用模板
image-20200724185317354

SSM所需依賴模板(pom.xml)

<?xmlversion="1.0"encoding="UTF-8"?>
<projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.example</groupId>
<artifactId>platfrom</artifactId>
<version>1.0-SNAPSHOT</version>

<!--web打包方式-->
<packaging>war</packaging>

<dependencies>
<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>

<!--jsp-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>

<!--jstl-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

<!--Spring核心-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>

<!--SpringJDBC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>

<!--spring+mybatis整合依賴-->
<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>3.4.6</version>
</dependency>

<!--MySql驅動依賴-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>

<!--連線池Druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>

<!--分頁外掛-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>

<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>

<!--SpringJunit-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>

<!--Junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

<!--事務處理-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>

<!--Logback依賴,還會傳遞依賴slf4j和logback-core-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>

<!--Quartz任務排程-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>

<!--Spring與Quartz任務排程-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>

<!--Jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>

<!--SpringMVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>

<!--IO-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>

<!--檔案上傳-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>

<!--FastJson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>

<!--二維碼-->
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>