SSH框架整合,親測有效~

版權聲明:本文爲 小異常 原創文章,非商用自由轉載-保持署名-註明出處,謝謝!
本文網址:https://blog.csdn.net/sun8112133/article/details/106781272







SSH 框架 整合是由 Spring、Struts2、Hibernate 三大框架集合而成:

  • SpringSpring 是 Java 開發的行業標準,是目前 Java 主流的一套框架;
  • Struts2:基於 MVC 設計模式的 web 應用框架;
  • Hibernate:當前主流全自動化的 ORM 框架,對 JDBC 進行了非常輕量級的對象封裝,能夠自己生成 SQL 語句,自動執行,更是持久層的解決方案。

SSH 框架 整合中,Spring、Struts2Hibernate 分別負責不同的業務模塊,共同來完成企業級項目開發的需求。Struts2 負責實現 MVC 設計模式,管理前後端的數據交互;Hibernate 負責持久化層,管理後端與數據庫之間的數據交互。

本篇博客將使用 Maven 管理依賴,講解 SSH 框架 整合的步驟,若小夥伴想使用 Jar 包的方式,可能參考我之前寫的博客:SSH整合所需Jar包詳解


一、引入依賴

我們首先是創建 Maven 的 Web 工程(可以參考:在 Eclipse 中使用 Maven),然後在 pom.xml 中添加相關依賴,要添加的主要依賴有:

  • Struts2 依賴;
  • Hibernate 依賴;
  • Spring 依賴;
  • Spring 整合 Hibernate 依賴;
  • Struts2 整合 Spring 依賴;
  • Hibernate 整合 C3P0 依賴。
<dependencies>
	<!-- Spring 依賴 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>4.2.4.RELEASE</version>
	</dependency>

	<!-- Struts2 依賴 -->
	<dependency>
		<groupId>org.apache.struts</groupId>
		<artifactId>struts2-core</artifactId>
		<version>2.3.24</version>
		<exclusions>
			<!-- 去除 javassist,因爲 Hibernate 中也有一個 -->
			<exclusion>
				<groupId>javassist</groupId>
				<artifactId>javassist</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
	
	<!-- Hibernate 依賴 -->
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-core</artifactId>
		<version>5.0.7.Final</version>
	</dependency>
	
	<!-- MySQL 驅動依賴 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.43</version>
	</dependency>

	<!-- Spring Web 依賴(因爲要整合 Web 項目) -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		<version>4.2.4.RELEASE</version>
	</dependency>

	<!-- Spring JDBC 依賴(因爲要管理 Hibernate) -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>4.2.4.RELEASE</version>
	</dependency>
	
	<!-- Spring AOP 依賴 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aspects</artifactId>
		<version>4.2.4.RELEASE</version>
	</dependency>

	<!-- Spring 整合 Hibernate 依賴 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-orm</artifactId>
		<version>4.2.4.RELEASE</version>
	</dependency>
	
	<!-- Struts2 整合 Spring 包 -->
	<dependency>
		<groupId>org.apache.struts</groupId>
		<artifactId>struts2-spring-plugin</artifactId>
		<version>2.3.24</version>
	</dependency>

	<!-- Hibernate 整合 C3P0 包 -->
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-c3p0</artifactId>
		<version>5.0.7.Final</version>
	</dependency>

	<!-- JSTL 依賴 -->
	<dependency>
		<groupId>jstl</groupId>
		<artifactId>jstl</artifactId>
		<version>1.2</version>
	</dependency>

	<!-- lombok 依賴(爲了簡化 POJO 類) -->
	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<version>1.16.10</version>
	</dependency>

	<!-- log4j 依賴 -->
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.16</version>
	</dependency>
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-api</artifactId>
		<version>1.6.1</version>
	</dependency>

	<!-- Servlet 依賴 -->
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>servlet-api</artifactId>
		<version>2.5</version>
		<scope>provided</scope>
	</dependency>
	
	<!-- JSP 依賴 -->
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>jsp-api</artifactId>
		<version>2.0</version>
		<scope>provided</scope>
	</dependency>
</dependencies>

有關於 Lombok 有關內容,可以參考我之前寫的博客:Lombok初體驗



二、配置 web.xml

我們需要在 web.xml 配置文件中進行各種配置:

  • 配置開啓 Spring(監聽);
  • 解決延遲加載問題;
  • 配置 Struts2 的核心過濾器(StrutsPrepareAndExecuteFilter)。
<!-- 開啓 Spring 的監聽 -->
<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Spring 的配置文件(applicationContext.xml) -->
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:applicationContext.xml</param-value>
</context-param>

<!-- 解決延遲加載問題的過濾器 -->
<filter>
	<filter-name>OpenSessionInViewFilter</filter-name>
	<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>OpenSessionInViewFilter</filter-name>
	<url-pattern>*.action</url-pattern>
</filter-mapping>

