我们可以在servlet的方法之外声明一个字段吗

Can we declare a field outside the method in servlet

我们可以在 servlet

中将 class 的对象声明为实例变量吗
public class BookServ extends HttpServlet {
    private static final long serialVersionUID = 1L;

    // declared object
    User user=new User();

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         ...
    }
}

当然可以。

User 字段没有多大意义,因为您的容器通常会实例化恰好一个 servlet 实例,其中恰好包含一个 User 实例。 但是这个 Servlet 实例允许在多个线程上并行 运行 倍增,因此多个线程可以同时访问单个 User 实例。

您可能希望在 servlet 中存储状态,这些状态在 servlet 的 init() 方法中初始化:

    public class BookServ extends HttpServlet {
        private static final long serialVersionUID = 1L;

        private String servletUID = null;

        public void init() throws ServletException {
            servletUID = ... generate a random String as UID ...
        }

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    
              ...
        }
    }

然而你应该知道有几个上下文应该用来存储 servlet 数据 (request.getServletContext())、会话数据 (request.getSession() 或请求数据 (request.setAttribute()/ request.getAttribute()) 到。 所以通常在 servlet 中几乎不需要字段。

同时检查 How do servlets work? Instantiation, sessions, shared variables and multithreading