论坛首页 Web前端技术论坛

Struts1与Struts2的线程安全问题

浏览 7721 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
作者 正文
   发表时间:2011-01-14   最后修改:2011-01-14
alyouge 写道
wuxi7227 写道
alyouge 写道
wuxi7227 写道
alyouge 写道
在 spring 和 struts 2 整合的时候, 如果不写上scope="prototype" 那么就是ACTION就是单例的,如果定义全局变量,当第一次传递过去参数,以后访问如果不再传参数,默认的就是第一次传递过去的参数。所以ACTION 必须加上scope="prototype"。

或者谁有跟好的解决办法?


用spring来管理struts2的action有多大意义啊?本身不会被其他bean引用的;想引用其他bean,一样可以注入的。


不用spring 你怎么注入SERVICE?


直接在action里注入service 引用。 service配置文件default-autowire="byName" 就OK了呀。哦,还有,Struts的配置文件 <constant name="struts.objectFactory" value="spring" />  这样就不用在配置文件配action了。

还有一种传统方法,直接去ServletContext取。
public Object getBean(String name) {
        ApplicationContext ctx =
       WebApplicationContextUtils.getRequiredWebApplicationContext(ServletActionContext.getServletContext());
        return ctx.getBean(name);
    }

哦 原来你说的这样啊 ,还不是离不开SPRING


采用第二种方法的话,action就跟spring没关系了呀。 把那个方法写到一个BaseAction里就好了。 即使第一种,不需要在配置文件里写了,也省事很多。 不正是你在找的其它方法么。
0 请登录后投票
   发表时间:2011-01-14  
wuxi7227 写道
alyouge 写道
wuxi7227 写道
alyouge 写道
wuxi7227 写道
alyouge 写道
在 spring 和 struts 2 整合的时候, 如果不写上scope="prototype" 那么就是ACTION就是单例的,如果定义全局变量,当第一次传递过去参数,以后访问如果不再传参数,默认的就是第一次传递过去的参数。所以ACTION 必须加上scope="prototype"。

或者谁有跟好的解决办法?


用spring来管理struts2的action有多大意义啊?本身不会被其他bean引用的;想引用其他bean,一样可以注入的。


不用spring 你怎么注入SERVICE?


直接在action里注入service 引用。 service配置文件default-autowire="byName" 就OK了呀。哦,还有,Struts的配置文件 <constant name="struts.objectFactory" value="spring" />  这样就不用在配置文件配action了。

还有一种传统方法,直接去ServletContext取。
public Object getBean(String name) {
        ApplicationContext ctx =
       WebApplicationContextUtils.getRequiredWebApplicationContext(ServletActionContext.getServletContext());
        return ctx.getBean(name);
    }

哦 原来你说的这样啊 ,还不是离不开SPRING


采用第二种方法的话,action就跟spring没关系了呀。 把那个方法写到一个BaseAction里就好了。 即使第一种,不需要在配置文件里写了,也省事很多。 不正是你在找的其它方法么。


一般情况下,我估计没人这么干吧,最起码我不会这么干!这么说HIBERNATE你也可以这样写了,那还要SPRING干嘛?
0 请登录后投票
   发表时间:2011-01-18  
无语。第一种方法效果相同,但是省事呀。你愿意按你的老方法去配action bean那就老方法吧。 
0 请登录后投票
   发表时间:2011-01-24   最后修改:2011-01-24
wuyakenihao 写道
alyouge 写道
wuxi7227 写道
alyouge 写道
在 spring 和 struts 2 整合的时候, 如果不写上scope="prototype" 那么就是ACTION就是单例的,如果定义全局变量,当第一次传递过去参数,以后访问如果不再传参数,默认的就是第一次传递过去的参数。所以ACTION 必须加上scope="prototype"。

或者谁有跟好的解决办法?


用spring来管理struts2的action有多大意义啊?本身不会被其他bean引用的;想引用其他bean,一样可以注入的。


不用spring 你怎么注入SERVICE?



不注入也可以,你想想在你的过滤器或者servlet 中你是如何去spring中bean 的。当然 如果你使用spring 的话,最好都交给spring 来进行管理。


写在父类的构造方法里面
public abstract class BaseAction<M,S> extends ActionSupport implements ModelDriven<M>{ 
    protected M model;
    protected S service;
    public BaseAction(){
       Class<S> s = (Class<S>)((ParameterizedType)getClass.getGenericSupperclass())
                 .getActualTypeArguments()[1];
       service = (S) applicationContext.getBean(s);
       Class<M> m =(Class<S>)((ParameterizedType)getClass.getGenericSupperclass())
           .getActualTypeArguments()[0];
       try{
         model = m.newInstance();
       }catch(Exception e){
       }
    }
   public final M getModel(){
      return model;
   }

}
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics