ServletContext 不是thread safe的,因为它里面的信息是整个web app所有servlet和jsp共享的。所以访问是要进行并发控制。
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
out.println(“test context attributes”);
synchronized(getServletContext()) {
getServletContext().setAttribute(“foo”, “22”);
getServletContext().setAttribute(“bar”, “42”);
out.println(getServletContext().getAttribute(“foo”));
out.println(getServletContext().getAttribute(“bar”));
}
}
session也不是thread safe的。因为一个客户端可以开多个浏览器窗口,但是它们都属于一个session。
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
out.println(“test session attributes<br>”);
HttpSession session = request.getSession();
synchronized(session) {
session.setAttribute(“foo”, “22”);
session.setAttribute(“bar”, “42”);
out.println(session.getAttribute(“foo”));
out.println(session.getAttribute(“bar”));
}
}