网管

返回首页
当前位置: 网管>编程开发>JAVA>

Struts1.2 + Spring2.0 + Hibernate 3.1 整合 2.0版本

时间:2009-04-07 16:03来源:未知 作者:admin 点击:
开发环境: MyEclipse Blue Edition 版本为 6.5.0 .Blue Milestone-1 MySQL5.0 版 Struts 1.2 版 Spring 2.0 版 Hibernate 3.1 版 在上一次 ( 第一次整合网址: http://www.blogjava.net/zhangsenwei/archive/2008/06/23/210083.html ) 的开发基
  
开发环境:
MyEclipse Blue Edition 版本为 6.5.0.Blue Milestone-1  
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,具体代码如下:
 
package com.address.hibernate.dao;
 
import java.util.List;
 
import com.address.hibernate.beans.Linkman;
 
publicinterface IAddressDAO {
    // 添加一个联系人
    publicvoid addLinkMan(Linkman linkman);
 
    // 删除一个联系人
    publicvoid delete(String id);
 
    // 修改一个联系人
    publicvoid 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;
 
publicclass AddressDAO extends HibernateDaoSupport implements IAddressDAO{
    // 添加一个联系人
    publicvoid addLinkMan(Linkman linkman) {
       this.getHibernateTemplate().save(linkman);
    }
 
    // 删除一个联系人
    publicvoid delete(String id) {
       Object p = this.getHibernateTemplate().load(Linkman.class,
              new Integer(id));
       this.getHibernateTemplate().delete(p);
    }
 
    // 修改一个联系人
    publicvoid 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包中新建一个类
  
 4、为这个起个名字为:BaseAction
  
5这个类中可以将一些公用的方法进行抽取出来,比如相对session的操作我们可以进行一下封装或者对reqeust进行一下封装。具体代码如下:
 
package com.address.struts.action;
 
import javax.servlet.http.HttpServletRequest;
 
import org.apache.struts.actions.DispatchAction;
/*
 * 这个类中可以将一些公用的方法进行抽取出来,比如相对session的操作我们可以进行一下封装或者
 * reqeust进行一下封装。
 */
publicclass BaseAction extends DispatchAction {
 
 
    /**
     *设置request的属性
     *
     *@paramrequest
     *@paramkey
     *@paramobj
     */
    protectedvoid setRequest(HttpServletRequest request, String key, Object obj) {
       request.setAttribute(key, obj);
    }
    /**
     *判断某个值是否在request中存在
     *
     *@paramrequest
     *@paramkey
     *@paramobj
     */
    protectedboolean isExistRequest(HttpServletRequest request, String key) {
       if (request.getAttribute(key) != null) {
           returntrue;
       } else {
           returnfalse;
       }
    }
    /**
     *获取request中某个值
     *
     *@paramrequest
     *@paramkey
     *@return
     */
    protected Object getRequest(HttpServletRequest request, String key) {
       return request.getAttribute(key);
    }
 
 
    /**
     *设置session的属性
     *
     *@paramrequest
     *@paramkey
     *@paramobj
     */
    protectedvoid setSession(HttpServletRequest request, String key, Object obj) {
       request.getSession().setAttribute(key, obj);
    }
 
    /**
     *判断某个值是否在session中存在
     *
     *@paramrequest
     *@paramkey
     *@paramobj
     */
    protectedboolean isExistSession(HttpServletRequest request, String key) {
       if (request.getSession().getAttribute(key) != null) {
           returntrue;
       } else {
           returnfalse;
       }
    }
 
    /**
     *获取session中某个值
     *
     *@paramrequest
     *@paramkey
     *@return
     */
    protected Object getSession(HttpServletRequest request, String key) {
       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;
         }
 
         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 添加下面这段配置事务的代码:
    <!-- 配置事务 -->
    <bean id="transactionManager"
       class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       <property name="sessionFactory">
           <ref local="sessionFactory" />
       </property>
    </bean>
 
 
 
 
10、在 applicationContext.xml 中加入下面代码进行定义 DAO 代理:
 
    <!-- 定义DAO代理 -->
    <bean id="addressDAOProxy"
       class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
       <property name="transactionManager">
           <ref bean="transactionManager" />
       </property>
       <property name="target">
           <ref local="addressDAO" />
       </property>
       <property name="transactionAttributes">
           <props>
              <prop key="insert*">PROPAGATION_REQUIRED</prop>
              <prop key="update*">PROPAGATION_REQUIRED</prop>
              <prop key="delete*">PROPAGATION_REQUIRED</prop>
              <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
           </props>
       </property>
    </bean>
 
 
 
 
11 applicationContext.xml 中加入下面代码进行配置******代理:
<!-- 配置****** -->
<bean name="logger" class="com.address.aop.LoggingInterceptor" />
 
 
<!-- 配置******代理 -->
    <bean name="loggingAutoProxy"
       class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
       <property name="beanNames">
           <list>
              <value>/address</value>
           </list>
       </property>
       <property name="interceptorNames">
           <list>
              <value>logger</value>
           </list>
       </property>
    </bean>
 
12、打开 struts-config.xml 文件在action中加入一个属性parameter="method"

注意此处
 

 
 
 
 
 
 
 
 
 

addLinkMan是struts ActionBean中 的方法名称
13、打开address.jsp页面,修改action的提交路径具体如下图所示

method是struts-config.xml中parameter的值
 

 
 
 至此我们所开发的 SSH 框架就修改完成了,如果在整合或提升过程中有什么问题,可以给我留言。
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容