我已经看到你也可以直接调用getservletcontext(),也喜欢这个req.getsession()。getservletcontext()。
两者之间有什么区别,我应该使用哪一个?是否有任何基于我应该使用的场景而不是其他场景?
顺便说一句,我使用的是web模块2.5
答案 0 :(得分:9)
两者之间有什么区别
两者之间没有区别,它们是同一个。
只有当您的代码位于扩展getServletContext()
的类中时,才能直接调用的方法HttpServlet
。这是因为HttpServlet
基类定义了这个方法(实际上在GenericServlet
类中HttpServlet
扩展了。)
req.getSession()返回的ServletContext
。getServletContext()is same as the one returned above.
此会话所属的HttpSession contains a reference to the
ServletContext`。
我应该使用哪一个?是否有任何基于我应该使用的场景而不是其他场景?
只要你的代码在servlet类中,就可以使用任何东西,因为两者都可以被调用。
假设(假设)您从servlet调用自定义类中的方法,并将会话对象传递给它以处理会话中的某些数据。此自定义类不扩展servlet。您需要在此自定义类中引用ServletContext
。由于您具有对会话的引用,因此可以使用方法session.getServletContext()
访问ServletContext。
希望这很清楚。
答案 1 :(得分:-1)
会话变量仅保存在一个浏览器中,上下文变量可供所有浏览器在一个会话中使用。
因此,如果用户仅使用一个浏览器(在大多数情况下),则它们之间没有区别,但如果您希望在一个会话中使用不同的浏览器,请更好地使用上下文。