This question already has an answer here:
Different ways to get Servlet Context
                                
                                    (1个答案)
                                
                        
                                3年前关闭。
            
                    
我有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>");
}


在我的Web.xml中,我添加了以下上下文参数,

<context-param>
    <param-name>userid</param-name>
    <param-value>ABC12345</param-value>
</context-param>


我使用request.getServletContext().getInitParameter("userid");语句访问该参数。request.getServletContext().getInitParameter("userid");工作正常。但是getServletContext().getInitParameter("userid");request.getServletContext().getInitParameter("userid");之间没有任何区别,两者都给我相同的输出,但是我对这两个没有正确的认识。

最佳答案

您只能在代码位于扩展HttpServlet的类中时直接调用getServletContext()。这是因为HttpServlet基类已定义此方法。

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

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

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

07-24 09:22