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:
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:applicationContext.xml
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
2、struts.xml:
/WEB-INF/jsp/index.jsp
3、applicationContext.xml:
org.hibernate.dialect.MySQLDialect
true
true
false
update
cn/itcast/shop/user/vo/User.hbm.xml
【业务逻辑部分-以用户注册为例】
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文件,实现实体类与数据库的关联。
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 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 {
// 模型驱动使用的对象
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("用户名已经存在");
} else {
// 没查询到该用户:用户名可以使用
response.getWriter().println("用户名可以使用");
}
return NONE;
}
/**
* 用户注册的方法:
*/
public String regist() {
userService.save(user);
this.addActionMessage("注册成功,情趣邮箱激活!");
return "msg";
}
}
6.前台的jsp
首先引用struts2的标签
<%@ taglib uri="/struts-tags" prefix="s"%>
然后,在页面设计中调用user_regist.action方法即可
其他一些边边角角的基础代码没有贴出来,大致框架就是这样。