SSHstruts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。

【框架介绍】

Spring

   单单说SpringSSH中的作用。①管理Struts:在xml配置文件中为strutsaction进行注入。②管理hibernate:在xml配置文件中配置hibernate的配置信息(dataSourcesessionFactory),为hibernatedao操作注入sessionFactory属性值。

Struts

   用来响应用户的action,对应到相应的类进行处理。

Hibernate

   用来把实体类对应到数据库。提供增删改查的基本底层操作。

【搭建开发环境--jar包】

SpringStrutsHibernate相关的jar包,springstruts整合的包,以及mysqljdbc驱动包。

Struts:

jar:

struts-2.3.15.3\apps\struts2-blank.war\WEB-INF\lib\*.jar

struts-2.3.15.3\lib\struts2-json-plugin-2.3.15.3.jar

struts-2.3.15.3\lib\struts2-spring-plugin-2.3.15.3.jar

 

Spring:

<Spring3.2开发最基本jar>

spring-beans-3.2.0.RELEASE.jar

spring-context-3.2.0.RELEASE.jar

spring-core-3.2.0.RELEASE.jar

spring-expression-3.2.0.RELEASE.jar

com.springsource.org.apache.commons.logging-1.1.1.jar

com.springsource.org.apache.log4j-1.2.15.jar

<AOP开发>

spring-aop-3.2.0.RELEASE.jar

spring-aspects-3.2.0.RELEASE.jar

com.springsource.org.aopalliance-1.0.0.jar

com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

<Spring Jdbc开发>

spring-jdbc-3.2.0.RELEASE.jar

spring-tx-3.2.0.RELEASE.jar

<Spring事务管理>

spring-tx-3.2.0.RELEASE.jar

<Spring整合其他ORM框架>

spring-orm-3.2.0.RELEASE.jar

<Springweb中使用>

spring-web-3.2.0.RELEASE.jar

<Spring整合Junit测试>

spring-test-3.2.0.RELEASE.jar

 

Hibernate:

jar:

hibernate-distribution-3.6.10.Final\hibernate3.jar

hibernate-distribution-3.6.10.Final\lib\required\*.jar

hibernate-distribution-3.6.10.Final\lib\jpa\*.jar

【搭建开发环境--配置文件】

1Web.xml

<!-- 配置Spring的核心监听器:监听器在创建时自动查找WEB-INF下的applicationContext.xml文件,从而创建spring容器-->
<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>
 
<!-- 配置Struts2的核心过滤器-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

 <!--下面的配置表示对于所有的请求都交给struts来处理 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

2struts.xml:

<struts>
<constantname="struts.devMode" value="false" />
<packagename="shop" extends="struts-default"namespace="/">
<!-- 配置首页访问的Action -->
<actionname="index" class="indexAction">
<resultname="index">/WEB-INF/jsp/index.jsp</result>
</action>
</package>
</struts>

3applicationContext.xml

 

<!-- 配置连接池:-->
<!-- 引入外部属性文件-->
<context:property-placeholderlocation="classpath:jdbc.properties" />
<!-- 配置C3P0连接池: -->
<beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource">
<propertyname="driverClass" value="${jdbc.driver}" />
<propertyname="jdbcUrl" value="${jdbc.url}" />
<propertyname="user" value="${jdbc.user}" />
<propertyname="password" value="${jdbc.password}" />
</bean>
 
<!-- Hibernate的相关信息 -->
<beanid="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 注入连接池-->
<propertyname="dataSource" ref="dataSource" />
<!-- 配置Hibernate的其他的属性 -->
<propertyname="hibernateProperties">
<props>
<propkey="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<propkey="hibernate.show_sql">true</prop>
<propkey="hibernate.format_sql">true</prop>
<propkey="hibernate.connection.autocommit">false</prop>
<propkey="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- 配置Hibernate的映射文件 -->
<propertyname="mappingResources">
<list>
<value>cn/itcast/shop/user/vo/User.hbm.xml</value>
</list>
</property>
 
</bean>
 
<!-- 事务管理:-->
<!-- 事务管理器-->
<beanid="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<propertyname="sessionFactory" ref="sessionFactory" />
</bean>
 
<!-- 开启注解事务-->
<tx:annotation-driventransaction-manager="transactionManager" />
 
<!-- ********************Action的配置******************** -->
 
<!-- 首页访问的Action-->
<beanid="indexAction"class="cn.itcast.shop.index.action.IndexAction"
scope="prototype"></bean>
 
<!-- 用户模块的Action-->
<beanid="userAction"class="cn.itcast.shop.user.action.UserAction"
scope="prototype">
<!-- 注入Service-->
<propertyname="userService" ref="userService" />
</bean>
 
<!-- ********************Service的配置******************** -->
<beanid="userService"class="cn.itcast.shop.user.service.UserService">
<propertyname="userDao" ref="userDao" />
</bean>
 
