Struts中的Action 单例与多例详解

发布时间 - 2026-01-11 01:00:10    点击率:

 Struts中的Action 单例与多例详解

struts2中action是多例的,即每次访问网络地址的时候都会产生一个action

public class pr_action {
  public pr_action(){
    System.out.println("创建action成功!!!");
  }
  public void execute(){

  }
}

运行代码可以看到,每次访问该网络地址都会在控制台输出一次!!!

如果是单例的话,若出现两个用户都修改一个对象的属性值,则会因为用户修改时间不同,两个用户访问得到的属性不一样,操作得出的结果不一样。

举个例子:有一块布长度300cm,能做一件上衣(用掉100cm)和一件裤子(用掉200cm);甲和乙同时访问得到的长度都是300cm,
甲想做上衣和裤子,他先截取100cm去做上衣,等上衣做完再去做裤子,而乙这时正好也拿100cm去做上衣,那好,等甲做完上衣再做裤子的时候发现剩下的布(100cm)已经不够做裤子了…..这就是影响系统的性能,解决的办法就是给甲和乙一人一块300cm的布,就不会出现布被别人偷用的事情,也是就单实例和多实例的区别

如果设置成单例,那么多个线程会共享一个ActionContext和ValueStack,这样并发访问的时候就会出现问题了

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

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

背景:

1) Struts2会对每一个请求,产生一个Action的实例来处理.

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

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

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Struts中的Action  # 单例与多例  # Struts  # Action  # 关于struts2中Action名字的大小写问题浅谈  # jQuery ajax请求struts action实现异步刷新  # Struts2中Action三种接收参数形式与简单的表单验证功能  # struts2通过action返回json对象  # Struts2 ActionContext 中的数据详解  # 详解在Java的Struts2框架中配置Action的方法  # 用js模拟struts2的多action调用示例  # struts2中action实现ModelDriven后无法返回json的解决方法  # 详解Struts2中Action访问Servlet API的几种方法  # 就会  # 去做  # 上个  # 做完  # 都是  # 网络地址  # 用掉  # 我在  # 就在  # 去了  # 多个  # 这就是  # 一人  # 你在  # 你看  # 会在  # 跑到  # 希望能  # 这不是  # 会对 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: googleplay官方入口在哪里_Google Play官方商店快速入口指南  如何用搬瓦工VPS快速搭建个人网站?  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  手机软键盘弹出时影响布局的解决方法  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  b2c电商网站制作流程,b2c水平综合的电商平台?  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  香港网站服务器数量如何影响SEO优化效果?  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  北京企业网站设计制作公司,北京铁路集团官方网站?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  iOS正则表达式验证手机号、邮箱、身份证号等  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  Laravel如何使用Service Container和依赖注入?(代码示例)  如何用PHP工具快速搭建高效网站?  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  免费视频制作网站,更新又快又好的免费电影网站?  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  魔方云NAT建站如何实现端口转发?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  Swift中循环语句中的转移语句 break 和 continue  java中使用zxing批量生成二维码立牌  Linux系统运维自动化项目教程_Ansible批量管理实战  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Linux系统命令中screen命令详解  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  如何快速搭建高效服务器建站系统?  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何在 React 中条件性地遍历数组并渲染元素  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  Laravel storage目录权限问题_Laravel文件写入权限设置  手机网站制作与建设方案,手机网站如何建设?  中山网站推广排名,中山信息港登录入口?  ,南京靠谱的征婚网站?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  如何快速搭建支持数据库操作的智能建站平台?  Laravel集合Collection怎么用_Laravel集合常用函数详解  PythonWeb开发入门教程_Flask快速构建Web应用  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  js实现获取鼠标当前的位置  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  使用豆包 AI 辅助进行简单网页 HTML 结构设计  中国移动官方网站首页入口 中国移动官网网页登录