SSH框架整合(struts2、hibernate和spring)环境搭建

用tomcat9.0来运行项目,开始用的tomcat8.5就一直报错!!!
整合原理:用spring分别去整合struts2和hibernate!

一、导入jar包:

1、struts2的jar(两部分):
第一部分,自身需要的jar:
在这里插入图片描述
第二部分,struts2整合spring需要的jar:
在这里插入图片描述
2、hibernate的jar(四部分):
第一部分:自身必要的required下的jar (18个):
在这里插入图片描述
第二部分:和JPA相关的jar:
在这里插入图片描述
此时发现struts2和hibernate的jar包中都有javassist.jar,可能造成版本冲突,所以删除低版本的javassist!
第三部分:连接池c3p0:
在这里插入图片描述
第四部分:mysql连接驱动:
在这里插入图片描述
3、spring的jar(四部分):
第一部分:核心jar:
在这里插入图片描述
第二部分:aop相关的jar:
在这里插入图片描述
第三部分:和orm框架整合的jar:
在这里插入图片描述
第四部分:整合web项目的jar:
在这里插入图片描述
4、日志相关
如果复制的struts2或者hibernate中有log4j和slf4j相关的jar,建议先删除,再导下面的包!不然可能造成版本冲突!
在这里插入图片描述

二、创建模块包和类:

如:User模块:

实体层:
cn.melo.user.entity.User
dao层:
接口:cn.melo.user.dao.UserDao
实现类:cn.melo.user.dao.impl.UserDaoImpl
service层:
接口:cn.melo.user.service.UserService
实现类:cn.melo.user.service.impl.UserServiceImpl
web层:
cn.melo.user.action.UserAction

三、搭建struts2的开发环境:

1、配置过滤器:
打开web.xml文件,配置过滤器:

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

2、编写struts.xml:
名称固定(struts.xml),位置放在src下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
	"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
	<!-- package标签和类上的包类似,用来包住action,属性:
		name,随便给值,多个package之间没有相同的name即可
		extends,值是固定的(struts-default),表示继承,有了这个,Action才会起作用
		namespace,它的值和action中name属性的值构成了在浏览器访问时的路径 -->
	<package name="pkg1" extends="struts-default" namespace="/">
		<!-- action标签,用来指定访问路径和类,属性:
			name:和上面package标签中的namespace构成一个访问路径,值随便给,不重复即可
			class:是你的action类的全路径 
			method:匹配action中的方法 1表示第一个通配符 -->
		<action name="user_*" class="cn.melo.user.action.UserAction" method="{1}>
			<!-- result标签用来匹配action中的方法,属性
			name:写你想要执行的方法的返回值;
			type:指定你是想转发还是重定向,默认是转发
			result标签的值,写的是要访问的路径! -->
			<result name="add">/add.jsp</result>
			<!--struts2的2.5版本以后,想要用通配符,必须配好allowed-methods,里面写上方法名,多个方法名之间用逗号隔开-->
			<allowed-methods>addUser</allowed-methods>
		</action>
	</package>
</struts>
四、搭建hibernate的开发环境:

1、编写实体类和hibernate的映射配置文件:
User.java

package cn.melo.user.entity;

import java.io.Serializable;

public class User implements Serializable {
	private static final long serialVersionUID = 1L;
	
	private Integer uid;
	private String uname;
	private Integer uage;
	public User() {
		super();
	}
	public User(Integer uid, String uname, Integer uage) {
		super();
		this.uid = uid;
		this.uname = uname;
		this.uage = uage;
	}
	public Integer getUid() {
		return uid;
	}
	public void setUid(Integer uid) {
		this.uid = uid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public Integer getUage() {
		return uage;
	}
	public void setUage(Integer uage) {
		this.uage = uage;
	}
	@Override
	public String toString() {
		return "User [uid=" + uid + ", uname=" + uname + ", uage=" 
				+ uage + "]";
	}
	
}

映射配置文件,名称位置不固定,一般名称是实体类名.hbm.xml,位置就放在实体类所在的包下!
User.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<!-- 实体类和与之对应的表名 -->
	<class name="cn.melo.user.entity.User" table="t_user">
		<!-- 属性和表字段都是有唯一值的! -->
		<id name="uid" column="uid">
			<!-- native表示该字段在数据库表中是自增长,且自动增长 -->
			<generator class="native"></generator>
		</id>
		<!-- 配置其他属性和表字段的对应关系 -->
		<property name="uname" column="uname"></property>
		<property name="uage" column="uage"></property>
	</class>
</hibernate-mapping>

2、编写hibernate的全局配置文件:
名称(hibernate.cfg.xml),位置(在src下)都是固定的:
hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<!-- 1、配置数据库信息 -->
		<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
		<!--数据库url,自己的数据库名不要写错 -->
		<property name="hibernate.connection.url">jdbc:mysql:///ssh_demo?serverTimezone=GMT%2b8&amp;useUnicode=true&amp;charcterEncding=utf8</property>
		<!--数据库的用户名 -->
		<property name="hibernate.connection.username">root</property>
		<!--数据库的登录密码 -->
		<property name="hibernate.connection.password">123</property>

