Struts2 action 并发访问线程安全问题

本人最近二年一直在用struts2,对struts2的安全问题一直没多大关心,认为一个大家可以公认的框架,应该不会出现大的安全问题,自己考虑到的东西,别人估计已经考虑到了。为了自己用的踏实就做了一次小小的测试。可能我的这次测试没测试到要点,还喜欢大家多提意见,小弟在这里先说一声谢谢了。

测试目的:测试struts2 同一个action连续2次请求是否线程安全

测试内容: 第一:写一个线程
public class Test implements Runnable {


public void run() {


}

}

第二:写一个action
String name="cccc";
String str="";
//str 的get set方法略
public String test() throws Exception
{
Test t=new Test();
name=str+name;
if(b.getName().equals("dd")){
Thread.sleep(10000);

}else
{
Thread.sleep(10000*3);
}

t.run();
}

第三: 页面:
<s:form action="taction!test.action" method="post">
<s:textfield name="str" label="名称"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
struts配置文件略

第四: 显示页面

${name}

测试操作过程: 在同一个action请求下 先输入 “MMM” 立刻输入“dd”

测试预想错误结果:ddMMcc MMcc
测试理想结果: ddccc MMccc

测试最终结果:ddccc MMccc

得出结论:struts2 每次请求 action 是重新开启一个线程进行处理 但是我不能下结论是否线程安全。。希望大家做处更详细的解释,但是在我们B/S结构中 大家可以放心用struts2 .不必过多考虑线程安全问题
以上完全是个人观点 。。。希望大家别拍砖 这是我的第一篇博客
struts2_session_权限检查并控制重复登录源码 struts2_session_权限检查并控制重复登录 实在对不起各位,我当时有点冲忙上传上来个war包,现在我把源码奉上,真的对不起。我看了评论才知道,感谢那位仁兄。 立即下载

相关推荐

PythonWeb开发框架—Django之工程创建和models的定义和增删改查

文章介绍了Django工程的创建、models的定义和增删改查

weixin_42476668的博客 990

关于Struts2中action请求之间共享数据

struts1的Action 是在第一次请求的时候实例化的,比如第一次请求Action时会创建这个Action, 之后并没有放弃这个Action实例 而是将Action实例放在一个Map 中 当你再一次请求这个Action的时候会先从这个Map中去找,如果找到了就直接用,没找到才创建。换句话就是仅有Action的一个实例来处理所有的请求。 struts2中当请求到达Action时,Action对...

潜力股wjk的博客 1265

国内外主流嵌入式GUI汇总

随着MCU资源增多,处理能力也强了,同时市场需求也增多了GUI功能也越来越丰富了,很多的嵌入式图形库都可以做出绚丽的界面。

m0_69914734的博客 3290

Struts2 控制器的线程安全问题

