struts2+spring+hibernate整合

                                                                        struts2+spring3+hibernate4的整合[详解]



最近在学习SSH整合过程中出现了许多小问题!为了以后的学习SSH整合的朋友少走弯路,所以总结了一篇文档!但愿能对大家有所帮助!

好了,废话不多说!下面我们来实现一个用ssh框架完成对一本书的保存~


一、开发工具


开发工具工具版本
eclipse4.4.9M6
tomcat7.0
jdk1.8


二、项目开发


1、首先创建web项目!



2、创建好项目,我们开始导入项目需要的jar包,主要是ssh框架的jar包,下面我们对其详细介绍!

a、首先导入与数据库连接的支持包


b、导入数据库连接池c3p0需要的jar包

 


c、导入spring3.5的支持包 


spring支持jar包的名称jar包的说明
spring-aop.jar    spring的面向切面编程,提供AOP(面向切面编程)的实现
spring-aspects.jar  spring提供对Aspectj框架的整合
spring-beans.jarspringIOC(控制反转和依赖注入)的基础实现
spring-context.jarspring提供在基础IOC功能上的扩展服务
spring-core.jarspring的核心工具包
spring-expression.jarspring表达式语言
spring-jdbc.jarspring对jdbc的简单封装
spring-orm.jarspring整合第三方ORM框架(如hibernte,ibatis)的支持包
spring-struts.jarspring整合struts时候的支持
spring-tx.jarspring提供事务管理功能
spring-web.jar                                                                             spring提供web应用开发时
,用到spring框架时所需要的核心类,包括自动载入Web ApplicationContext特性的类,Struts与JSF集成类,文件上传的支持类, Filter类和大量工具辅助类


d导入struts2的支持包


struts支持jar包的名称jar包的说明
asm-3.3.jarjava字节码框架
asm-commons-3.3.jar同上
asm-tree-3.3.jar同上
commons-fileupload-1.3.jarstruts2文件上传的支持包
commons-io-2.0.1.jarIO工具类的封装
commons-lang3-3.1.jar为java.lang包提供扩展
freemarker-2.3.19.jar表现层框架,定义了struts2的可是组件主题
javassist-3.11.0.GA.jar代码生成工具,hibernate在运行时扩展java类和实现
ognl-3.0.6.jar                                                       对象图导航语言(Object  Graph Navigation Language),struts2框架使用的一种表达式语言
struts2-core-2.3.15.3.jarstruts2的核心库
xwork-core-2.3.15.3.jarwebwork核心库
struts2-spring-plugin-2.3.15.3.jar这是为struts与spring整合提供的支持包

e、导入hibernate4.2的jar包



hibernate支持jar包的名称jar包的说明
antlr-2.7.7.jar这是一个语言转化工具,Hibernate利用它实现HQL到SQL的转换
dom4j-1.6.1.jardom4j    xml  解析器
hibernate-commons-annotation-4.0.2.Final.jar支持annotation
hibernate-core-4.2.12.Final.jarhibernate4.2的核心库
hibernate-jpa-2.0-api-1.0.1.Final.jarhibernate API
javassist-3.18.1-GA.jar代码生成器,Hibernate用它在运行时扩展java类和实现,同cglib
jboss-logging-3.1.0.GA.jar日志
jboss-transaction-api_1.1_spec-1.0.1Final.jar事务处理


3、现在我们开始创建实体类

-------------------------------------------------------------------------model-----------------------------------------------------------------------------------------------------


package com.phome.modal;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 * 这是实体类
 * @author 欢
 *
 */
@Entity
public class User {
	private int id;
	private String name;

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	
}



---------------------------------------------------------------------Action----------------------------------------------------------------------------------------------------------

package com.phome.action;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionSupport;
import com.phome.IService.ISaveService;
import com.phome.model.Book;

/**
 * 这是struts调用的Action类
 * @author 欢
 *
 */
@Controller
public class SaveAction extends ActionSupport {
	/**
	 * 唯一标识
	 */
	private static final long serialVersionUID = 1L;
	
	private ISaveService saveService;
	
	private Book book;

	public ISaveService getSaveService() {
		return saveService;
	}

	@Autowired
	public void setSaveService(ISaveService saveService) {
		this.saveService = saveService;
	}
	
	public Book getBook() {
		return book;
	}

	public void setBook(Book book) {
		this.book = book;
	}

	/**
	 * action的保存书籍方法
	 * @return
	 */
	public String save () {
		
		System.out.println("Action进入....");
		//调用SaveService的save(Book book)方法
		saveService.save(book);
		
		return SUCCESS;
	}
	
	
}


----------------------------------------------------------IDAO----------------------------------------------------------------------------


package com.phome.dao;

import com.phome.modal.User;

public interface IAddDAO {
	public int add (User user);
}


------------------------------------------------------------DAO--------------------------------------------------------------------------------


package com.phome.dao.imp;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.phome.dao.IAddDAO;
import com.phome.modal.User;

/**
 * 这是一个DAO持久类
 * @author 欢
 *
 */
@Repository
public class AddDAO implements IAddDAO{
	
	private SessionFactory sessionFactory;

	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}


	@Autowired
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}



	@Override
	public int add(User user) {
		
		System.out.println("addDAO()方法进入....");
		
		Session session = (Session) sessionFactory.getCurrentSession();
		session.save(user);
		
		return 0;
	}
	
}


---------------------------------------------------------------------IService--------------------------------------------------------------------------------------------------


package com.phome.service;

import com.phome.modal.User;

public interface IAddService {
	
	public int add(User user);
}


------------------------------------------------------------------Service----------------------------------------------------------------------------------------


