1. 程式人生 > >SSM專案搭建的主要步驟

SSM專案搭建的主要步驟

一、說明

因本人個人習慣,一般將專案的核心的配置分為如下幾個配置檔案配置(名字也是本人的個人愛好,不喜別噴),下文說到配置檔案時就不會再進行解釋。
spring-mybatis.xml:springMybatis配置檔案,主要用來配置與mybatis有關的配置,如資料來源等。
spring-mvc.xml:springMVC配置檔案,主要用來配置與springMVC有關的配置,如檢視解析器等。
spring.xml:spring配置檔案,主要用來配置其他的配置,如包掃描,事務管理等。
spring-configs.xml:核心配置檔案,主要用來引入其他的配置檔案和配置一些共用的配置,如引入springMybatis配置檔案和配置包掃描等。

二、配置springMVC

springMVC的五大元件,包括“前端控制器”、“後端控制器”、“檢視解析器”、“攔截器”和“url對映處理器”。

1、前端控制器(DispatcherServlet)

1.1 在web.xml檔案中配置
1.2 給“contextConfigLocation”變數指定核心配置檔案的路徑(如:classpath:/spring-configs.xml)。在前端控制器啟動的時候會使用其來載入核心配置檔案。
1.3 設定優先順序,一般設定為1(數字越小優先順序越高)。如果沒有設定,伺服器啟動時不會啟動前端控制器。
1.4 具體程式碼配置如下:
	<!-- 配置前端控制器 -->
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <!-- 指定核心配置檔案路徑 --> <param-name>ContextConfigLocation</param-name> <param-value
>
classpath:/spring-configs.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <!-- 配置優先順序,數字越小越高 --> </servlet> <!-- .do .action 以前的規範,現在不常用了 路徑描述: 字首型: /service/* 只要請求以service開頭被前端控制器攔截 字尾型: .do 請求攔截以.do結尾 全路徑: /service/*.do 以service開頭以.do結尾請求 /* 不管請求是什麼路徑統統攔截 / 攔截請求和靜態資源,放行jsp等動態資源(靜態資源一般會在核心配置檔案中配置放行,具體配置看擴充套件8) 為restFul格式做準備 --> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

2、攔截器(HandlerInterceptor)

本人沒有配置

3、檢視解析器(ViewResolver,全稱為InternalResourceViewResolver(內部資源的檢視解析器))

3.1 在springMVC配置檔案中配置
3.2 給“Prefix”變數指定字首,在解析檢視時和字尾一起與傳入的字串拼接成完整的url路徑
3.3 給“Suffix”變數指定字尾,同上
3.4 具體程式碼配置如下:
<!-- 配置檢視解析器,具體實現類為:InternalResourceViewResolver(內部資源檢視解析器) -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	<property name="Prefix" value="/WEB-INF/views/"/>
    	<property name="Suffix" value=".jsp"/>
</bean>

4、後端控制器(Controller)

4.1 可以配置也可以不配置。
4.2 如果想配置就使用bean標籤在springMVC配置檔案中配置(一般不建議使用)
4.3 如果不想配置就使用註解的方式。在類前面新增後端控制器註解(@Controller),然後在spring配置檔案中配置掃描就行了。(建議使用)
4.4 具體程式碼實現:
@Controller //後端控制器註解
@RequestMapping("/") //url對映路徑註解
public class PageController {
	@RequestMapping("doTestPage")
	public String doTestPage(){
		return "test_page";
	}
}

5、url對映處理器(HanlderMapping)

5.1 不需要配置URL對映處理器,但需要使用註解方式配置url對映路徑。在後端控制器類或方法的前面加上url對映路徑的註解(@ RequestMapping)。(建議使用,本人表示只會註解方式,其他方式不會)
5.2 具體程式碼實現:
@Controller //後端控制器註解
@RequestMapping("/") //url對映路徑註解
public class PageController {
	@RequestMapping("doTestPage")
	public String doTestPage(){
		return "test_page";
	}
}

擴充套件配置

6、全站亂碼處理過濾器(CharacterEncodingFilter)

6.1 在web.xml檔案中配置
6.2 給“encoding”變數指定編碼格式(一般為UTF-8)
6.3 具體程式碼配置如下:
	<!-- 為了解決中文亂碼問題(POST亂碼),配置過濾器 -->
	<filter>
		<filter-name>characterEncodingFilter</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>
	</filter>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

注:該過濾器只針對POST請求,其他請求無效。請求引數中包含中文的,建議使用POST請求

7、開啟springMVC註解

7.1 在springMVC配置檔案中配置
7.2 具體程式碼配置如下:
<!-- 開啟mvc註解 -->
<mvc:annotation-driven/>
7.3 擴充套件
	7.3.1 配置阿里巴巴的fashjson物件,主要用於高併發時的資料傳輸格式轉化
	7.3.2 具體程式碼配置如下:
	<!-- 配置阿里巴巴的fashjson物件,主要用於高併發時的資料傳輸格式轉化 --> 
	<mvc:annotation-driven>
		<mvc:message-converters register-defaults="true">
			<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
				<property name="SupportedMediaTypes">
					<list>
						<value>text/html;charset=utf-8</value>
						<value>application/json;charset=utf-8</value>
					</list>
				</property>
			</bean>
		</mvc:message-converters>
	</mvc:annotation-driven>

注:如果不開啟springMVC註解,會出現一些意想不到的問題。例如:@GetMapping註解無效,@DateTimeFormat註解無效等

8、放行靜態資原始檔

8.1 在springMVC配置檔案中配置
8.2 具體程式碼配置如下:
<!-- 放行靜態資原始檔 -->
<mvc:default-servlet-handler/>

注:放行後,過濾器和前端控制器將不會再進行攔截

三、配置Mybatis

1、資料來源(使用druid連線池,DruidDataSource)

1.1 在springMybatis配置檔案配置
1.2 給“DriverClassName”變數指定驅動
1.3 給“Url”變數指定資料庫的url
1.4 給“Username”變數指定資料庫的使用者名稱
1.5 給“Password”變數指定資料庫的密碼
1.6 具體程式碼配置如下:
    <!-- 配置資料來源 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    	<!-- 驅動的類全名 -->
    	<property name="DriverClassName" value="#{jdbc.jdbcDriver}"/>
    	<!-- 資料庫的url -->
    	<property name="Url" value="#{jdbc.jdbcUrl}"/>
    	<!-- 資料庫的使用者名稱 -->
    	<property name="Username" value="#{jdbc.jdbcUsername}"/>
    	<!-- 資料庫的密碼 -->
    	<property name="Password" value="#{jdbc.jdbcPassword}"/>
    </bean>

2、會話工廠(SqlSessionFactoryBean)

2.1 在springMybatis配置檔案配置
2.2 給“DataSource”變數指定一個數據源(這裡為druid連線池)
2.3 給“ConfigLocation”變數指定mybatis自身的配置檔案(mybatis-config.xml),用於載入mybatis自身的配置
2.4 給“MapperLocations”變數指定mapper檔案的路徑,為後面的生成動態代理物件做準備
2.5 給“TypeAliasesPackage”變數指定掃描路徑,相當於給指定包下的pojo物件起別名。typeAliasesPackage 預設只能掃描某一個路徑下,或以逗號等分割的 幾個路徑下的內容,不支援萬用字元和正則
2.6 具體程式碼配置如下:
	<!-- 配置會化工廠 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 指定資料來源 -->
		<property name="DataSource" ref="dataSource"/>
		<!-- 指定mybatis自身的配置檔案 -->
		<property name="ConfigLocation" value="classpath:/mybatis/mybatis-config.xml"/>
		<!-- 指定mapper檔案路徑 -->
		<property name="MapperLocations" value="classpath*:/mybatis/mapper/*Mapper.xml"/>
		<!-- 指定掃描路徑 -->
		<property name="TypeAliasesPackage" value="com.jt.manage.pojo"/>
	</bean>

注:會話工廠(SqlSessionFactory)是通過SqlSessionFactoryBean建立的,所有配置的是SqlSessionFactoryBean,而不是SqlSessionFactory

3、Mapper掃描(MapperScannerConfigurer)

3.1 在springMybatis配置檔案配置
3.2 給“SqlSessionFactoryBeanName”變數指定一個會話工廠類,也可以不寫,spring預設注入
3.3 給“”變數指定dao介面的包路徑,主要用於掃描並生成對應的動態代理物件
3.4 具體程式碼配置如下:
<!-- 配置mapper掃描 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 注入會化工廠 -->
		<property name="SqlSessionFactoryBeanName" value="sqlSessionFactory"/>
		<!-- 注入dao介面包路徑 -->
		<property name="BasePackage" value="com.jt.**.dao"/>
	</bean>

注:MapperScannerConfigurer類會掃描指定的dao包下的介面,並關聯對應的mapper動態生成代理物件,代理物件的“BeanId”預設為介面名(首字母小寫)

4、Mybatis自身的配置(主要用來配置mybatis自身的某些功能,最後使用會話工廠來載入)

4.1 配置時需要注意標籤的配置順序,如果順序顛倒會出現問題。可能配置無效或報錯。將滑鼠放在configuration標籤上面會提示其他標籤的配置順序,具體如下:
	配置順序	(properties?, settings?,typeAliases?,typeHandlers?,objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)

4.2 開啟駝峰自動對映
	具體程式碼配置如下:
	<settings>
		<!-- 開啟駝峰自動對映 -->
		<setting name="mapUnderscoreToCamelCase" value="true" />
	</settings>

四、配置Spring

1、事務控制

1.1 配置事務控制
具體配置如下:
<!-- 配置事務控制 -->
<tx:annotation-driven/>
1.2 定義事務管理器
具體配置如下:
	<!-- 定義事務管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="DataSource" ref="dataSource"></property>
	</bean>
1.3 定義事務策略
具體配置如下:
	<!-- 定義事務策略
		propagation="REQUIRED"  表示執行該方法必須新增事務
		propagation="SUPPORTS"  表示之前操作添加了事務,該方法也新增事務,否則該操作沒有新增事務
		read-only="true"  表示該方法中只允許查詢操作,如果其中存在增刪改操作則會報錯
	 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="save*"   propagation="REQUIRED"/>
			<tx:method name="delete*" propagation="REQUIRED"/>
			<tx:method name="update*" propagation="REQUIRED"/>
			<tx:method name="find*"   propagation="SUPPORTS" read-only="true"/>
			<tx:method name="*" 	  propagation="SUPPORTS" read-only="true"/>
		</tx:attributes>
	</tx:advice>
1.4	定義事務切面
具體配置如下:
	<!-- 定義事務切面
		pointcut*, advisor*, aspect*
		expression 切入點表示式
			within(包名.類名)	按類匹配,粗粒度
			execution(返回值的型別 包名.類名.方法名(引數列表))	細粒度
	 -->
	<aop:config>
		<!--  切入點 -->
		<aop:pointcut expression="execution(* com.jt.manage.service..*.*(..))" id="pc"/>
		<!-- 指定事務策略和切入點 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
	</aop:config>

2、匯入properties配置檔案的三種方式

2.1 使用util:properties標籤引入

2.1.1 這種引入只能同時引入一個或一批命名有規律並在同一個目錄下的properties配置檔案
2.1.2 具體程式碼配置如下:
<context:property-placeholder location="classpath:/property/*.properties"/>

2.2 使用context:property-placeholder標籤引入

2.2.1 這種引入只能同時引入一個或一批命名有規律並在同一個目錄下的properties配置檔案
2.2.2 具體程式碼配置如下:
<context:property-placeholder location="classpath:/property/*.properties"/>

2.3 使用PropertyPlaceholderConfigurer類引入

2.3.1 這種引入可以同時引入一個或一批properties配置檔案,其中配置檔案不需命名有規律,路徑也可以有不同。
2.3.2 具體程式碼配置如下:
<bean id="jdbc" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="Locations">
		<list>
			<value>classpath:/property/jdbc.properties</value>
		</list>
	</property>
</bean>

五、整體搭建

1、核心配置檔案中引入其他的配置檔案

1.1 核心配置檔案中引入其他的配置檔案,在伺服器啟動後由前端控制器一起載入
1.2 具體程式碼配置如下:
<!-- 引入其他的配置檔案 -->
<import resource="classpath:/spring/spring-mybatis.xml"/>
<import resource="classpath:/spring/spring-mvc.xml"/>
<import resource="classpath:/spring/spring.xml"/>

2、包路徑的建立

2.1 包括service、dao、controller等包。

3、配置Tomcat伺服器外掛,並配置tomcat啟動。

3.1 在pom配置檔案中新增Tomcat伺服器外掛配置
3.1.1 具體程式碼配置如下:
	<build>
		<plugins>
			<!-- 配置tomcat7伺服器外掛 -->
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>2.2</version>
				<configuration>
					<port>80</port> <!-- 伺服器埠號 -->
					<path>/</path> <!-- 工程訪問路徑,預設為專案名稱 -->
				</configuration>
			</plugin>
		</plugins>
	</build>
3.2 配置Tomcat啟動
3.2.1 具體操作如下:

Tomcat外掛配置第1步 Tomcat外掛配置第2步 Tomcat外掛配置第3步