request.get/setAttribute()vs this.getServletContext().get/setAttribute()

Evg*_*rov 3 java jsp servlets

get/setAttribute()你从请求和来自之间调用它们之间的区别是什么getServletContext().我注意到你需要

RequestDispatcher rd = request.getRequestDispatcher("/view.jsp");
rd.forward(request, response); 
Run Code Online (Sandbox Code Playgroud)

要求工作,但您只需要导航到应用程序中的另一个jsp或servlet即可使用getServletContext().getAttribute().

但我不明白背后发生了什么.

Bal*_*usC 10

request.setAttribute()套在请求范围的属性,并且因此仅在同一请求/响应循环内可用.该servletContext.setAttribute()套应用程序中的范围的属性,并且因此所有其他请求/会话之间共享.当涉及特定于请求的数据时,您不希望这样做,否则访问者Y将能够看到访问者X的数据.

如果您希望某个属性在重定向response.sendRedirect()后仍然存在,则请求范围不合适,因为重定向基本上指示客户端(webbrowser)创建全新的HTTP请求.你需要把数据在session范围内session.setAttribute(),而不是在应用范围(最好取下,如果它doen't必须在整个会议期间持续在后续请求的话).

也可以看看: