SSM框架整合的最新打開方式(打造最詳細的SSM整合教程)
SSM整合
文章已託管到GitHub,大家可以去GitHub查看閱讀,歡迎老闆們前來Star!
搜索關注微信公眾號 【碼出Offer】 領取各種學習資料!

一、創建一個Maven項目
File -> NewProject |
---|
![]() |
創建Maven項目 |
![]() |
二、聲明war打包方式並創建web項目目錄結構
2.1 創建web項目結構
有關於Maven不了解的小夥伴不要灰心,請參考Maven教程
聲明war包打包方式,即在pom.xml文件中加入一行標籤
<packaging>war</packaging>
,隨後創建web項目目錄結構!
手動構建web項目結構 |
---|
基於main目錄下創建webapp文件夾 |
![]() |
![]() |
基於webapp目錄創建WEB-INF文件夾 |
![]() |
基於WEB-INF目錄創建web.xml文件 |
![]() |
![]() |
xml文件內容展示 |
![]() |
基於webapp目錄創建index.jsp文件 |
![]() |
目錄展示 (完整的web項目目錄結構) |
![]() |
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服務 |
---|
![]() |
四、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層註解掃描器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="//www.springframework.org/schema/beans"
xmlns:context="//www.springframework.org/schema/context"
xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="//www.springframework.org/schema/beans
//www.springframework.org/schema/beans/spring-beans.xsd
//www.springframework.org/schema/context
//www.springframework.org/schema/context/spring-context.xsd">
<!--jdbc-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--連接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="password" value="${jdbc.password}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="1"/>
<property name="minIdle" value="1"/>
<property name="maxActive" value="3"/>
<!-- 配置獲取連接等待超時的時間 -->
<property name="maxWait" value="60000"/>
<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000"/>
</bean>
<!--SqlSessionFactory(mybatis核心配置)-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 連接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 註冊mapper -->
<property name="mapperLocations" value="classpath:com/ziphtracks/mapper/*.xml"/>
<!-- 別名 -->
<property name="typeAliasesPackage" value="com.ziphtracks.bean"/>
<!-- 關聯mybatis的配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
<!--Dao/Mapper掃描器-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ziphtracks.mapper"/>
<!-- 如果當前spring工廠中,只有一個SqlSesionFactory, 則此配置可省略 -->
<!-- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>-->
</bean>
</beans>
4.3 mybatis-congfig.xml(分頁和緩存)
功能組件: 分頁查詢、二級緩存
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"//mybatis.org/dtd/mybatis-3-config.dtd">
<!--MyBatis配置-->
<configuration>
<!-- mybaits-config.xml中開啟全局緩存(默認開啟) -->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<!-- 分頁插件 -->
<plugins>
<!-- com.github.pagehelper為PageHelper類所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
</configuration>
4.4 Mapper.xml
書寫SQL語句的Mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"//mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace:所需實現的接口全限定名-->
<mapper namespace="">
<!-- 書寫標籤和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註解
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="//www.springframework.org/schema/beans"
xmlns:context="//www.springframework.org/schema/context"
xmlns:aop="//www.springframework.org/schema/aop"
xmlns:tx="//www.springframework.org/schema/tx"
xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="//www.springframework.org/schema/beans
//www.springframework.org/schema/beans/spring-beans.xsd
//www.springframework.org/schema/context
//www.springframework.org/schema/context/spring-context.xsd
//www.springframework.org/schema/aop
//www.springframework.org/schema/aop/spring-aop.xsd
//www.springframework.org/schema/tx
//www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 註解掃描器,配置掃描位置(掃描Service層註解) -->
<context:component-scan base-package="com.ziphtracks" use-default-filters="true">
<!-- 忽略有 @Controller註解的類 -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--事務管理器-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 事務驅動器,告知@Transactional註解,誰是事務管理器 -->
<tx:annotation-driven transaction-manager="txManager"/>
<!-- 事務增強(不適用註解事務的時候自行增強事務) -->
<!-- 為需要事務的方法,設置事務屬性,這裡沒有列舉事務屬性 -->
<!--
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="selectUserById" propagation="SUPPORTS"/>
<tx:method name="insertUser" read-only="false" isolation="DEFAULT" propagation="REQUIRED" timeout="5" rollback-for="Exception"/>
<tx:method name="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 | 換行 |
<?xml version="1.0" encoding="UTF-8"?>
<!-- scan:當此屬性設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true -->
<!-- scanPeriod:設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan為true時,此屬性生效。
默認的時間間隔為1分鐘。 -->
<!-- debug:當此屬性設置為true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值為false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="true">
<!-- 定義變量,可通過 ${log.path}和${CONSOLE_LOG_PATTERN} 得到變量值 -->
<property name="log.path" value="D:/log" />
<property name="CONSOLE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} |-[%-5p] in %logger.%M[line-%L] -%m%n"/>
<!-- 輸出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- Threshold=即最低日誌級別,此appender輸出大於等於對應級別的日誌
(當然還要滿足root中定義的最低級別)
-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<!-- 日誌格式(引用變量) -->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 設置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 追加到文件中 -->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>${log.path}/hello2.log</file>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 滾動追加到文件中 -->
<appender name="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>
<!-- 日誌記錄器的滾動策略,按日期,按大小記錄
文件超過最大尺寸後,會新建文件,然後新的日誌文件中繼續寫入
如果日期變更,也會新建文件,然後在新的日誌文件中寫入當天日誌
-->
<rollingPolicy class="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>
<root level="trace">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="file"/>
<appender-ref ref="file2"/>
</root>
</configuration>
5.3 spring-quartz.xml(Quartz定時任務調度器)
實現定時任務調度管理功能
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="//www.springframework.org/schema/beans"
xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="//www.springframework.org/schema/beans //www.springframework.org/schema/beans/spring-beans.xsd">
<!--
Spring整合Quartz進行配置遵循下面的步驟:
1:定義工作任務的Job
2:定義觸發器Trigger,並將觸發器與工作任務綁定
3:定義調度器,並將Trigger註冊到Scheduler
-->
<!-- 1:定義任務的bean,這裡使用JobDetailFactoryBean,也可以使用MethodInvokingJobDetailFactoryBean,配置類似-->
<bean name="myJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!-- 指定job的名稱 -->
<property name="name" value="job2004"/>
<!-- 指定job的分組 -->
<property name="group" value="job_group2004"/>
<!-- 指定具體的job類 -->
<property name="jobClass" value="com.mylifes1110.job.MyJob2004"/>
</bean>
<bean name="myJob2" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!-- 指定job的名稱 -->
<property name="name" value="job2005"/>
<!-- 指定job的分組 -->
<property name="group" value="job_group2004"/>
<!-- 指定具體的job類 -->
<property name="jobClass" value="com.mylifes1110.job.MyJob2005"/>
</bean>
<!-- 2:定義觸發器的bean,定義一個Cron的Trigger,一個觸發器只能和一個任務進行綁定 -->
<bean id="cronTrigger2004" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 指定Trigger的名稱 -->
<property name="name" value="trigger2004"/>
<!-- 指定Trigger的名稱 -->
<property name="group" value="trigger_group2004"/>
<!-- 指定Tirgger綁定的JobDetail -->
<property name="jobDetail" ref="myJob"/>
<!-- 指定Cron 的表達式 ,當前是每隔2s運行一次 -->
<property name="cronExpression" value="* * * * * ?" />
</bean>
<bean id="cronTrigger2005" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 指定Trigger的名稱 -->
<property name="name" value="trigger2005"/>
<!-- 指定Trigger的名稱 -->
<property name="group" value="trigger_group2005"/>
<!-- 指定Tirgger綁定的JobDetail -->
<property name="jobDetail" ref="myJob2"/>
<!-- 指定Cron 的表達式 ,當前是每隔2s運行一次 -->
<property name="cronExpression" value="* * * * * ?" />
</bean>
<!-- 3.定義調度器,並將Trigger註冊到調度器中 -->
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger2004"/>
<ref bean="cronTrigger2005"/>
</list>
</property>
<!-- 添加 quartz 配置,如下兩種方式均可 -->
<!--<property name="configLocation" value="classpath:quartz.properties"></property>-->
<property name="quartzProperties">
<!--<props>
<prop key="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面向切面編程(動態代理)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="//www.springframework.org/schema/beans"
xmlns:context="//www.springframework.org/schema/context"
xmlns:aop="//www.springframework.org/schema/aop"
xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="//www.springframework.org/schema/beans //www.springframework.org/schema/beans/spring-beans.xsd
//www.springframework.org/schema/context //www.springframework.org/schema/context/spring-context.xsd
//www.springframework.org/schema/aop //www.springframework.org/schema/aop/spring-aop.xsd">
<!--注入AOP增強目標-->
<bean id="userService" class="com.mylifes1110.service.impl.UserServiceImpl"/>
<!--注入代理對象-->
<bean id="userServiceProxy" class="com.mylifes1110.advice.MyAdvice"/>
<bean id="userServiceProxy1" class="com.mylifes1110.advice.AfterReturningAdvices"/>
<bean id="userServiceProxy2" class="com.mylifes1110.advice.MethodInterceptors"/>
<!--定義切入點並形成切面-->
<aop:config>
<!--切入點-->
<aop:pointcut id="increaseUserService" expression="execution(* selectUserById())"/>
<!--組裝切入點和增強目標並形成切面-->
<aop:advisor advice-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工廠同時加載,否則運行失敗
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="//xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="//xmlns.jcp.org/xml/ns/javaee //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>
<!--解決同名Servlet與html衝突問題-->
<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轉換器、視圖解析器、靜態資源加載器、異常解析器、攔截器、上傳解析器
<beans xmlns="//www.springframework.org/schema/beans"
xmlns:context="//www.springframework.org/schema/context"
xmlns:mvc="//www.springframework.org/schema/mvc"
xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="//www.springframework.org/schema/beans
//www.springframework.org/schema/beans/spring-beans.xsd
//www.springframework.org/schema/context
//www.springframework.org/schema/context/spring-context.xsd
//www.springframework.org/schema/mvc
//www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 註解掃描器(主掃描Controller層) -->
<!-- use-default-filters="false" 誰也不生產 -->
<context:component-scan base-package="com.ziphtracks" use-default-filters="false">
<!-- 掃描有@Controller註解的類 -->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 識別註解驅動 -->
<mvc:annotation-driven>
<!-- 安裝FastJson,轉換器 -->
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<!-- 聲明轉換類型:json -->
<property name="supportedMediaTypes">
<list>
<value>application/json</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 視圖解析器
1. 捕獲後端控制的方法返回值 "hello"
2. 拼接前後綴 /hello.jsp
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- 處理加載靜態資源 -->
<mvc:default-servlet-handler/>
<!-- 異常解析器 -->
<bean class="com.ziphtracks.exception.resolver.MyExResolver"></bean>
<!-- 攔截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/inter/test1"/>
<mvc:mapping path="/inter/test2"/>
<mvc:mapping path="/inter/test*"/> <!-- test開頭 -->
<mvc:mapping path="/inter/**"/> <!-- /** 任意多級任意路徑 -->
<mvc:exclude-mapping path="/inter/a/**"/> <!--不攔截此路徑-->
<bean class="com.ziphtracks.interceptor.MyInter1"></bean> <!--攔截器類-->
</mvc:interceptor>
</mvc:interceptors>
<!--上傳解析器(id必須是:「multipartResolver」)-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 最大可上傳的文件大小 單位:byte 超出後會拋出MaxUploadSizeExceededException異常,可以異常解析器捕獲 -->
<property name="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創建模板
新建模板 |
---|
![]() |
創建模板並添加代碼/名稱/文件類型 |
![]() |
使用模板 |
![]() |
SSM所需依賴模板(pom.xml)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="//maven.apache.org/POM/4.0.0"
xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="//maven.apache.org/POM/4.0.0 //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>