<!-- Struts2 的核心過濾器 -->
<filter>
	<filter-name>struts2</filter-name>
	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>


三、配置各個框架的 XML 文件

我們在 web.xml 中已經配置了 Spring 配置文件(applicationContext.xml ,我們要進行 SpringHibernate 的整合,所以要在 Spring 配置文件 中配置 Hibernate 相關信息,也要將 數據庫配置信息 獨立出來配置(jdbc.properties)。

配置各個框架的 XML 文件(文件名可以任意起):

  • applicationContext.xmlSpring 配置文件;
  • jdbc.properties數據庫連接信息 配置文件;
  • struts.xmlStruts2 配置文件。

1、Spring 配置文件(applicationContext.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:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	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">
	
	<!-- 引入外部屬性文件=============================== -->
	<context:property-placeholder location="classpath:jdbc.properties"/>
	
	<!-- 配置 C3P0 連接池=============================== -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<!-- 連接數據庫的信息 -->
		<property name="driverClass" value="${jdbc.driverClass}"/>
		<property name="user" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}"/>
		<property name="jdbcUrl" value="${jdbc.url}"/>
		<!-- 初始化連接數。需要在最大和最小連接數之間,否則會被最小連接數的值替換 -->
		<property name="initialPoolSize" value="${jdbc.initialPoolSize}"></property>
		<!-- 最小連接數 -->
		<property name="minPoolSize" value="${jdbc.minPoolSize}"></property>
		<!-- 最大連接數 -->
		<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
		<!-- 連接過期時間。以秒爲單位 -->
		<property name="checkoutTimeout" value="${jdbc.checkoutTimeout}"></property>
		<!-- 空閒連接時間。每 3000 秒檢查所有連接池中的空閒連接,以秒爲單位-->
		<property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}"></property>
	</bean>
	
	<!-- Spring 整合 Hibernate -->
	<!-- 配置 Hibernate 信息=============== -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<!-- 引入數據源 -->
		<property name="dataSource" ref="dataSource"/>
		<!-- 配置 Hibernate 的相關屬性 -->
		<property name="hibernateProperties">
			<props>
				<!-- 配置 Hibernate 的方言 -->
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
				<!-- 打印 SQL -->
				<prop key="hibernate.show_sql">true</prop>
				<!-- 格式化 SQL -->
				<prop key="hibernate.format_sql">true</prop>
				<!-- 自動創建表 -->
				<prop key="hibernate.hbm2ddl.auto">update</prop>
			</props>
		</property>
		
		<!-- 引入映射文件 -->
		<property name="mappingResources">
			<list>
				<value>com/demo/domain/User.hbm.xml</value>
			</list>
		</property>
		
		<!-- 引入 Hibernate 的配置文件,如果將 Hibernate 與 Spring 分離,則需要引入 Hibernate 配置文件 -->
		<!-- <property name="configLocation" value="classpath:hibernate.cfg.xml"/> -->
	</bean>
	
	<!-- 配置 Action -->
	<bean id="helloAction" class="com.demo.web.action.HelloAction" scope="prototype"></bean>
	<bean id="userAction" class="com.demo.web.action.UserAction" scope="prototype">
		<property name="userService" ref="userService"/>
	</bean>
	
	<!-- 配置 Service -->
	<bean id="userService" class="com.demo.service.impl.UserServiceImpl">
		<property name="userDao" ref="userDao"/>
	</bean>
	
	<!-- 配置 DAO -->
	<bean id="userDao" class="com.demo.dao.impl.UserDaoImpl">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	
	<!-- 配置事務管理器 -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	
	<!-- 開啓註解事務 -->
	<tx:annotation-driven transaction-manager="transactionManager"/>
	
</beans>

2、數據庫配置文件(jdbc.properties)

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///sys?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
jdbc.initialPoolSize=5
jdbc.minPoolSize=5
jdbc.maxPoolSize=20
jdbc.checkoutTimeout=120
jdbc.idleConnectionTestPeriod=3000

3、Struts2 配置文件(struts.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

	<!-- 配置 Struts2 的常量 -->
	<constant name="struts.action.extension" value="action"/>
	
	<!-- 配置 Action -->
	<package name="hello" extends="struts-default" namespace="/">
		<action name="hello" class="helloAction" method="hello" />
	</package>
	
	<package name="ssh" extends="struts-default" namespace="/">
		<action name="user_*" class="userAction" method="{1}">
			<result name="saveSuccess" type="redirectAction">user_find.action</result>
			<result name="findSuccess">/index.jsp</result>
			<result name="findIdSuccess">/update.jsp</result>
		</action>
	</package>
	
</struts>



四、小栗子

SSH 框架 整合源碼(內含 CRUD 小栗子):https://download.csdn.net/download/sun8112133/12525531



博客中若有不恰當的地方,請您一定要告訴我。前路崎嶇,望我們可以互相幫助,並肩前行!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章