现在的位置: 首页 > 综合 > 正文

Spring+Hibernate+struts整合开发模板

2014年10月23日 ⁄ 综合 ⁄ 共 10387字 ⁄ 字号 评论关闭

整理了好几天,查了好多资料,终于整理好了一个整合方案,实在是因为ssh整合jar总是容易发生冲突错误,来之不易,存下来以备以后需要

配置文件模板

1.web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<!-- 对spring容器实例化 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- 对struts进行配置 -->
	<servlet>
		<servlet-name>struts</servlet-name>
		<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
		<init-param>
			<param-name>config</param-name>
			<param-value>/WEB-INF/struts-config.xml</param-value>
		</init-param>
		<load-on-startup>0</load-on-startup>
	</servlet>
	<servlet-mapping> 
		<servlet-name>struts</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	
	<filter>
		<filter-name>encoding</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

2.struts-config.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-config_1_3.dtd">

<struts-config>
	<form-beans>
		<form-bean name="user" type="edu.gzu.ssh.bean.UserFoemBean"></form-bean>
	</form-beans>
	<action-mappings>
		<action path="/user/list" type="edu.gzu.ssh.action.UserAction" validate="false">
			<forward name="list_show" path="/WEB-INF/page/show_list.jsp"></forward>
		</action>
		
		<action path="/user/add" type="edu.gzu.ssh.action.UserAddForAction" validate="false">
			<forward name="add_show_for" path="/WEB-INF/page/show_add.jsp"></forward>
		</action>
		
		<action path="/user/register" validate="false"
			parameter="method" scope="request" name="user">
			<forward name="register" path="/index.jsp"></forward>
		</action>
	</action-mappings>
	
	<!-- 将action交给spring容器管理 -->
	<controller>
		<set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/>
	</controller>
</struts-config>

3.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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd


http://www.springframework.org/schema/tx


http://www.springframework.org/schema/tx/spring-tx-2.5.xsd


http://www.springframework.org/schema/aop


http://www.springframework.org/schema/aop/spring-aop-2.5.xsd


http://www.springframework.org/schema/context

		http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>
		<property name="url" value="jdbc:mysql://localhost:3306/sshtest?useUnicode=true&characterEncoding=UTF8"/>
		<property name="username" value="root"/>
		<property name="password" value=""/>
		<!-- 连接池启动时的初始值 -->
		<property name="initialSize" value="1"/>
		<!-- 连接池的最大值 -->
		<property name="maxActive" value="500"/>
		<!-- 最大空闲值,当经过一个高峰时间后,连接池可以慢慢释放用不到的连接,直到maxidle为止-->
		<property name="maxIdle" value="2"/>
		<!-- 最小空闲值,当连接池的剩余小于阀值时,连接池会自动生气个链接-->
		<property name="minIdle" value="1"/>
	</bean>
	
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="mappingResources">
			<list>
				<value>edu/gzu/ssh/bean/User.hbm.xml</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<value>
				hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
				hibernate.hbm2ddl.auto=update
				hibernate.show_sql=false
				hibernate.format_sql=false
			</value>
		</property>
	</bean>
	<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	<tx:annotation-driven transaction-manager="txManager"/>
		
	<bean id="UserService" class="edu.gzu.ssh.service.UserServiceImpl">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	 
	<bean name="/user/register" class="edu.gzu.ssh.action.UserAddAction"></bean>
</beans>

 

4.bean对象  MVC之M(model)层  User.java

package edu.gzu.ssh.bean;

public class User{
	private int id;
	private String username;
	private String gender;
	private int stunumber;
	private String classname;
	
	public User() {
		super();
	}
	
	public User(String username, String gender, int stunumber,
			String calssname) {
		super();
		this.username = username;
		this.gender = gender;
		this.stunumber = stunumber;
		this.classname = calssname;
	}//省略geeter和setter
}

5.hibernate配置bean  User.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="edu.gzu.ssh.bean">
	<class name="User" table="user_info">
		<id name="id" column="id" type="int">
			<generator class="native"/>
		</id>
		<property name="username" type="string" column="username"></property>
		<property name="gender" type="string" column="gender"></property>
		<property name="stunumber" type="int" column="stu_number"></property>
		<property name="classname" type="string" column="classname"></property>
	</class>
</hibernate-mapping>

 

6.hibernate接口类 主用于数据库操作UserServiceDao.java   MVC之C(contorler)

package edu.gzu.ssh.Dao;

import java.util.List;

import edu.gzu.ssh.bean.User;



public interface UserServiceDao{
	public void saveUser(User user);
	
	public void deleteUser(Integer id);
	
	public void updateUser(User user);
	
	public User getUser(Integer id);
	
	public List<User> getAllUser();
}

7.hibernate实现类,数据库操作的实例对象UserServiceImpl.java

package edu.gzu.ssh.service;

import java.util.List;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import edu.gzu.ssh.Dao.UserServiceDao;
import edu.gzu.ssh.bean.User;
@Transactional
public class UserServiceImpl implements UserServiceDao {
	@Resource private SessionFactory sessionFactory;
	
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}
	
	public void deleteUser(Integer id) {
		sessionFactory.getCurrentSession().delete(
				sessionFactory.getCurrentSession().load(User.class, id));
	}
	@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
	@SuppressWarnings("unchecked")
	public List<User> getAllUser() {
		return sessionFactory.getCurrentSession().createQuery("from User").list();
	}
	@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
	public User getUser(Integer id) {
		return (User) sessionFactory.getCurrentSession().get(User.class, id);
	}

	public void saveUser(User user) {
		sessionFactory.getCurrentSession().persist(user);
	}

	public void updateUser(User user) {
		sessionFactory.getCurrentSession().merge(user);
	}

}

8.测试类 UserServiceTest.java

package edu.gzu.ssh.Test;

import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.transaction.annotation.Transactional;

import edu.gzu.ssh.Dao.UserServiceDao;
import edu.gzu.ssh.bean.User;
@Transactional
public class UserServiceTest {
	private static UserServiceDao userService;
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		try {
			ApplicationContext applicationContext=
				new ClassPathXmlApplicationContext("applicationContext.xml");
			userService=(UserServiceDao) applicationContext.getBean("UserService");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Test public void  saveTest(){
		User user=new User("张三", "男", 1201021102, "法律学122");
		userService.saveUser(user);
		System.out.print("保存成功!!!");
	}
	
	@Test public void getUser(){
		User user=userService.getUser(2);
		System.out.println("Username:"+user.getUsername());
		System.out.println("Gender:"+user.getGender());
		System.out.println("Stunumber:"+user.getStunumber());
		System.out.println("Classname:"+user.getClassname());
	}
	
	@Test public void updateTest(){
		User user=userService.getUser(1);
		user.setStunumber(1501021102);
		userService.updateUser(user);
		System.out.print("update成功!!!");
	}
	
	@Test  public void getAllTest(){
		List<User> users=userService.getAllUser();
		for(User user:users){
			System.out.println("Username:"+user.getUsername()+
					"   Gender:"+user.getGender()+
					"   Stunumber:"+user.getStunumber()+
					"   Classname:"+user.getClassname());
		}
		
	}
}

9.struts实例 获取数据库所有对象UserAction.java

package edu.gzu.ssh.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import edu.gzu.ssh.Dao.UserServiceDao;
import edu.gzu.ssh.bean.User;

public class UserAction extends Action{
	private UserServiceDao dao;
	
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		ApplicationContext application=new ClassPathXmlApplicationContext("applicationContext.xml");
		dao=(UserServiceDao) application.getBean("UserService");
		List<User> users=dao.getAllUser();
		request.setAttribute("users", users);
		return mapping.findForward("list_show");
	}
	
}

10.jsp显示show_list.jsp  MVC之V(View)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'show_list.jsp' starting page</title>
    
  </head>
  
  <body>
    <center>
    	<h2>已注册用户信息</h2>
    	<table border="1px solid gray">
    		<tr><td>用户ID</td><td>姓名</td><td>性别</td><td>学号</td><td>班级</td></tr>
    		<c:forEach items="${users}" var="user">
    			<tr><td>${user.id }</td><td>${user.username}</td><td>${user.gender}</td>
    			<td>${user.stunumber}</td><td>${user.classname}</td></tr>
    		</c:forEach>
    	</table>
    	<a href="${pageContext.request.contextPath }/index.jsp">返回首页</a>
    	<a href="${pageContext.request.contextPath }/user/add.do">注册新信息</a>
    </center>
  </body>
</html>

 

 

抱歉!评论已关闭.