论坛首页 Java版 Struts

struts 多线程问题

浏览 288 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-05-01
在看dlog4j的源代码时,有如下部分:
UserForm类:
public class UserForm extends DlogActionForm implements Cloneable{
…………………..
public static UserForm getLoginUser(HttpServletRequest request){
SiteForm sf = SiteManager.getCurrentSite(request);
if(sf!=null)
return
(UserForm) request.getSession().getAttribute(sf.getName()+'_'+UserForm.KEY);
return null;
}

父类:
public abstract class DlogActionBase extends ActionExtend {
…………………..
public static UserForm getLoginUser(HttpServletRequest req){
return UserForm.getLoginUser(req);//调用UserForm类的getLoginUser方法
}

子类:
public class AdminActionBase extends DlogActionBase {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws Exception
{
UserForm user = getLoginUser(req);//调用父类的getLoginUser方法
…………………..
我的理解是:每一个请求request拥有自己的内存空间,以上的代码都是对request进行操作,所以,虽然他们是static方法,但是他们是线程安全的。


如果有个actionForm如下:
public class AactionForm extends BactionForm implements CInterface{
…………………..
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws Exception
{
Int value = req.getAtrrubute(“value”);//从请求中取得value的值 该值可能是1,也可//能是2
String str =AnyClass.getFunction(value);//AnyClass可以是任意的类,包括父类、
//Form类、工具类等等

在AnyClass类中有如下代码:
Public static String getFunction(int I ){
String str = “”;
If(I = = 1)
str = “the answer is 1”;
Else if(I == 2){
str = “the answer is 2”;
return str;

}
我的理解是:上面这段代码不是线程安全的,因为getFunction中的代码不是以某个request相关的,在多线程访问机制下会导致错误问题。
请问一下大家我的理解是否正确?;另外在java web编程的过程中,关于多线程处理部分有什么需要提别注意的地方?都有什么经验或教训以及如何更好的处理能否分享一下?
   
时间:2008-05-04
我印象中,struts1的时候action是单例的,所有的request都共享一个action实例。
也就是说有可能两个request同时进入action的某个代码块。
   
0 请登录后投票
时间:2008-05-09
wqq686 写道

因为getFunction中的代码不是以某个request相关的,在多线程访问机制下会导致错误问题。
请问一下大家我的理解是否正确?;另外在java web编程的过程中,关于多线程处理部分有什么需要提别注意的地方?都有什么经验或教训以及如何更好的处理能否分享一下?


getFunction应该没有问题,它始终操作的是Auto变量类型的值。
   
0 请登录后投票
论坛首页 Java版 Struts

跳转论坛:
JavaEye推荐
    快速回复 引用上一条消息 (Alt+S)