1. 程式人生 > >SpringMVC的架構的執行流程和ssm框架的整合

SpringMVC的架構的執行流程和ssm框架的整合

一.springMVC架構的執行流程

  1. 使用者傳送請求到前端控制器DispatcherServlet

  2. DispatcherServlet會呼叫Handler處理器對映器(Handler處理器對映器就相當於一個map集合,通過位址列中輸入的將要執行的方法的字串和註解中寫的字串進行對比,如果發現相同的話就會把這個Hander處理連發送給前端控制器DispatcherServlet)

  3. 前端控制器會把這個handler傳送給Handler處理器介面卡(什麼是介面卡:就是不同的格式轉換為同一個格式,因為Handler可能是不相同的可能有的是通過註解的方式,也有可能是通過繼承的方式)

  4. 不同的Handler使用不同Handler執行器去執行,並返回ModelAndView到Handler處理器介面卡

  5. Handler介面卡處理器會把這個ModelAndView物件返回到前端控制器5. Handler介面卡處理器會把這個ModelAndView物件返回到前端控制器

  6. 前端控制器會把這個物件傳送到檢視解析器6. 前端控制器會把這個物件傳送到檢視解析器

  7. 檢視解析器返回一個View物件到前端控制器

  8. 前端控制器會把這個View進行渲染,就是把資料放到jsp介面中

  9. 相應客戶

二.ssm整合所需的大致東西

1.Dao層

	pojo和對映檔案和介面使用逆向工程生成
	SqlMapConfig.xml	mybatis核心配置檔案
	ApplicationContexr-dao.xml整合後spring在dao層的配置
		資料來源
		會話工廠
		掃描Mapper
2.service層

	事務					ApplicationContexr-trans.xml
	@Service註解掃描		ApplicationContexr-service.xml
3.controller層

	SpringMvc.xml
			註解掃描	掃描@Controller註解
			註解驅動	替我們顯示的配置最新版的處理器對映器和處理器介面卡
			檢視解析器	顯示的配置是為了在controller中不用每個方法都寫頁面的全路徑
4web.xml

	springMVC前端控制器
	spring監聽器

三.搭建ssm整合的流程

1.建立專案,開始配置web.xml檔案
		1).配置spring容器監聽器
			<!-- 載入spring容器監聽器 -->
			<context-param>
				<param-name>contextConfigLocation</param-name>
				<param-value>classpath:ApplicationContext-*.xml</param-value>
			</context-param>
			<listener>
				<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
			</listener>
		2).配置springMvc的前端控制器
			<servlet>
				<servlet-name>springMvc</servlet-name>
				<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
				<init-param>
					<param-name>contextConfigLocation</param-name>
					<param-value>classpath:SpringMvc.xml</param-value>
				</init-param>
				<!-- 在tomcat啟動的時候就載入這個servlet -->
				<load-on-startup>1</load-on-startup>
			</servlet>
			<servlet-mapping>
				<servlet-name>springMvc</servlet-name>
				<url-pattern>*.action</url-pattern>
			</servlet-mapping>
2.ApplicationContext-*.xml
	1).pojo和對映檔案和介面使用逆向工程生成
	2).SqlMapConfig.xml
		可以先什麼都沒有,只是一個簡單的SqlMapConfig.xml
			<?xml version="1.0" encoding="UTF-8" ?>
			<!DOCTYPE configuration
			PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
			"http://mybatis.org/dtd/mybatis-3-config.dtd">
			<configuration>

			</configuration>
	3).配置db.properties檔案
		jdbc.driver=com.mysql.jdbc.Driver
		jdbc.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8
		jdbc.username=root
		jdbc.password=root
	4).配置dao層的ApplicationContext-dao.xml
		<beans xmlns="http://www.springframework.org/schema/beans"
			xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
			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-4.0.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
			http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

			<!-- 載入配置檔案 -->
			<context:property-placeholder location="classpath:db.properties" />
			<!-- 資料庫連線池 -->
			<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
				destroy-method="close">
				<property name="driverClassName" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
				<property name="maxActive" value="10" />
				<property name="maxIdle" value="5" />
			</bean>

			<!-- mapper配置 -->
			<!-- 讓spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
			<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
				<!-- 資料庫連線池 -->
				<property name="dataSource" ref="dataSource" />
				<!-- 載入mybatis的全域性配置檔案 -->
				<property name="configLocation" value="classpath:SqlMapConfig.xml" />
			</bean>

			<!-- 配置Mapper掃描器 -->
			<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
				<property name="basePackage" value="bh.shy.dao" />
			</bean>
		</beans>
	5).開始配置service層的ApplicationContext-service.xml
		<?xml version="1.0" encoding="UTF-8"?>
		<beans xmlns="http://www.springframework.org/schema/beans"
			xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
			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-4.0.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
			http://www.springframework.org/schema/tx 
			http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
			http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
			
			<!-- service掃描 -->
			<context:component-scan base-package="bh.shy.service"></context:component-scan>
			
		</beans>
	6).配置平臺事務管理器ApplicationContext-trans.xml
		<?xml version="1.0" encoding="UTF-8"?>
		<beans xmlns="http://www.springframework.org/schema/beans"
			xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
			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-4.0.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
			http://www.springframework.org/schema/tx 
			http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
			http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

			<!-- 事務管理器 -->
			<bean id="transactionManager"
				class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
				<!-- 資料來源 -->
				<property name="dataSource" ref="dataSource" />
			</bean>

			<!-- 通知 -->
			<tx:advice id="txAdvice" transaction-manager="transactionManager">
				<tx:attributes>
					<!-- 傳播行為 -->
					<tx:method name="save*" propagation="REQUIRED" />
					<tx:method name="insert*" 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="get*" propagation="SUPPORTS" read-only="true" />
				</tx:attributes>
			</tx:advice>

			<!-- 切面 -->
			<aop:config>
				<aop:advisor advice-ref="txAdvice"
					pointcut="execution(* bh.shy.service.*.*(..))" />
			</aop:config>

		</beans>
	7).配置springMvc.xml
		<?xml version="1.0" encoding="UTF-8"?>
		<beans xmlns="http://www.springframework.org/schema/beans"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
			xmlns:context="http://www.springframework.org/schema/context"
			xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
			xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
				http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
				http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

			<!-- @Controller註解掃描 -->
			<context:component-scan base-package="bh.shy.controller"/>
			<!-- 我也不知道為什麼這裡還要開啟掃描,不開啟不好使 -->
			<context:component-scan base-package="bh.shy.service"/>

			<!-- 註解驅動: 替我們顯示的配置了最新版的註解的處理器對映器和處理器介面卡 -->
			<mvc:annotation-driven></mvc:annotation-driven>

			<!-- 配置檢視解析器 作用:在controller中指定頁面路徑的時候就不用寫頁面的完整路徑名稱了,可以直接寫頁面去掉副檔名的名稱 -->
			<bean
				class="org.springframework.web.servlet.view.InternalResourceViewResolver">
				<!-- 真正的頁面路徑 = 字首 + 去掉字尾名的頁面名稱 + 字尾 -->
				<!-- 字首 -->
				<property name="prefix" value="/WEB-INF/jsp/"></property>
				<!-- 字尾 -->
				<property name="suffix" value=".jsp"></property>
			</bean>
		</beans>
3.生成專案的整體結構controller,service,dao,pojo
4.在controller類中先開啟@Controller註解
	開啟RequestMapping("/xxx")註解
	注入service
5.在servcieImpl中開啟@Service註解
	注入Mapping
6.測試通過