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

Dav*_*ock 15 java servlets compiler-errors classpath

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

我没有做太复杂的事情:

public static void setMySortedSet(HttpServletRequest request, SortedSet<String> set) 
{
   setMySortedSet(request.getServletContext(), set);
}
Run Code Online (Sandbox Code Playgroud)

我尝试了一些故障排除:

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

当我使用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
Run Code Online (Sandbox Code Playgroud)

我可能缺少什么想法?我感谢任何回应.

小智 26

getServletContext()方法在Servlet 3.0中引入,而不是2.3.但是,如果你想得到ServletContext它的替代方法是:

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

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

这样您就可以在不同的浏览器中获取存储的请求参数值....


Bal*_*usC 17

根据Javadoc,ServletRequest#getServletContext()方法在Servlet 3.0中引入,而不是2.3.您需要在Eclipse中安装和集成Servlet 3.0兼容容器(如Tomcat 7,Glassfish 3等),并将Dynamic Web Project 的Target Runtime设置为该容器.当你正确地执行此操作时,您不需要手动编写构建路径,或者根本不需要build.xmlEclipse自动处理它.您也不需要下载不同make/version的任意servletcontainer的松散JAR文件,并将其放在buildpath中.它只会导致未来的类路径和可移植性问题.

也可以看看: