您现在的位置:首页 >> Web开发 >> Web基础 >> 内容

ssh整合方法二学习--Java免费学习网

时间:2015-3-19 17:00:20

  核心提示:Spring作为一个j2ee框架,可以方便的和其他框架集成,struts作为现在使用很广泛的web框架,可以方便的和spring集成Struts 和 Spring 整合的方法有下面三种:使用 Spri...
Spring作为一个j2ee框架,可以方便的和其他框架集成,struts作为现在使用很广泛的web框架,可以方便的和spring集成
 

Struts 和 Spring 整合的方法有下面三种:
使用 Spring 的 ActionSupport 类整合 Structs
使用 Spring 的DelegatingRequestProcessor覆盖 Struts 的 RequestProcessor
将 Struts Action 管理委托给 Spring 框架
 
 
 
第一步:装载应用程序环境
 

无论您使用哪种技术,都需要使用 Spring 的 ContextLoaderPlugin 为 Struts 的 ActionServlet 装载 Spring 应用程序环境。就像添加任何其他插件一样,简单地向您的 struts-config.xml 文件添加该插件,如下所示:
 
<plug-in className=“org.springframework.web.struts.ContextLoaderPlugIn”> <set-property property=“contextConfigLocation” value=“/WEB-INF/beans.xml”/></plug-in>
 
 
 

                        方法1:使用 Spring的 ActionSupport
 

在我们编写action的时候,继承spring中action对应的ActionSupport (DispatchActionSupport)类,在这个类中间可以使用下面的方法来得到spring容器所管理的javabean对象
 
beans>
<bean id="UserDAO"     class="com.yd.imp.UserDAOImp">
</bean>
</beans
 
public class RegistAction extends ActionSupport {
  UserDAO ud;
  public ActionForward execute(ActionMapping mapping,           ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
           RegistForm rf = (RegistForm) form;
//通过spring容器得到action对象
       ud=(UserDAO)    getWebApplicationContext().getBean("UserDAO");
boolean b=ud.addUser(rf.getUsername(), rf.getPwd());
if(b)
      return mapping.findForward("success");
else
      return mapping.findForward("failure");
}
}
 

这种技术很简单并且易于理解。不幸的是,它将 Struts 动作与 Spring 框架耦合在一起。如果您想替换掉 Spring,那么您必须重写代码。并且,由于 Struts 动作不在 Spring 的控制之下,所以它不能获得 Spring AOP 的优势。当使用多重独立的 Spring 环境时,这种技术可能有用,但是在大多数情况下,这种方法不如另外两种方法合适。
 

 
                       方法2:覆盖 RequestProcessor
将 Spring 从 Struts 动作中分离是一个更巧妙的设计选择。分离的一种方法是使用 org.springframework.web.struts.DelegatingRequestProcessor 类来覆盖 Struts 的 RequestProcessor 处理程序
 
struts-config.xml中间增加请求处理器配置:
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>
 其他地方不要做修改
 
Action和formbean的写法不变
但是对action对象中需要的后台业务bean,我们通过配置文件,使用依赖注入的方式将后台业务bean注入到action中间
 
public class RegistAction extends Action{
UserDAO ud;
public ActionForward ……..) {
    RegistForm rf = (RegistForm) form;
//ud对象不用再获取,在得到action对象的时候就注入进来了
    boolean b=ud.addUser(rf.getUsername(), rf.getPwd());
    if(b)
         return mapping.findForward("success");
   else
        return mapping.findForward("failure");
   }
public void setUd(UserDAO ud) {//供spring框架注入进来
        this.ud = ud;
   }
}
 

<bean id="UserDAO" class="com.yd.imp.UserDAOImp">
</bean>
 
<!-- 这个name名字和struts-config.xml中间的action元素的path相一致-->
<bean name="/regist" class="com.yd.struts.action.RegistAction">
<!-- 注入对应的属性 -->
<property name="ud">
<ref bean="UserDAO"/>
</property>
</bean>
 
                                方法3:将动作管理委托给 Spring
一个更好的解决方法是将 Strut 动作管理委托给 Spring。您可以通过在 struts-config 动作映射中注册一个代理来实现。代理负责在 Spring 环境中查找 Struts 动作。由于动作在 Spring 的控制之下,所以它可以填充动作的 JavaBean 属性,并为应用诸如 Spring 的 AOP 拦截器之类的特性带来了可能。
 
struts-config.xml发生变化,不用 请求处理器,修改对应的action的type就可以了,:
 <action
      attribute="registForm"
      input="/form/regist.jsp"
      name="registForm"
      path="/regist"
      scope="request"      type="org.springframework.web.struts.DelegatingActionProxy">
      <forward name="success" path="/form/success.jsp" />
      <forward name="failure" path="/form/failure.jsp" />
    </action>
 
Action和formbean的写法不变
但是对action对象中需要的后台业务bean,我们通过配置文件,使用依赖注入的方式将后台业务bean注入到action中间,和第二种方式一样
 
public class RegistAction extends Action{
UserDAO ud;
public ActionForward ……..) {
    RegistForm rf = (RegistForm) form;
//ud对象不用再获取,在得到action对象的时候就注入进来了
    boolean b=ud.addUser(rf.getUsername(), rf.getPwd());
    if(b)
         return mapping.findForward("success");
   else
        return mapping.findForward("failure");
   }
public void setUd(UserDAO ud) {//供spring框架注入进来
        this.ud = ud;
   }
}
 
<bean id="UserDAO" class="com.yd.imp.UserDAOImp">
</bean>
 
<!-- 这个name名字和struts-config.xml中间的action元素的path相一致-->
<bean name="/regist" class="com.yd.struts.action.RegistAction">
<!-- 注入对应的属性 -->
<property name="ud">
<ref bean="UserDAO"/>
</property>
</bean>
 
动作委托解决方法是这三种方法中最好的。Struts 动作不了解 Spring,不对代码作任何改变就可用于非 Spring 应用程序中。RequestProcessor 的改变不会影响它,并且它可以利用 Spring AOP 特性的优点。
 
Spring自己没有提供orm技术,但是spring可以很好的和其他的orm技术进行结合,例如和hibernate, spring容器可以管理hibernate,通过spring,我们比较方便的将我们的javabean来和hibernate结合在一起
 
                 HibernateTemplate
org.springframework.orm.hibernate3.HibernateTemplate
该类是spring封装了操作Hibernate的实现细节的类
用于代替Session的相关操作
主要方法: 
Serializable save(Object?entity) :保存记录
void update(Object?entity) :修改记录
void delete(Object?entity) :删除记录
Object get(Class?entityClass, Serializable?id)
Object load(Class?entityClass, Serializable?id)
List executeFind(HibernateCallback?action) :查询,返回集合
Object execute(HibernateCallback?action):查询,返回对象
总的说来,该类的方法和Session接口中定义的方法是一致的.
 

                  HibernateDaoSupport
org.springframework.orm.hibernate3.support.HibernateDaoSupport
该类用于对DAO提供支持
编写通用接口的实现类时必须继承该类.
重要方法
?HibernateTemplate getHibernateTemplate() 获得HibernateTemplate对象,能过该对象完成数据基本操作.
 

Spring结合hibernate有两种方式:
1:编写HibernateDaoSupport的子类,在其中可以通过super. getHibernateTemplate() 得到HibernateTemplate对象来进行操作.
2:编写javabean,将一个HibernateTemplate对象注入其中.在其中通过HibernateTemplate来进行操作.
 

基本分为以下几个步骤
配置数据源
配置LocalSessionFactoryBean,指定Hibernate的配置信息,如pojo的配置文件的位置,hibernate属性设置
配置HibernateTemplate
 
<bean id=“dataSource” class=“org.apache.commons.dbcp.BasicDataSource”><!– 连接池 -->
 <property name="driverClassName">
  <value>com.mysql.jdbc.Driver</value>
 </property>
 <property name="url">
  <value>jdbc:mysql://127.0.0.1:3306/test</value>
 </property>
 <property name="username">
  <value>root</value>
 </property>
 <property name="password">
  <value>888888</value>
 </property>