		<!-- 2、配置Hibernate信息 -->
		<!-- 输出SQL语句 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 格式化SQL语句 -->
		<property name="hibernate.format_sql">true</property>
		<!-- 如果有表就更新,没有表就创建 -->
		<property name="hibernate.hbm2ddl.auto">update</property>
		<!-- 配置数据库方言 -->
		<!-- <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> -->
		<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
		<!-- 3、引入映射配置文件 -->
		<mapping resource="cn/melo/user/entity/User.hbm.xml" />
	</session-factory>
</hibernate-configuration>
五、搭建spring的开发环境:

1、编写spring的配置文件:
名称位置不固定,一般叫applicationContext.xml,且放在src下:
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">
</beans>

2、配置spring的加载:
在web.xml中进行配置,让服务器一开启就加载spring的核心配置文件:
web.xml:

<!-- 监听器配置 -->
<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:applicationContext.xml</param-value>
</context-param>
六、整合spring和struts2:

把action类交给spring管理:
在applicationContext.xml中:

<bean id="userAction" class="cn.melo.user.action.UserAction" scope="prototype"></bean>

因为把action给spring管理了,所以还要修改struts.xml中,把<action>标签中的class直接改为刚刚在applicationContext.xml中配置的id值:
struts.xml:

<action name="user_*" class="userAction" method="{1}>
七、Spring框架整合hibernate框架

1、 把hibernate核心配置文件中配置数据库信息,把数据库信息在spring进行配置:
hibernate.cfg.xml中的关于数据库配置的信息就可以删除了!在spring中配置:
先创建一个连接数据库参数的配置文件jdbc.properties:

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///ssh_demo?serverTimezone=GMT%2b8&useUnicode=true&charcterEncding=utf8
jdbc.user=root
jdbc.password=123

在applicationContext.xml中配置:

<!--配置数据库连接池 -->
<!--读取外部配置文件 -->
<context:property-placeholder
	location="classpath:jdbc.properties"></context:property-placeholder>
<!--配置druid连接池 -->
<bean id="dataSource"
	class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="driverClass"
		value="${jdbc.driverClass}"></property>
	<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
	<property name="user" value="${jdbc.user}"></property>
	<property name="password" value="${jdbc.password}"></property>
</bean>

2、把hibernate的sessionFactory交给spring配置:
applicationContext.xml:

<!-- SessionFactory的配置 -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<!-- 指定数据库信息 -->
		<property name="dataSource" ref="dataSource"></property>
		<!-- 指定使用hibernate的核心配置文件 -->
		<property name="configLocations" value="classpath:hibernate.cfg.xml"></property>	
	</bean>

3、在action中注入service,service中注入dao:
UserAction.java:

private UserService userService;
public void setUserService(UserService userService) {
	this.userService = userService;
}

UserServiceImpl.java:

private UserDao userDao;
public void setUserDao(UserDao userDao) {
	this.userDao = userDao;
}

applicationContext.xml:

<!-- 管理action -->
<bean id="userAction" class="cn.melo.user.action.UserAction" scope="prototype">
	<!-- action中注入service -->
	<property name="userService" ref="userService"></property>
</bean>
<!-- 管理service -->
<bean id="userService" class="cn.melo.user.service.impl.UserServiceImpl">
	<!-- 注入dao -->
	<property name="userDao" ref="userDao"></property>
</bean>
<!-- 管理dao -->
<bean id="userDao" class="cn.melo.user.dao.impl.UserDaoImpl">
</bean>

4、在dao中使用hibernateTemplate:
UserDaoImpl.java:

private HibernateTemplate hibernateTemplate;
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
	this.hibernateTemplate = hibernateTemplate;
}

applicationContext.xml:

<!-- 管理dao -->
<bean id="userDao" class="cn.melo.user.dao.impl.UserDaoImpl">
	<!-- 注入HibernateTemplate对象 -->
	<property name="hibernateTemplate" ref="hibernateTemplate"></property>
