版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/106781272
文章目录
SSH 框架 整合是由 Spring、Struts2、Hibernate 三大框架集合而成:
- Spring: Spring 是 Java 开发的行业标准,是目前 Java 主流的一套框架;
- Struts2:基于 MVC 设计模式的 web 应用框架;
- Hibernate:当前主流全自动化的 ORM 框架,对 JDBC 进行了非常轻量级的对象封装,能够自己生成 SQL 语句,自动执行,更是持久层的解决方案。
在 SSH 框架 整合中,Spring、Struts2、Hibernate 分别负责不同的业务模块,共同来完成企业级项目开发的需求。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
) ,我们要进行 Spring 与 Hibernate 的整合,所以要在 Spring 配置文件 中配置 Hibernate 相关信息,也要将 数据库配置信息 独立出来配置(jdbc.properties
)。配置各个框架的 XML 文件(文件名可以任意起):
applicationContext.xml
:Spring 配置文件;jdbc.properties
:数据库连接信息 配置文件;struts.xml
:Struts2 配置文件。
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