</bean>
 

<bean id="sessionFactory"  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
   <ref bean="ds" />
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">     org.hibernate.dialect.MySQLDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
   </props>
  </property>
  <property name="mappingResources">
   <list>
    <value>com/yd/pojos/Dep.hbm.xml</value>   <value>com/yd/pojos/Users.hbm.xml</value>
   </list>
  </property>
 </bean>
 

通过配置一个sessionFactory,创建一个HibernateTemplate对象
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
 <property name="sessionFactory">
  <ref bean="sessionFactory"/>
 </property>
</bean>
 
 
 
1:继承HibernateDaoSupport
public class ComDAOIMP extends HibernateDaoSupport
{
public boolean deleteById(Class cl, Serializable id) {
 try {
  Object ob=super.getHibernateTemplate().get(cl, id);
  return this.delete(ob);
 } catch (Exception e) {
  e.printStackTrace();
  return false;
 }
}
}
 
配置注入一个HibernateTemplate
给继承了HibernateDaoSupport的对象我们需要注入对应的hibernateTemplate对象
<bean name=" ComDAOIMP" class="com.yd.imp. ComDAOIMP">
 <property name="hibernateTemplate">
  <ref bean="hibernateTemplate"/>
 </property>
</bean>
 
配置注入一个sessionFactory
 
给继承了HibernateDaoSupport的对象我们注入一个sessionFactory 对象也可以,他会自动生成一个hibernateTemplate对象
 
<bean name=" ComDAOIMP " class="com.yd.imp.ComDAOIMP ">
 <property name="sessionFactory">
  <ref bean="sessionFactory"/>
 </property>
</bean>
 
通过代码演示两种javabean的写法
2:内部有一个HibernateTemplate 对象
public class ComDAOIMP{
Private HibernateTemplate  hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
 return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
 this.hibernateTemplate = hibernateTemplate;
}
public boolean deleteById(Class cl, Serializable id) {
 try {
  Object ob=this.getHibernateTemplate().get(cl, id);
  return this.delete(ob);
 } catch (Exception e) {
  e.printStackTrace();
  return false;
 }
}}
 
配置注入一个HibernateTemplate
给刚才这个对象我们需要注入对应的hibernateTemplate对象
<bean name=" ComDAOIMP" class="com.yd.imp. ComDAOIMP">
 <property name="hibernateTemplate">
  <ref bean="hibernateTemplate"/>
 </property>
</bean>
 
复杂点的操作
public boolean checkUser(final VOUser ub) {
 try {
     List ls = (List) this.getHibernateTemplate().execute(
     new HibernateCallback() {
         public Object doInHibernate(Session session)
  throws HibernateException, SQLException {
  Query qy = session.createQuery("from Users u where u.username=:username and u.pwd=:pwd");
  qy.setString("username", ub.getUsername());
  qy.setString("pwd", ub.getPwd());
  List li = qy.list();
  return li;
        }
 });
 return (ls.size() > 0);
 } catch (Exception e) {
     return false;
 }
}

关注微信号:javalearns  ,随时随地学Java

今天看到一个手机也能赚钱的网站,与大家分享(真实可信,已亲身体验):

http://javalearns.jifenqiang.com/

作者:不详 来源:网络
    你是从哪里知道本网站的?
  • 网友介绍的
  • 百度搜索的
  • Google搜索的
  • 其它搜索过来的
  • 网址输错了进来的
  • 太忙了不记得了
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • java学习网(www.javalearns.com) © 2014 版权所有 All Rights Reserved.
  • Email:javalearns@163.com 站长QQ:1356121699 晋ICP备14003680号-3
  • java学习网部分内容来自网络或网友发布,如侵犯了您利益,请发邮件至:javalearns@126.com,我们尽快处理!
  • Java学习网
  • 网站统计
  • 晋公网安备 14042902000001号