我们可以在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
我们可以在 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