<!-- ********************Dao的配置******************** -->
<beanid="userDao" class="cn.itcast.shop.user.dao.UserDao">
<propertyname="sessionFactory"ref="sessionFactory"></property>
</bean>
</beans>
【业务逻辑部分-以用户注册为例】

1.首先完成hibernate的操作部分。设计一个User实体类,该类中包含数据库中User表的所有字段。

package cn.itcast.shop.user.vo;
/**
 * 用户模块实体类
 * @author happy
 *
 */
public class User {

	public Integer getUid() {
		return uid;
	}
	public void setUid(Integer uid) {
		this.uid = uid;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public Integer getState() {
		return state;
	}
	public void setState(Integer state) {
		this.state = state;
	}
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	private Integer uid;
	private String username;
	private String password;
	private String name;
	private String email;
	private String phone;
	private String addr;
	private Integer state;
	private String code;
}
2.新建一个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.itcast.shop.user.vo.User" table="user">
		<id name="uid">
			<generator class="native"/>
		</id>
		<property name="username"/>
		<property name="password"/>
		<property name="name"/>
		<property name="email"/>
		<property name="phone"/>
		<property name="addr"/>
		<property name="state"/>
		<property name="code"/>
	</class>
</hibernate-mapping>
3.接下来实现Dao层的操作。设计一个类UserDao,继承了HibernateDaoSupport类。

package cn.itcast.shop.user.dao;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import cn.itcast.shop.user.vo.User;

/**
 * 用户模块持久层代码
 * 
 * @author happy
 * 
 */
public class UserDao extends HibernateDaoSupport {
	// 按名称查询是否有该用户:
	public User findByUsername(String username) {
		String hql = "from User where username = ?";
		List<User> list = this.getHibernateTemplate().find(hql, username);
		if (list != null && list.size() > 0) {
			return list.get(0);
		}
		return null;
	}

	// 注册用户存入数据库代码实现
	public void save(User user) {
		this.getHibernateTemplate().save(user);
	}
}

4.接下来Service层的操作。

package cn.itcast.shop.user.service;

import org.springframework.transaction.annotation.Transactional;

import cn.itcast.shop.user.dao.UserDao;
import cn.itcast.shop.user.vo.User;
import cn.itcast.shop.utils.MailUitls;
import cn.itcast.shop.utils.UUIDUtils;

/**
 * 用户模块业务层代码
 * 
 * @author happy
 * 
 */
@Transactional
public class UserService {
	// 注入UserDao
	private UserDao userDao;

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

	// 按用户名查询用户的方法:
	public User findByUsername(String username) {
		return userDao.findByUsername(username);
	}

	//业务层完成用户注册代码:
	public void save(User user) {
		//将数据存入到数据库
		user.setState(0);//0代表用户未激活,1代表用户已经激活
		String code=UUIDUtils.getUUID()+UUIDUtils.getUUID();
		user.setCode(code);
		userDao.save(user);
	}

}
5.定义UserAction类。

package cn.itcast.shop.user.action;

import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import cn.itcast.shop.user.service.UserService;
import cn.itcast.shop.user.vo.User;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

/**
 * 用户模块Action的类
 * 
 * @author happy
 * 
 */
public class UserAction extends ActionSupport implements ModelDriven<User> {
	// 模型驱动使用的对象
	private User user = new User();
	// 注入UserService
	private UserService userService;

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

	public User getModel() {
		return user;
	}

	/**
	 * 跳转到注册页面的执行方法
	 */
	public String registPage() {
		return "registPage";
	}

	/**
	 * AJAX进行一步校验用户名的执行方法
	 * 
	 * @throws IOException
	 */
	public String findByName() throws IOException {
		// 调用Service进行查询
		User existUser = userService.findByUsername(user.getUsername());
		// 获得response对象,向叶面输出:
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("text/html;charset=UTF-8");
		// 判断
		if (existUser != null) {
			// 查询到该用户:用户名已经存在
			response.getWriter().println("<font color='red'>用户名已经存在</font>");
		} else {
			// 没查询到该用户:用户名可以使用
			response.getWriter().println("<font color='green'>用户名可以使用</font>");
		}
		return NONE;
	}

	/**
	 * 用户注册的方法:
	 */
	public String regist() {
		userService.save(user);
		this.addActionMessage("注册成功,情趣邮箱激活!");
		return "msg";
	}
}
6.前台的jsp

      首先引用struts2的标签

<!-- 引用struts2的标签 -->
<%@ taglib uri="/struts-tags" prefix="s"%>

      然后,在页面设计中调用user_regist.action方法即可

<form id="registerForm"
						action="${pageContext.request.contextPath}/user_regist.action "
						method="post" novalidate="novalidate"
						οnsubmit="return checkForm()">

        其他一些边边角角的基础代码没有贴出来,大致框架就是这样。






Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