【问题标题】:difference between req.getsession().getservletcontext() and getservletcontext()req.getsession().getservletcontext() 和 getservletcontext() 之间的区别
【发布时间】:2012-09-16 16:58:40
【问题描述】:

我已经看到您也可以直接调用 getservletcontext() ,也可以像这样 req.getsession().getservletcontext() 。

这两者有什么区别,我应该使用哪一个?有没有我应该使用一种而不是另一种的情况?

顺便说一句,我使用的是网络模块 2.5

【问题讨论】:

    标签: java servlets


    【解决方案1】:

    两者有什么区别

    两者没有区别,是一回事。

    你可以直接调用的方法getServletContext()只有当你的代码在一个扩展HttpServlet的类中。那是因为HttpServlet 基类定义了这个方法(实际上是在GenericServlet 扩展的GenericServlet 类中)。

    这个会话所属的req.getSession().getServletContext()is same as the one returned above.HttpSessioncontains a reference to theServletContext`返回的ServletContext

    我应该使用哪一个?有没有我应该使用一种而不是另一种的情况?

    只要您的代码在 servlet 类中,您就可以使用任何东西,因为两者都可以调用。

    假设(假设)您从 servlet 调用自定义类中的方法,并将会话对象传递给它以处理会话中的某些数据。这个自定义类不扩展 servlet。您需要在此自定义类中引用 ServletContext。由于您有对会话的引用,因此您可以使用方法 session.getServletContext() 访问 ServletContext。

    希望这很清楚。

    【讨论】:

    • 我是个菜鸟..你能帮我分解一下你的答案,以便我理解:( ....也许有一个例子
    • 实际上我没有得到你所说的“在 HttpServlet 类之外的地方使用”的部分。
    • @Nav,我试图详细说明我的答案。请查看编辑。
    【解决方案2】:

    Session 变量只为一个浏览器保存,Context 变量可以在一个会话中被所有浏览器使用。

    因此,如果用户只使用一种浏览器(大多数情况下都是如此),它们之间没有区别,但如果您希望在一个会话中使用不同的浏览器工作,则最好使用 Context

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多