title: Servlet thread safety: instance variables vs. request scope attributes
body: <p>This is the sample code, illustrating the usage of instance variable and request attribute:</p>
  
  <pre><code>    @WebServlet(name = "Upload", urlPatterns = {"/upload"})
      @MultipartConfig()
      public class Upload extends HttpServlet {
  
      private String txt;
  
      protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         try{
          String txt2 = (String) request.getAttribute("txt2");
          //txt and txt2 variables are available for processing.
           ..........
            } finally {
          txt = null;//Prepare variable for next request.
         }
      }
  
      @Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              .....
          request.setAttribute("txt2", someValue);
          //vs
          txt = someValue;
  
      processRequest(request, response);
      }
  
      @Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              .....
       processRequest(request, response);
        }
      }
  </code></pre>
  
  <p>Now I know that instance variables should be never declared in servlets, because the same servlet is shared between concurent requests. But what about request attributes? Is it safe to use them?</p>