request.getServletContext() 未找到,即使使用新的 JAR 也是如此

2022-09-03 08:54:03

我的编译器无法找到 HttpServletRequest getServletContext() 方法。

我没有做任何太复杂的事情:

public static void setMySortedSet(HttpServletRequest request, SortedSet<String> set) 
{
   setMySortedSet(request.getServletContext(), set);
}

我尝试过的一些故障排除:

  • 发现该方法是在2.3中创建的,因此我包含了一个反映该方法的JAR(并将其放在我的Eclipse构建路径中)
  • 我将JAR包含在我的构建.xml类路径中。

当我使用Eclipse时,找到了该方法,但是当我尝试构建类时,我看到了这样:

compile:
[javac] Compiling 1 source files to C:\...\workspace\proj\build\WEB-INF\classes
[javac] C:\...\workspace\proj\src\main\Helper.java:26: cannot find symbol
[javac] symbol  : method getServletContext()
[javac] location: interface javax.servlet.http.HttpServletRequest
[javac]     return getURISet(request.getServletContext());
[javac]                       ^
[javac] Note: C:\...\workspace\proj\src\main\Helper.java uses unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] 1 error

关于我可能错过什么的任何想法?我感谢任何回应。


答案 1

该方法在 Servlet 3.0 中引入,而不是在 2.3 中引入。但是,如果您想获得,那么另一种获得它的方法是:getServletContext()ServletContext

ServletContext context = request.getSession().getServletContext();

if (username != "" & username != null ) {
    context.setAttribute("savedUserName", username);
}
writer.println("Context Parameter : " + (String)context.getAttribute("savedUserName"));

通过这种方式,您可以在不同的浏览器中获取存储的请求参数值。


答案 2

根据Javadoc,该方法是在Servlet 3.0中引入的,而不是在2.3中引入的。您需要在 Eclipse 中安装和集成一个 Servlet 3.0 兼容容器,如 Tomcat 7Glassfish 3 等,并将动态 Web 项目的目标运行时设置为该容器。当你正确地做到这一点时,那么你不需要手动摆弄构建路径,或者根本不需要,Eclipse会自动为你处理它。您也不需要下载不同品牌/版本的任意 servlet 容器的松散 JAR 文件并将其放入构建路径中。这只会导致未来的类路径和可移植性问题。ServletRequest#getServletContext()build.xml

另请参阅:


推荐