package com.phome.service.imp;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.phome.dao.IAddDAO;
import com.phome.modal.User;
import com.phome.service.IAddService;

/**
 * 这是业务类
 * @author 欢
 *
 */
@Service
public class AddService implements IAddService{
	private IAddDAO addDAO;
	
	public IAddDAO getAddDAO() {
		return addDAO;
	}

	@Autowired
	public void setAddDAO(IAddDAO addDAO) {
		this.addDAO = addDAO;
	}

	@Override
	public int add(User user) {
		int num = 0;
		System.out.println("service进入--〉");
		addDAO.add(user);
		return num;
	}

}







4、我们开始创建spring.xml,配置spring.xml文件

a、创建spring.xml文件



b、开始配置spring.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/context
         http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.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">
		
	 <!-- spring支持annotation -->
	 <context:annotation-config></context:annotation-config>
	 
	 <!-- spring 自动扫描 -->
	 <context:component-scan base-package="com.phome"></context:component-scan>
	 
	 <!-- 配置数据库dataSource -->
	 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	 	<property name="driverClass" value="com.mysql.jdbc.Driver" />
	 	<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1/hibernate_test" />
	 	<property name="user" value="root" />
	 	<property name="password" value="admin" />
	 </bean>
	 
	 <!-- 配置hibernateSessionFactory -->
	 <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
	 	<property name="dataSource" ref="dataSource"></property>
	 	
	 	<!-- 配置需要映射的实体类 -->
	 	<property name="annotatedClasses">
	 		<list>
	 			<value>com.phome.model.Book</value>
	 		</list>
	 	</property>
	 	
	 	<!-- 配置hibernate的一些属性 -->
	 	<property name="hibernateProperties">
	 		<value>
	 			hibernate.show_sql=true
	 			hibernate.format_sql=true
	 			hibernate.dialect=org.hibernate.dialect.MySQLDialect
	 			hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
	 			hibernate.hbm2ddl.auto=update
	 		</value>
	 	</property>
	 </bean>
	 
	<!-- 配置事务管理 -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate4.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="save*" propagation="REQUIRED" read-only="false" />
			<tx:method name="*" read-only="true" />
		</tx:attributes>
	</tx:advice>

	<aop:config>
		<aop:pointcut id="allManagerMethod"
			expression="execution(public * com.phome.IService.imp.*.*(..))" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod" />
	</aop:config>
	
</beans>




5、创建struts2.xml文件,并配置strurs2.xml文件

a、创建struts2.xml文件



b、配置struts2.xml文件


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC 
	"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" 
	"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<!-- 打开struts开发开关,显示更多人性化提示信息 -->
	<constant name="struts.devMode" value="false"></constant>
	
	<!-- 修改编码 -->
	<constant name="struts.il8n.encoding" value="UTF-8" ></constant>
	
	<!-- 将struts对action的管理权托管给spring -->
	<constant name="struts.objectFactory" value="spring"></constant>
	
	<!-- 配置action -->
	<package name="action" extends="struts-default" namespace="/action">
		<action name="*_*" class="com.phome.action.{1}Action" method="{2}">
			<result name="success">/success.jsp</result>
		</action>
	</package>

</struts>



6、配置web.xml文件,配置spring,struts2的启动


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>ssh_test</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <!-- 配置spring的启动 -->
  <!-- 1、加载spring的配置文件 -->
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>WEB-INF/spring/spring.xml</param-value>
  </context-param>
  
  <!-- 2、通过监听器启动spring -->
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <!-- 配置struts2的启动 -->
  <!-- 这是第一种配置Struts2的方法 -->
  <!-- <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  	<init-param>
  		<param-name>config</param-name>
  		<param-value>
  			struts-default.xml,
  			struts-plugin.xml,
  			../struts2/struts2.xml
  		</param-value>
  	</init-param>
  </filter>
  
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping> -->
  
  <!-- 这是第二种配置Struts2的方法 -->
  <!-- 1、这里配置一些struts2启动前加载的配置文件 -->
  <filter>
  	<filter-name>struts2p</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
  	<init-param>
  		<param-name>config</param-name>
  		<param-value>
  			struts-default.xml,
  			struts-plugin.xml,
  			../struts2/struts2.xml
  		</param-value>
  	</init-param>
  </filter>
  
  <filter-mapping>
  	<filter-name>struts2p</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <!-- 2、配置第三方过滤器 -->
  <!-- 在这里我们可以配置自己的过滤器,比如编码过滤器等 -->
  
  <!-- 3、配置Struts2的启动过滤器 -->
  <filter>
  	<filter-name>struts2e</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
  </filter>
  
  <filter-mapping>
  	<filter-name>struts2e</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  
</web-app>


7、创建两个测试页面,分别是index.jsp和success.jsp


-----------------------------------------------index.jsp------------------------------------------------------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>填写书籍信息:</h1>
<form action="${pageContext.request.contextPath }/action/Save_save" method="post">
	<p>书籍的名称:</p>
	<input id="book.name" name="book.name" type="text" value="请输入书籍的名称..." /><br />
	<p>书籍的价格:</p>
	<input id="book.price" name="book.price" type="text" value="请输入书籍的价格..." /><br /><br />
	<input type="submit" value="提交" />
</form>
</body>
</html>


-----------------------------------------------success.jsp------------------------------------------------------------


<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<h1>添加书籍成功!</h1>
</body>
</html>


8、测试


启动项目,在浏览器进入



输入书名称,价格,点击提交




页面成功跳转!  

控制台信息如下:






sql语言正确,数据添加成功!项目执行结束。。。


希望对大家有所帮助!谢谢~~


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值