struts2集合spring开发--陈涛

前几天刚搞过 struts2.0 ,但该程序用的是 struts2.0 + hibernate 3.1 开发的,代码相当烦杂,所以就考滤把spring 加到项目中做个中间件,就象以前开发用 struts1.x + spring2.0 + hibernate3.x 一样,因struts 2.0 是基于webwork框架的,与struts1.x 完全是二种框架,所以在整合时也出现了一些问题,现在解决了写在上面须望能帮到需要帮助的同行

我们都知道当我们用struts2的时候需要在src 目录下建立一个struts.xml文件,这个文件在容器启动时struts2就会加载它,一个完整的struts.xml文件内容如下:

<? xml version="1.0" encoding="utf-8" ?>
<! DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"
>
< struts >
    
< package  name ="userManager"  namespace =""  extends ="struts-default" >
        
< action  name ="login"  class ="action.LoginAction"  method ="login" >
            
< result  name ="success" > /success.jsp </ result >
            
< result  name ="error" > /error.jsp </ result >         
        
</ action >
    
</ package >
</ struts >

其中action 就是指定其中某个struts2的action 属性name是客户端提交的地址,class 则指明当用户提交该地址时调用那个 action , method是指明要调用action中的那个方法,可不写,不写默认调用 execute 方法,方法如下

public  String execute()  throws  Exception {
       
return null;
}

要调用默认的方法action 需要继承 ActionSupport 才可.也就是下面这样.

public   class  UserAction  extends  ActionSupport
{   
     
private String userName;
     
private String SUCCESS = "success":
     
private String ERROR = "error";
     
public String getUserName(){
             
return userName;
     }


     
public void setUserName(String userName){
           
this.userName = userName;
      }

     
public String execute() throws Exception{
          
          
if(userName.equals("chen")){
                  
return SUCCESS;
          }

           
return ERROR:
    }

}

 

我们看到在struts.xml文件中的action下有个元素result  ,其中name指定用户返回的字符串 value则是指定当返回该字符串时需转发的页面,也就是说当userName等于 chen时返回SUCCESS 则转发到 success.jsp,当返回ERROR时到error.jsp,                                 不说太多了下面讲讲与spring怎样整合吧!

当我们在struts.xml文件中加入 <constant name="struts.objectFactory" value="spring" />  指struts.objectFactory为spring,struts2框架就会将Bean转交给Spring来创建,装配,注入。但是Bean创建完成之后,其生命周期还是由struts2容器来管理。

还有一种方式就是在src下建立一个struts.properties文件,写入:    struts.objectFactory=spring  这是另一种方式,如果是这样子创建就不用在struts.xml文件中指定,struts.xml也不用更改,如常一样,如果在Action中有依赖于其它的Bean,也会被自动注入.这个时候,Action实例是以prototype方式创建的,Spring会为每个请求创建一个action的实例。

  在某些时候,你可能希望不仅仅让spring创建和装配Action对象,还希望让spring完全管理这些对象,如希望使用aop或者希望使用acegi时。这时候,只需要在spring的配置文件中定义这些action 即可。如在applicationContext.xml文件中:  <bean id="user" class="action.LoginAction"/>

  然后在struts.xml文件中的action元素,class="user"即可。如下:

< action  name ="login"  class ="user"  method ="login" >
    
< result  name ="success" > /success.jsp </ result >
    
< result  name ="error" > /error.jsp </ result >         
</ action >

需要注意的一个地方:Spring中的缺省作用域是单例。而往往Action属于有状态的Bean,应该使用prototype作用域。 < bean id="user" class="action.LoginAction" singleton="false"/>   如果忽略了这个细节,在我们实用SET,GET 方法注入关系的时候可能会有线程安全上的风险。请注意!

学习的朋友如果有好奇心可以试试,也欢迎大家加我QQ 543997732 一起讨论,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值