Struts2 控制器的线程安全问题 原理: 为每个请求创建一个控制器实例即可解决线程并发安全问题! 在使用Spring时候务必使用 @Scope("prototype") 属性. 在struts2中,每一个请求都会有一个单独线程,该线程里会有单独的action,若使用Spring管理Struts2,则用以上@Scope("prototype") 方法解决(即在Action类前面添加该标...

荒的博客 358

银河麒麟V10搭建vsftpd

1、查看是否有安装过2、安装3、服务启动步骤设置开机启动并此次立即启动启动重启停止查看状态4、系统防火墙放行ftp服务如果没有重要的数据在服务器里面,或者在本地虚拟机中外网无法访问的情况下,建议直接关闭防火墙即可省略以上繁琐的步骤。

hhq850741642的博客 6484

uniapp - 最新详细实现web-view网页与安卓苹果App端之间互相通信功能,苹果app/安卓app平台与内嵌webview组件内的网页进行相互传值,内置网页与app双向实时通信,详细示例代码

uni-app,Android安卓,苹果ios,app,内嵌webview,第三方H5网页,app和web-view通信传值,web-view引入的页面向App主应用传递数据,App端与webview端相互通信,App端和H5端webview之间的通信,uniapp实现webview和APP之间的传值通信,如何互相传递对象数据,数据传递了接收不到,web-view页面向app内发送消息,监听传递的参数,uni-app和web-view页面相互传参,报错怎么办,跨域,屏幕空白出错,数据交互,解决手机物理返回按

🏆 前端领域优质创作者 4741

struts2线程安全

Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。 Spring的Ioc容器管理的bean默认是单实例的,上一次请求处理的状态信息被保持下来,并影响了下一次的请求,实际上就是Action中的类变量被不同的请求读取,出现错误结果 解决:就是不用单例, spring中bean的作用域设为prototype,每个请求对应一个实例. 1、Struts1 St

熊星雨的专栏 1339

OpenClaw实现多agent协作研究

本文介绍了如何构建多agent协作系统,通过飞书机器人实现任务分配与执行。系统包含三个agent:research_leader(总调度)、research_content(内容生成)和research_review(内容审核)。详细说明了agent配置方法(包括创建命令、权限设置)、飞书channel绑定方式,以及通过共享目录和会话机制实现协作。最后展示了应用示例,用户只需向leader机器人下达任务,系统即可自动完成内容生成和审核的全流程。

hhue2007的专栏 617

struts2、spring多用户线程混乱

struts2 默认情况下Action为线程安全,即struts2中action是多例的,一个session产生一个action。在使用spring来生成action的时候,生成的action全是单例的。这将导致上个用户操作结果将会影响下一个用户。解决方案:在struts2.xml中配置action的class属性时,直接配置类的全部路径(包+类)

wegoteam的专栏 494

泛微OA提交流程到下一个节点

泛微OA后端接口强制流程归档

CXYCMY的博客 2247

bevformer详解(3): 逐行代码讲解

在这篇文章中,我们将从BEVFormer算法代码入手,深入探究BEV转换的流程。BEVFormer是一种基于Transformer的BEV转换模型,其核心思想是利用自注意力机制和交叉注意力机制,从,并通过Object Query与BEV特征的交互,完成3D目标检测和地图分割等任务。https://developer.baidu.com/article/details/3224715bevformer的网络结构由三部分组成, 模型结构所示,其中的是部分,对于的是的结构,对于部分,沿用的中的decoder部分,

@bangbang的博客 3701

关于struts2 的单例和多例及线程安全的问题

我知道struts 2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象。原因是:struts 2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面。如果Action是单实例的话,这些数据在多线程的环境下就会相互影响,例如造成别人填写的数据被你看到了。它存在着线程不安全。 而struts 1的Action是单实例的,因为它的数据保存在

yelloo的博客 5683

车载ECU底软测试:方法与技术的深度解析

底软是运行在 ECU 硬件平台上的基础软件,它为上层应用程序提供了硬件驱动、操作系统服务、通信协议栈等功能。底软的主要功能包括:硬件驱动:负责与 ECU 的各种硬件外设进行通信和控制,如 GPIO、UART、SPI、CAN 等。操作系统服务:提供任务调度、内存管理、中断处理等功能,确保系统的实时性和稳定性。通信协议栈:实现 ECU 与其他 ECU 或外部设备之间的通信,如 CAN、LIN、FlexRay 等。诊断服务:负责对 ECU 的故障进行诊断和处理,并将故障信息存储在故障码存储器中。

天赐好车的博客 1428

深入分析Struts1和Struts2的Action线程安全问题 (转)

1、Struts1 Struts1是单例模式,也就是所,Web容器(例如:Tomcat)启动的时候,就会实例化一个Action对象,那么所有请求都是用的这个对象。所以当遇到2个请求并发的时候,那么其实他们调用的是同一个类,这个时候当你在Action内部定义属性的时候,就会产生线程同步的问题。 例如: 你在Action定义了一个 int i = 0; 然后在这个Action里面的某一个方法里...

happ1213的博客 146

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

线程安全

 Struts1:         当第一次*.do请求过来时,在内存中的actionmapping中找到相对应的action,然后new出这个action放在缓存中,当第二次一样的请求过来时,还是找这个action,所以对于struts1来说,action是单实例的,只有一个,如果在action中定义变量,就要非常小心了,因为并发问题,可能带来灾难性的后果,也不是不可以,我们可以加锁达到

stronger的专栏 402

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

多线程_并发访问_锁机制_servelt

struts1 的前端控制器是单例的,线程不安全的;每次请求都会用同一actionServlet;      struts2 的action不是单例的,线程安全的;每次请求都会新new一个action来接收;      Spring的IOC容器管理的bean默认是单例的;      如果项目中整合 struts2 和 spring ,由spring来管理struts2的action,会有

yakoo5的专栏 2252

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Struts2线程安全

Struts2线程安全 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。 一、先创建TestAction.java类。 package Action; public cla

Xiao_20170620的博客 568

action,servlet单实例线程安全问题

http://struts2.group.iteye.com/group/wiki/1379-action-in-struts2 一,servlet容器如何同时处理多个请求。 Servlet采用多线程来处理多个请求同时访问,Servelet容器维护了一个线程池来服务请求。线程池实际上是等待执行代码的一组线程叫做工作者线程(Worker Thread),Servlet容器使用一个调度线程来管...

weixin_30345055的博客 72

浅析Struts1和Struts2的Action线程安全问题

【问题描述】最近公司安排我面试Java的FreshMan,面试者一般是工作1年多点的新人(这里我就装老一下,其实我也才工作3年不到),在被问及Struts1和Struts2的Action的线程安全问题的时候,大多是支支吾吾,答不出所以然。所以在这里我整理一下我个人的理解。   【问题答案】 这是由于Servlet的工作原理产生的。我们先来简单回顾一下Servlet的生命周期“初始化->ini

virgoboy2004的专栏 1万+

Struts Action的线程安全问题

提一个问题:Struts 1.x和Struts 2的Action是不是线程安全的?  Struts 1.x在第一次请求某个Action时,会创建这个Action实例。但之后再请求该Action实例时,就用之前创建好的这个Action处理,即它是单例模式。所以Struts 1.x的Action不是线程安全的。  但是为什么我们在使用Struts 1.x开发的时候一般不用考虑线程安全问题呢

opmic的专栏 4141

Struts2的Action的线程安全问题

背景 : 1) Struts2 默认会对每一个请求,产生一个新的Action的实例来处理. 2) Spring的Ioc容器管理的bean默认是单实例的. 当Struts2与Spring整合后,由Spring来管理Struts2的Action,会遇到什么问题 ?如何解决 ? ---------------------------------------------------

