论坛首页 Java企业应用论坛

Action中需要注意的成员变量

浏览 4248 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-19  
public class testfa  extends DispatchAction{
    private int a;
    private int b;
    public ActionForward showa(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
     a=1;
     b=2;
     System.out.println(a);
     System.out.println(b);
    }
    public ActionForward showb(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
     b=3;
     System.out.println(a);
     System.out.println(b);
    }
}


如果直接执行showb方法,则a为0,如果先执行showa,再执行showb,则a=2,所以我们在使用action,特别是dispatch时,注意成员变量的清空,否则会遇到一些意外。
原因:我想可能是因为一个action就是一个Servlet,当第一次访问时实例化,之后则是一直保持状态使用,所以成员变量值得以保留,而actionform则由于系统自动调用了reset方法(socpe=request时),没有该问题。
不知道在C/S模式下如何实现Servlet
   发表时间:2007-10-20  
这个就是所谓的线程安全
0 请登录后投票
   发表时间:2007-10-20  
ccj 写道
所以我们在使用action,特别是dispatch时,注意成员变量的清空,否则会遇到一些意外。

多线程并发访问的时候,清空成员变量不会起作用吧,Action中尽量避免使用类变量
ccj 写道
而actionform则由于系统自动调用了reset方法(socpe=request时),没有该问题。

actionform是在方法中传递的,和action的实例没关系,当然不会出现问题了
0 请登录后投票
   发表时间:2007-10-20  
gmizr 写道
多线程并发访问的时候,清空成员变量不会起作用吧,Action中尽量避免使用类变量


这样做确实应该很好
0 请登录后投票
   发表时间:2007-10-22  
我觉得应该是线城安全的问题,action实力只有一个,你设置的是成员变量,当然在一个方法里改变,回影响另一个方法里取该值的结果.
0 请登录后投票
   发表时间:2007-10-23  
struts的action是单例的
0 请登录后投票
   发表时间:2007-10-23  
liangguanhui 写道
struts的action是单例的
ddddddddddd
0 请登录后投票
   发表时间:2007-10-23  
duan0175 写道
liangguanhui 写道
struts的action是单例的
ddddddddddd
ddddddddddddddddddd
0 请登录后投票
   发表时间:2007-10-23  
duan0175 写道
duan0175 写道
liangguanhui 写道
struts的action是单例的
ddddddddddd
ddddddddddddddddddd
ddddddddddddd
0 请登录后投票
   发表时间:2007-10-23  
struts1
0 请登录后投票
论坛首页 Java企业应用版

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