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



博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!



猜你喜欢

转载自blog.csdn.net/sun8112133/article/details/106781272