SSH整合2.0版 作者:张森炜
Struts1.2 + Spring2.0 + Hibernate 3.1 整合 2.0版本
开发环境:
MyEclipse Blue Edition 版本为
MySQL 5.0版 Struts 1.2版 Spring 2.0版 Hibernate 3.1版
在上一次 (第一次整合网址:http://www.blogjava.net/zhangsenwei/archive/2008/06/23/210083.html) 的开发基础之上,这次我们对上次整合后的SSH框架进行一下系统提升,这次的提升主要对框架进行了以下3处的完善 (1)建立公共函数类 (2)加入DAO适配器 (3)加入事务和
1、在com.address.hibernate.dao 包中新建一个接口,接口的名字为 IAddressDAO,具体代码如下:
6.5.0.Blue Milestone-1
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\ return mapping.findForward(\"success\"); } public IAddressDAO getAddressDAO() { return addressDAO; }
SSH整合2.0版 作者:张森炜
}
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 添加下面这段配置事务的代码:
public void setAddressDAO(IAddressDAO addressDAO) { this.addressDAO = addressDAO; }
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的提交路径具体如下图所示 method是struts-config.xml中parameter的值
addLinkMan是struts ActionBean中 的方法名称 至此我们所开发的 SSH 框架就修改完成了,如果在整合或提升过程中有什么问题,可以给我留言。