我们可以在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 {
...
}
}
答案 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