【续帖】我的帖子无法回复是怎么回事?原贴【STRUTS 线程共享冲突】actionform中的数据似被共享了!

snow_jin 2005-01-27 03:48:49
http://community.csdn.net/Expert/topic/3754/3754434.xml?temp=.1738703

我的这个帖子不能回复了.
各位版主能帮忙解决否?

******************************************************************************************
原贴:
【STRUTS 线程共享冲突】actionform中的数据似被共享了!救命啊~~~~~~~~
多人同时操作,有写文件的动作,在action中取到毫秒级的时间戳,然后生成临时文件名,从actionform中取数据输出到文件.
当两个人同时操作的时候问题出来了,生成了两个文件,但是里面的内容是一样的!!!
难道actionform是共享的!!!不大可能吧,那我的数据不都要混乱了!!!我会对struts失望的呀
大哥们救命啊,大概会是什么地方出错呢?搞不懂啊!
******************************************************************************************

后来发现是因为struts只为每个action类创建了一个实例,

【大家注意啦 struts只为每个action类创建了一个实例】

这样我用到的成员变量就是共享的了,所以出现文件写的时候数据混乱的情况.

但是现在有新问题出现,我在多个用户同时登陆时出错.
原来是考虑会不会因为conn被关闭,所以用了同步,(其实不用同步,conn也不会被关闭的.)应该可以肯定不是数据库的问题.
错误信息如下:
--------------------------------------------------------------------------------

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.ClassCastException
org.apache.struts.util.RequestUtils.getMultipartHandler(RequestUtils.java:1318)
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1194)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.27 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.0.27

还请各位高手指教啊!

...全文
63 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jFresH_MaN 2005-02-07
  • 打赏
  • 举报
回复
action只有一个实例,你的问题应该是你在action里面定义了成员变量,这样的话成员变量就被所有线程共享了
解决的办法是不定义成员变量,而是在你的类里面的成员方法里面使用局部变量
fly29 2005-02-07
  • 打赏
  • 举报
回复
我记着,我上次在一家公司面试的时候,那个经理谈到了这个问题,说struts中一个action只有一个实例,但是我们要注意线呈安全的问题,那个经理说的解决方法是每个用户生成一个对象,放在hashtable里面。具体的我也没有测试,实现过。看看队楼主有什么帮助!
以梦为马 2005-01-28
  • 打赏
  • 举报
回复
up

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