浏览 4275 次
锁定老帖子 主题:Action中需要注意的成员变量
精华帖 (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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-10-20
这个就是所谓的线程安全
|
|
返回顶楼 | |
发表时间:2007-10-20
ccj 写道 所以我们在使用action,特别是dispatch时,注意成员变量的清空,否则会遇到一些意外。
多线程并发访问的时候,清空成员变量不会起作用吧,Action中尽量避免使用类变量 ccj 写道 而actionform则由于系统自动调用了reset方法(socpe=request时),没有该问题。
actionform是在方法中传递的,和action的实例没关系,当然不会出现问题了 |
|
返回顶楼 | |
发表时间:2007-10-20
gmizr 写道 多线程并发访问的时候,清空成员变量不会起作用吧,Action中尽量避免使用类变量
这样做确实应该很好 |
|
返回顶楼 | |
发表时间:2007-10-22
我觉得应该是线城安全的问题,action实力只有一个,你设置的是成员变量,当然在一个方法里改变,回影响另一个方法里取该值的结果.
|
|
返回顶楼 | |
发表时间:2007-10-23
struts的action是单例的
|
|
返回顶楼 | |
发表时间:2007-10-23
liangguanhui 写道 struts的action是单例的 ddddddddddd
|
|
返回顶楼 | |
发表时间:2007-10-23
duan0175 写道 liangguanhui 写道 struts的action是单例的 ddddddddddd |
|
返回顶楼 | |
发表时间:2007-10-23
duan0175 写道 duan0175 写道 liangguanhui 写道 struts的action是单例的 ddddddddddd |
|
返回顶楼 | |
发表时间:2007-10-23
struts1
|
|
返回顶楼 | |