Struts1¸2 + Spring2¸0 + Hibernate 3¸1 整合 2¸0版本
SSH整合2.0版 作者:张森炜
Struts1.2 + Spring2.0 + Hibernate 3.1 整合 2.0版本 开发环境:
MyEclipse Blue Edition 版本为 6.5.0.Blue Milestone-1 MySQL 5.0版
Struts 1.2版
Spring 2.0版
Hibernate 3.1版
在上一次 (第一次整合网址:) 的开发基础之上,这次我们对上次整合后的SSH框架进行一下系统提升,这次的提升主要对框架进行了以下3处的完善 (1)建立公共函数类
(2)加入DAO适配器
(3)加入事务和拦截器
1、在com.address.hibernate.dao 包中新建一个接口,接口的名字为 IAddressDAO,具体代码如下:
package com.address.hibernate.dao;
import java.util.List;
import com.address.hibernate.beans.Linkman;
public interface IAddressDAO {
// 添加一个联系人
public void addLinkMan(Linkman linkman);
// 删除一个联系人
public void delete(String id);
// 修改一个联系人
public void update(Linkman linkman);
// 获取所有联系人
public List getAllLinkman();
// 根据ID获取一个联系人
public Linkman getLinkman(String linkmanid);
}
2、让com.address.hibernate.dao 包中的AddressDAO类实现 IAddressDAO接口,具体代码如下:
package com.address.hibernate.dao;
import java.util.List;
import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.address.hibernate.beans.Linkman;
public class AddressDAO extends HibernateDaoSupport implements
SSH整合2.0版 作者:张森炜
IAddressDAO{
// 添加一个联系人
public void addLinkMan(Linkman linkman) {
this.getHibernateTemplate().save(linkman);
}
// 删除一个联系人
public void delete(String id) {
Object p = this.getHibernateTemplate().load(Linkman.class,
new Integer(id));
this.getHibernateTemplate().delete(p);
}
// 修改一个联系人
public void update(Linkman linkman) {
this.getHibernateTemplate().update(linkman);
}
// 获取所有联系人
public List getAllLinkman() {
return getHibernateTemplate().find("from Linkman");
}
// 根据ID获取一个联系人
public Linkman getLinkman(String linkmanid) {
return (Linkman) getHibernateTemplate().get(Linkman.class,
new Integer(linkmanid));
}
}
3、在com.address.struts.action包中新建一个类
SSH整合2.0版 作者:张森炜
4、为这个起个名字为:BaseAction
5、这个类中可以将一些公用的方法进行抽取出来,比如相对session的操作我们可以进行一下封装或者对reqeust进行一下封装。具体代码如下:
package com.address.struts.action;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.actions.DispatchAction; /*
* 这个类中可以将一些公用的方法进行抽取出来,比如相对session的操作我们可以进行一下
封装或者
* 对reqeust进行一下封装。
*/
public class BaseAction extends DispatchAction {
/**
* 设置 request 的属性
*
* @param request
* @param key
* @param obj
*/
protected void setRequest(HttpServletRequest request, String key,
Object obj) {
request.setAttribute(key, obj);
}
/**
* 判断某个值是否在 request 中存在
*
* @param request
SSH整合2.0版 作者:张森炜
* @param key
* @param obj
*/
protected boolean isExistRequest(HttpServletRequest request, String
key) {
if (request.getAttribute(key) != null) {
return true;
} else {
return false;
}
}
/**
* 获取 request 中某个值
*
* @param request
* @param key
* @return
*/
protected Object getRequest(HttpServletRequest request, String key)
{
return request.getAttribute(key);
}
/**
* 设置 session 的属性
*
* @param request
* @param key
* @param obj
*/
protected void setSession(HttpServletRequest request, String key,
Object obj) {
request.getSession().setAttribute(key, obj);
}
/**
* 判断某个值是否在 session 中存在
*
* @param request
* @param key
* @param obj
*/
protected boolean isExistSession(HttpServletRequest request, String
key) {
if (request.getSession().getAttribute(key) != null) {
return true;
} else {
return false;
}
}
/**
* 获取 session 中某个值
*
* @param request
* @param key
* @return
*/
protected Object getSession(HttpServletRequest request, String key)
SSH整合2.0版 作者:张森炜 {
return request.getSession().getAttribute(key);
}
}
6、打开com.address.struts.action 包修改 AddressAction 类,修改后的详细代码如下: package com.address.struts.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 com.address.hibernate.dao.IAddressDAO; import com.address.hibernate.beans.Linkman; import com.address.hibernate.dao.AddressDAO; import com.address.struts.form.AddressForm; public class AddressAction extends BaseAction { private IAddressDAO addressDAO = null; // 添加联系人
public ActionForward addLinkMan(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { AddressForm addressForm = (AddressForm) form; Linkman linkman = new Linkman(); linkman.setUserName(addressForm.getUserName()); linkman.setUserPhone(addressForm.getUserPhone()); linkman.setUserAddress(addressForm.getUserAddress()); this.getAddressDAO().addLinkMan(linkman); return mapping.findForward("success"); } // 修改联系人
public ActionForward updateLinkMan(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { Linkman linkman = new Linkman(); linkman.setUserName(linkman.getUserName()); linkman.setUserPhone(linkman.getUserPhone()); linkman.setUserAddress(linkman.getUserAddress()); this.getAddressDAO().update(linkman); return mapping.findForward("success"); } // 删除联系人
public ActionForward delLinkMan(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { this.getAddressDAO().delete((String)this.getRequest(request, "linkmanid")); return mapping.findForward("success"); } // 获取所有联系人信息
public ActionForward getAllLinkMan(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { List list = this.getAddressDAO().getAllLinkman(); request.setAttribute("linkManList", list); return mapping.findForward("success"); } public IAddressDAO getAddressDAO() { return addressDAO; }
SSH整合2.0版 作者:张森炜
public void setAddressDAO(IAddressDAO addressDAO) { this.addressDAO = addressDAO; } }
7、新建一个包名字叫做 com.address.aop
8、在com.address.aop 包下创建一个代理类,名字为: LoggingInterceptor 具体代码如下:
package com.qhit.aop; import org.springframework.aop.MethodBeforeAdvice; import java.lang.reflect.Method; public class LoggingInterceptor implements MethodBeforeAdvice { public void before(Method method, Object[] objects, Object o) throws Throwable { System.out.println("logging before: " + o.getClass()); } }
9、打开applicationContext.xml 添加下面这段配置事务的代码:
10、在 applicationContext.xml 中加入下面代码进行定义 DAO 代理:
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED,readOnly
SSH整合2.0版 作者:张森炜
11、在 applicationContext.xml 中加入下面代码进行配置拦截器代理:
/address
logger
12、打开 struts-config.xml 文件在action中加入一个属性 parameter="method"
注意此处
13、打开address.jsp页面,修改action的提交路径具体如下图所示
addLinkMan是struts ActionBeanmethod是struts-config.xml中parameter的值 中 的方法名称
至此我们所开发的 SSH 框架就修改完成了,如果在整合或提升过程中有什么问题,可以给我留言。