我有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");两者之间有什么区别,两者都给我相同的输出,但我对这两个没有正确的想法.
getServletContext()只有当你的代码在扩展HttpServlet的类中时才可以直接调用.那是因为HttpServlet基类定义了这个方法.
返回的ServletContext request.getSession().getServletContext()与getServletContext().HttpSession 相同,包含对此会话所属的ServletContext的引用.
只要你的代码在servlet类中,就可以使用任何东西,因为两者都可以被调用.
如果您有一个不扩展servlet的自定义类,并且您需要传递会话对象以在该自定义类中处理它.当您有对该会话的引用时,您可以访问ServletContext使用该方法session.getServletContext().