类型: 质量问题

    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将被多个请求共享,这将导致线程间数据泄露。

    1. import javax.servlet.http.HttpServlet;
    2. public class LoginServlet extends HttpServlet {
    3. String username;
    4. protected void doPost(HttpServletRequest req,HttpServletResponse res) {
    5. username = req.getParameter("username");
    6. ...
    7. out.println( " 欢迎您,"+username+" !");
    8. }
    9. }