`
ccj
  • 浏览: 16293 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
最近访客 更多访客>>
uii
文章分类
社区版块
存档分类
最新评论

Action中需要注意的成员变量

阅读更多
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
分享到:
评论
9 楼 ddandyy 2007-10-23  
struts1
8 楼 duan0175 2007-10-23  
duan0175 写道
duan0175 写道
liangguanhui 写道
struts的action是单例的
ddddddddddd
ddddddddddddddddddd
ddddddddddddd
7 楼 duan0175 2007-10-23  
duan0175 写道
liangguanhui 写道
struts的action是单例的
ddddddddddd
ddddddddddddddddddd
6 楼 duan0175 2007-10-23  
liangguanhui 写道
struts的action是单例的
ddddddddddd
5 楼 liangguanhui 2007-10-23  
struts的action是单例的
4 楼 leeking 2007-10-22  
我觉得应该是线城安全的问题,action实力只有一个,你设置的是成员变量,当然在一个方法里改变,回影响另一个方法里取该值的结果.
3 楼 lianwu 2007-10-20  
gmizr 写道
多线程并发访问的时候,清空成员变量不会起作用吧,Action中尽量避免使用类变量


这样做确实应该很好
2 楼 gmizr 2007-10-20  
ccj 写道
所以我们在使用action,特别是dispatch时,注意成员变量的清空,否则会遇到一些意外。

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

actionform是在方法中传递的,和action的实例没关系,当然不会出现问题了
1 楼 yeshucheng 2007-10-20  
这个就是所谓的线程安全

相关推荐

    struct in action

    然而,由于struct成员默认为public,继承struct时需要注意防止不必要的公开访问。多态性在struct中也可以实现,但需要借助虚函数和指针或引用来实现。 四、struct与联合(union) 在C++中,struct也可以与union一起...

    Struts2 入门资料

    - **添加成员属性**:在Action类中声明对应的成员变量,Struts2会自动将请求参数绑定到这些变量上。 - **域模型**:Struts2支持将Action的成员变量映射为域模型对象,通过这种方式,可以更好地进行数据封装和验证...

    actionPKservlet

    此外,由于Action是多实例的,可以在Action类中定义成员变量,这些变量不会被其他请求所共享。 #### 代码示例解析 下面通过提供的代码示例进一步分析Servlet的具体实现细节: ```java public class LogLet ...

    Struts线程安全

    - **避免使用实例变量**:根据官方指南,编写Struts Action类时,应尽可能避免使用实例变量(非静态非final的成员变量)。这是因为Struts控制器Servlet(通常是ActionServlet)通常只为每个Action类创建一个实例,并...

    Struts中action线程安全问题解析

    1. **避免在Action中使用可变成员变量**:尽可能将业务逻辑和数据移至Service层,使Action仅作为传递控制的角色。 2. **使用线程局部变量(ThreadLocal)**:如果必须在Action中存储请求相关的状态,可以使用...

    java reflection in action

    在《Java Reflection in Action》这本书中,作者深入探讨了这一主题,帮助开发者理解并有效地利用Java反射机制。这本书是2005年出版的英文版,对于想要提升Java编程技能,特别是对动态类型和元编程感兴趣的开发者来...

    ssh注意事项

    这通常通过在类内部声明私有成员变量,并提供相应的get/set方法来实现。例如: ```java private TUserDAOImpl userdaoimpl; public void setUserdaoimpl(TUserDAOImpl userdaoimpl) { this.userdaoimpl = ...

    struts框架讲解

    此外,为了获取请求参数,可以在Action类中定义成员变量和对应的getter和setter方法,Struts2会自动将请求参数封装到这些成员变量中。 在实现过程中,开发者应注意不要直接将Struts2的所有jar包复制到项目中,而是...

    struts2学习笔记

    在Struts1中,Action是单例模式,因此需要开发者确保Action类及其成员变量是线程安全的。 Action名称的解析在Struts2中遵循一定的规则。URL中的路径会被解析为namespace,Struts2会按照这些命名空间逐级查找对应的...

    HTML超链接中文乱码问题分析及解决方法.docx

    为了解决超链接中文乱码问题,我们可以在 Action 中添加一个成员变量,保存编码后的中文参数。在 VM 页面渲染时,取出这个变量值,并拼接到超链接 URL 上。这样可以确保中文参数正确编码,避免乱码。 编码方法 在 ...

    struts2 model-driven

    在接口中,你需要声明一个类型为模型对象的成员变量,并提供getter方法。 3. **配置Action**:在Struts2配置文件(struts.xml)中,为Action类配置相应的action元素,指定结果页面和其他必要属性。 4. **请求处理*...

    弹性分布式数据集pdf

    1. **避免使用类成员变量**:在RDD的转换操作中,应尽量避免使用类成员变量,因为这些变量可能在不同的执行上下文中具有不同的值,导致不可预测的结果。建议的做法是将成员变量提取为局部变量后再使用。 2. **利用...

    系统开发流程

    - **类名匹配**:当展示或保存 action 中的类信息时,jsp 页面中的 input 名称应与 action 类中的成员变量名一致。 - **提交 URL**:提交表单时,URL 应为 `xxx_methodName.action` 形式,指向特定的 action 方法...

    struts2文件上传下载

    在这个类中,需要定义用于接收上传文件的私有成员变量,并为它们提供对应的getter和setter方法。例如,在`UploadAction`中,定义了`List<File> image`,`List<String> imageContentType`,和`List<String> ...

    struts源码学习.pdf

    因此,在编写自定义`Action`类时,需要注意线程安全问题,避免出现数据竞争或并发访问异常。 #### 五、总结 通过对`struts源码学习.pdf`文件中的内容分析,我们可以深入了解Struts框架内部的工作原理,尤其是`...

    maven in action

    2. **配置环境变量**:为了能够在命令行中运行 Maven 命令,需要设置 MAVEN_HOME 环境变量,并将其添加到 PATH 环境变量中。 3. **编写 POM 文件**:每个 Maven 项目的核心都是 pom.xml 文件,它定义了项目的结构、...

    第四章 JSP语法(新)1

    需要注意的是,由于并发访问,对于成员变量的修改可能需要同步控制,防止数据不一致。 - 方法的声明同样在`! ... %>`中完成,可以在JSP页面内其他地方被调用,增强了代码的复用性。 3. **Java程序片**(Scriptlet...

    java登陆判断代码

    ### Java登录判断代码详解 #### 一、概述 在Java Web开发中,用户登录验证是常见且重要的功能...此外,需要注意的是,为了提高安全性,实际生产环境中通常还需要增加密码加密处理、异常处理以及更多的安全检查措施。

    Java Reflection in Action

    3. **单元测试**:反射技术可以用来访问和修改私有成员变量,这对于编写单元测试非常有用,因为可以模拟各种场景进行测试。 4. **代码生成**:利用反射技术可以在运行时动态生成代码,比如在Hibernate框架中用于动态...

Global site tag (gtag.js) - Google Analytics