类型: 质量问题
javax.servlet.http.HttpServlet和org.apache.struts.action.Action的对象不是线程安全的。对于同一个Servlet对象(或struts1的Action对象)的多个请求,Servlet对象(或struts1的Action对象)将在一个多线程的环境中并发执行。Web容器默认采用单实例多线程的方式来处理Http请求,这将导致Servlet对象(或struts1的Action对象)成员变量访问的线程安全问题。
例如:下面是一段JAVA EE的Servlet代码片断,变量username为成员变量,当LoginServlet的对象处理多个请求时,变量username将被多个请求共享,这将导致线程间数据泄露。
import javax.servlet.http.HttpServlet;
public class LoginServlet extends HttpServlet {
String username;
protected void doPost(HttpServletRequest req,HttpServletResponse res) {
username = req.getParameter("username");
...
out.println( " 欢迎您,"+username+" !");
}
}