request.getServletContext()和getServletContext()之间的区别

Sav*_*ake 1 java java-ee

我有SampleServlet课,我已经覆盖了doGet()如下方法

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String name = request.getParameter("name");

    String userid = (String)request.getServletContext().getInitParameter("userid");

    out.print("Name = " + name + "<br>");

    out.print("User id= " + userid+ "<br>");
}
Run Code Online (Sandbox Code Playgroud)

在我的内部Web.xml添加了上下文参数如下,

<context-param>
    <param-name>userid</param-name>
    <param-value>ABC12345</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

我使用request.getServletContext().getInitParameter("userid");statement来访问该参数.request.getServletContext().getInitParameter("userid");它的工作很好.然而getServletContext().getInitParameter("userid");,request.getServletContext().getInitParameter("userid");两者之间有什么区别,两者都给我相同的输出,但我对这两个没有正确的想法.

kar*_*sen 8

getServletContext()只有当你的代码在扩展HttpServlet的类中时才可以直接调用.那是因为HttpServlet基类定义了这个方法.

返回的ServletContext request.getSession().getServletContext()getServletContext().HttpSession 相同,包含对此会话所属的ServletContext的引用.

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

如果您有一个不扩展servlet的自定义类,并且您需要传递会话对象以在该自定义类中处理它.当您有对该会话的引用时,您可以访问ServletContext使用该方法session.getServletContext().