我们可以在Servlet中的方法外部声明一个字段吗

时间:2019-06-27 08:28:25

标签: java servlets

我们可以在servlet中将类的对象声明为实例变量吗?

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 {
         ...
    }
}

1 个答案:

答案 0 :(得分:0)

当然可以。

User字段没有多大意义,因为您的容器通常会实例化一个正好包含一个User实例的正好一个servlet实例。 但是,此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() / {{ 1}})。 因此,通常在Servlet中几乎不需要字段。

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