gongzhufanlulu的博客 1727

Struts的线程安全问题

<br />一、Servlet的线程安全问题<br />参考:深入研究Servlet线程安全性问题<br />Servlet是单例的,如果Servlet有定义实例变量并且在service方法中有赋值操作,则在多线程情况下存在线程安全问题。<br /> <br />二、Struts1<br />Struts1使用的ActionServlet是单例的,由这一个servlet处理所有.do请求。RequestProcessor也是单例。<br /> <br />RequestProcessor的processAc

xiemk2005的专栏 3655

struts1和struts2中action的线程安全问题

问题: Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。 Spring的Ioc容器管理的bean默认是单实例的,上一次请求处理的状态信息被保持下来,并影响了下一次的请求,实际上就是Action中的类变量被不同的请求读取,出现错误结果 解决:就是不用单例, spring中bean的作用域设为prototype,每个请求对应一个实例. 1、Struts

好好工作,努力跳槽 957

SpringMVC和Struts2并发访问时的线程安全问题

SpringMVC是基于方法的拦截,Struts2是基于类的拦截。 Struts2每处理一个请求,就会实例化一个Action对象,所有不会有线程安全的问题。 SpringMVC的controller默认是singleton的。 单例的好处: 不用每次创建controller 减少创建对象的时间和垃圾收集的时间。 意味着每一个请求,系统都会用原有实例去处理,这样会导致多线程调用时,它里面的实例变

JAVA程序员伊万的学习博客 6226

Struts2的action是否为线程安全?Struts1的区别?

Struts2的action是否为线程安全?Struts1的区别?

king的专栏 6725
下一篇: 工作流整理
烟云冬少
博客等级 码龄19年 20粉丝 17原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值