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

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

我没有做太复杂的事情:

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

我尝试了一些故障排除:

  • 发现该方法是在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 

对于我可能遗失的任何想法? 我感谢任何回应。

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

也可以看看:

  • 如何在Eclipse项目中导入javax.servlet API?
  • Servlet 3.0 API的Maven依赖?

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")); 

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

我最近遇到了同样的麻烦。 事实上,它在添加一些新的jar子后开始发生。 Ant在selenium-server.jar中找到了HttpServletRequest类,它在servlet-api.jar(应该使用它)之前按字母顺序排在第一位。 所以我只是将selenium-server.jar重命名为x-selenium-server.jar,一切都开始构建OK,就像以前一样。

这不是java编译器的问题。 javax由servlet容器本身提供,您必须在项目设置中包含servlet容器jar文件。

javax.servlet.http和所有与servlet上下文和servlet编程相关的类仅与您的Servlet容器相关。 因此,请停止对其他任何事情的担心,并检查Tomcat库是否包含在您的WEB-APP类路径中。

如果没有添加它们,一切都会好的。

右键单击项目>“属性”>“添加库”>“服务器运行时”

并选择与您的应用程序关联的服务器。

你完成了,这将包括你的项目的Servlet容器库和HttpServletRequest和HttpServletResponse类将被解决。

希望它有所帮助,有关Servlet架构和上下文的更多信息可以在这里找到。