struts1.3.8线程安全问题
@Controller("/A/aaaddd")
public class HeHAction extends org.apache.struts.actions.DispatchAction{
@Resource(name="xxxServiceBean")
private xxxService xxxService;
public ActionForward dBianList(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
各种代码.....
}
}
为了strut1 现成没有问题 可以采用的方法
1实现 SingleThreadModel 接口
2使用synchronized 关键字能保证一次只有一个线程可以访问被保护的区段
3避免使用实例变量
但是DisPathAction 有实例变量
protected static Log log = LogFactory.getLog(DispatchAction.class)
protected Class clazz = this.getClass();
protected HashMap methods = new HashMap();
也就是说 HeHAction 三种方式都没有采取 这样会不会 出问题
当然小oa系统 没几个人访问
------解决方案--------------------下面我们来解释为什么Struts1是线程不安全的。
1、Struts1
Struts1是对Java web servlet接口的直接实现,所以它继承了tomcat对servlet的实现,每一个struts1里面的action都对应的是一个servlet class,所以这里的action在被tomcat实例化之后也是单例的,所以,struts1就产生了多线程问题。
例如:
你在Action定义了一个 int i = 0;
然后在这个Action里面的某一个方法里面对这个i进行操作。
向下面代码这样:
[java] view plaincopy
package web.servlet;
import
java.io.IOException;
import java.io.PrintWriter;
import
javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author Jack Zhang
* @version vb1.0
* @E