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 结构设计
中国移动官方网站首页入口 中国移动官网网页登录

