转自:http://blog.csdn.net/u013036274/article/details/51995092
SSH为struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。
【框架介绍】
Spring:
单单说Spring在SSH中的作用。①管理Struts:在xml配置文件中为struts的action进行注入。②管理hibernate:在xml配置文件中配置hibernate的配置信息(dataSource,sessionFactory),为hibernate的dao操作注入sessionFactory属性值。
Struts:
用来响应用户的action,对应到相应的类进行处理。
Hibernate:
用来把实体类对应到数据库。提供增删改查的基本底层操作。
【搭建开发环境--jar包】
Spring、Struts、Hibernate相关的jar包,spring和struts整合的包,以及mysql的jdbc驱动包。
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
<Spring在web中使用>
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
【搭建开发环境--配置文件】
1、Web.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>
2、struts.xml:
- <struts>
- <constantnameconstantname="struts.devMode" value="false" />
- <packagenamepackagename="shop" extends="struts-default"namespace="/">
- <!-- 配置首页访问的Action -->
- <actionnameactionname="index" class="indexAction">
- <resultnameresultname="index">/WEB-INF/jsp/index.jsp</result>
- </action>
- </package>
- </struts>
3、applicationContext.xml:
- <!-- 配置连接池:-->
- <!-- 引入外部属性文件-->
- <context:property-placeholderlocationcontext:property-placeholderlocation="classpath:jdbc.properties" />
- <!-- 配置C3P0连接池: -->
- <beanidbeanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource">
- <propertynamepropertyname="driverClass" value="${jdbc.driver}" />
- <propertynamepropertyname="jdbcUrl" value="${jdbc.url}" />
- <propertynamepropertyname="user" value="${jdbc.user}" />
- <propertynamepropertyname="password" value="${jdbc.password}" />
- </bean>
- <!-- Hibernate的相关信息 -->
- <beanidbeanid="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <!-- 注入连接池-->
- <propertynamepropertyname="dataSource" ref="dataSource" />
- <!-- 配置Hibernate的其他的属性 -->
- <propertynamepropertyname="hibernateProperties">
- <props>
- <propkeypropkey="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
- <propkeypropkey="hibernate.show_sql">true</prop>
- <propkeypropkey="hibernate.format_sql">true</prop>
- <propkeypropkey="hibernate.connection.autocommit">false</prop>
- <propkeypropkey="hibernate.hbm2ddl.auto">update</prop>
- </props>
- </property>
- <!-- 配置Hibernate的映射文件 -->
- <propertynamepropertyname="mappingResources">
- <list>
- <value>cn/itcast/shop/user/vo/User.hbm.xml</value>
- </list>
- </property>
- </bean>
- <!-- 事务管理:-->
- <!-- 事务管理器-->
- <beanidbeanid="transactionManager"
- class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <propertynamepropertyname="sessionFactory" ref="sessionFactory" />
- </bean>
- <!-- 开启注解事务-->
- <tx:annotation-driventransaction-managertx:annotation-driventransaction-manager="transactionManager" />
- <!-- ********************Action的配置******************** -->
- <!-- 首页访问的Action-->
- <beanidbeanid="indexAction"class="cn.itcast.shop.index.action.IndexAction"
- scope="prototype"></bean>
- <!-- 用户模块的Action-->
- <beanidbeanid="userAction"class="cn.itcast.shop.user.action.UserAction"
- scope="prototype">
- <!-- 注入Service-->
- <propertynamepropertyname="userService" ref="userService" />
- </bean>
- <!-- ********************Service的配置******************** -->
- <beanidbeanid="userService"class="cn.itcast.shop.user.service.UserService">
- <propertynamepropertyname="userDao" ref="userDao" />
- </bean>
- <!-- ********************Dao的配置******************** -->
- <beanidbeanid="userDao" class="cn.itcast.shop.user.dao.UserDao">
- <propertynamepropertyname="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;
- }
- <?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>
- 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);
- }
- }
- 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";
- }
- }
首先引用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"
- onsubmit="return checkForm()">
其他一些边边角角的基础代码没有贴出来,大致框架就是这样。