</bean>
<!-- 创建HibernateTemplate对象 -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
	<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
八、配置事务

applicationContext.xml:

<!-- 配置事务 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
	<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 开启事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

在service的实现类上加上注解@Transactional

九、日志配置文件

在src下创建log4j.properties:

### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

OK,环境搭建完毕,启动tomcat不报错,且在数据库中建立了表,就表明OK了!

十、总结:

整理好的jar包下载,百度云:
链接:https://pan.baidu.com/s/1FcSlOXUBnsjCnP1XHg2tTg
提取码:ylbg
所有配置文件:
1、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"></context:property-placeholder>
	<!--配置druid连接池 -->
	<bean id="dataSource"
		class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverClass}"></property>
		<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
		<property name="user" value="${jdbc.user}"></property>
		<property name="password" value="${jdbc.password}"></property>
	</bean>
	<!-- SessionFactory的配置 -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<!-- 指定数据库信息 -->
		<property name="dataSource" ref="dataSource"></property>
		<!-- 指定使用hibernate的核心配置文件 -->
		<property name="configLocations"
			value="classpath:hibernate.cfg.xml"></property>

	</bean>
	<!-- 管理action -->
	<bean id="userAction" class="cn.melo.user.action.UserAction"
		scope="prototype">
		<!-- action中注入service -->
		<property name="userService" ref="userService"></property>
	</bean>
	<!-- 管理service -->
	<bean id="userService"
		class="cn.melo.user.service.impl.UserServiceImpl">
		<!-- 注入dao -->
		<property name="userDao" ref="userDao"></property>
	</bean>
	<!-- 管理dao -->
	<bean id="userDao" class="cn.melo.user.dao.impl.UserDaoImpl">
		<!-- 注入HibernateTemplate对象 -->
		<property name="hibernateTemplate" ref="hibernateTemplate"></property>
	</bean>
	<!-- 创建HibernateTemplate对象 -->
	<bean id="hibernateTemplate"
		class="org.springframework.orm.hibernate5.HibernateTemplate">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>

	<!-- 配置事务 -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	<!-- 开启事务注解 -->
	<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

2、hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>

		<!-- 配置Hibernate信息 -->
		<!-- 输出SQL语句 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 格式化SQL语句 -->
		<property name="hibernate.format_sql">true</property>
		<!-- 如果有表就更新,没有表就创建 -->
		<property name="hibernate.hbm2ddl.auto">update</property>
		<!-- 配置数据库方言 -->
		<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
		<!-- 引入映射配置文件 -->
		<mapping resource="cn/melo/user/entity/User.hbm.xml" />
	</session-factory>
</hibernate-configuration>

3、jdbc.properties

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///ssh_demo?serverTimezone=GMT%2b8&useUnicode=true&charcterEncding=utf8
jdbc.user=root
jdbc.password=123

4、log4j.proiperties:见上面
5、struts2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
	"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
	<!-- package标签和类上的包类似,用来包住action,属性:
		name,随便给值,多个package之间没有相同的name即可
		extends,值是固定的(struts-default),表示继承,有了这个,Action才会起作用
		namespace,它的值和action中name属性的值构成了在浏览器访问时的路径 -->
	<package name="pkg1" extends="struts-default" namespace="/">
		<!-- action标签,用来指定访问路径和类,属性:
			name:和上面package标签中的namespace构成一个访问路径,值随便给,不重复即可
			class:是你的action类的全路径 
			method:匹配action中的方法  -->
		<action name="user_*" class="userAction" method="{1}">
			<!-- result标签用来匹配action中的方法,属性
			name:写你想要执行的方法的返回值;
			type:指定你是想转发还是重定向,默认是转发
			result标签的值,写的是要访问的路径! -->
			<result name="add">/add.jsp</result>
			<result name="list">/list.jsp</result>
			<allowed-methods>addUser,listUser</allowed-methods>
		</action>
	</package>
</struts>

6、User.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<!-- 实体类和与之对应的表名 -->
	<class name="cn.melo.user.entity.User" table="t_user">
		<!-- 属性和表字段都是有唯一值的! -->
		<id name="uid" column="uid">
			<!-- native表示该字段在数据库表中是自增长,且自动增长 -->
			<generator class="native"></generator>
		</id>
		<!-- 配置其他属性和表字段的对应关系 -->
		<property name="uname" column="uname"></property>
		<property name="uage" column="uage"></property>
	</class>
</hibernate-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值