zoukankan      html  css  js  c++  java
  • 关于struts和Spring 结合到一起之后存在ACtion创建单实例还是多

    struts 2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象。原因是:struts 2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面。如果Action是单实例的话,这些数据在多线程的环境下就会相互影响,例如造成别人填写的数据被你看到了。所以Struts2的Action是多例模式的。

         问题出现了,可以让struts2的action变成单例模式么?我在使用spring来生成action的时候,发现生成的action居然全是单例的。这不是让我的程序默认就跑出bug来么?上个用户提交的信息,如果下个用户没填,居然跑到上个用户输入的信息去了。

         如果单例改成多例,会报一个action找不到的异常,可能是你在方法之中时用到的变量你没有传值,action报错比较奇怪

         Invalid action class configuration that references an unknown class named [adminLogQueryAction]

         检查前台提交参数和后台接收值,和方法需要的值

    背景 :

    1) Struts2 会对每个浏览器,产生一个Action的实例来处理.

    2) Spring的Ioc容器管理的bean默认是单实例的.

    首先从数据安全性的问题上考虑,我们的Action应该保证是多例的,这样才不会出现数据问题。但是如果有的action比如只有admin才能操作,或者某些action,全站公用一个来提高性能,这样的话,就可以使用单例模式。

    不过幸好,Spring的bean可以针对每一个设置它的scope,所以,上面的问题就不是问题了。如果用多例,就在spring的action bean配置的时候设置scope="prototype".好吧,问题到此结束。

    Xml代码  收藏代码
    1. <!--多例-->  
    2. <bean id="localFileTaskConFigureAction" class="com.top.fgap.localfiletask.action.LocalFileTaskConAction" scope="prototype">  
    3.         <property name="localFileTaskConfigureService">  
    4.             <ref bean="localFileTaskConfigureService"/>  
    5.         </property>  
    6.     </bean>  
    7. <!--默认情况下是单例-->  
    8.     <bean id="locFTIpFilterAction" class="com.top.fgap.localfiletask.action.LocFTIpFilterAction">  
    9.         <property name="localIpFilterService">  
    10.             <ref bean="locFTIpFilterService"/>  
    11.         </property>  
    12.     </bean>  
  • 相关阅读:
    学生党 应该去 研究研究 Socket(套接字) 实现原理
    收录一些 硬件 相关的 文章
    谈谈 软件 开源项目
    我决定 开启 一个 人工智能 机器学习 技术 的 普及项目 Let it Learn
    我邀请 民科吧 网友 和 三江老师 来 反相吧 辩论 调和级数
    共量子论 丢番图方程组 数值求解 最小分子解
    刚 看了一下 一元三次方程 的 解法
    研究发展 C 语言
    对 量子病态定理 提出的 代数方程 不成立 的 证明
    数学 改革
  • 原文地址:https://www.cnblogs.com/zyzcj/p/5652128.html
Copyright © 2011-2022 走看看