request.getServletContext () не найден, даже с новым JAR - PullRequest
15 голосов
/ 22 октября 2011

Мой компилятор не может найти метод HttpServletRequest getServletContext () .

Я не делаю ничего слишком сложного:

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

Некоторые попытки устранения неполадок, которые я пробовал:

  • Обнаружил, что метод был создан в 2.3, поэтому я включилJAR, который отражает это (и имеет его в моем пути сборки Eclipse)
  • Я включаю JAR в мой build.xml classpath.

Когда я использую 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

Есть идеи о том, чего мне не хватает?Я ценю любые ответы.

Ответы [ 4 ]

26 голосов
/ 11 апреля 2012

Метод 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"));

Таким образом, вы можете получить сохраненное значение параметра запроса в другом браузере ....

17 голосов
/ 22 октября 2011

Согласно Javadoc метод ServletRequest#getServletContext() введен в Servlet 3.0, а не в 2.3.Вам необходимо установить и интегрировать Servlet 3.0-совместимый контейнер, такой как Tomcat 7 , Glassfish 3 и т. Д., В Eclipse и установить Target Runtime вашего Dynamic Web Projectв этот контейнер.Если вы сделаете это правильно, то вам , а не , придется вручную манипулировать путями сборки или вообще build.xml, Eclipse будет обрабатывать это для вас автоматически.Вы также не должны загрузить свободные JAR-файлы произвольного сервлет-контейнера другой марки / версии и поместить его в свой путь сборки.Это приведет только к будущим проблемам пути к классам и переносимости.

См. Также:

1 голос
/ 04 июня 2012

У меня недавно была такая же проблема. Фактически это начало происходить после добавления некоторых новых банок. Ant нашел класс HttpServletRequest в selenium-server.jar, который в алфавитном порядке стоит перед servlet-api.jar (который должен был использоваться). Поэтому я просто переименовал selenium-server.jar в x-selenium-server.jar, и все стало нормально, как раньше.

0 голосов
/ 14 мая 2013

Это не проблема с вашим Java-компилятором. javax предоставляется самим контейнером сервлетов, и вы должны включить файлы jar контейнера сервлетов в настройки вашего проекта.

javax.servlet.http и все связанные с классами контексты сервлетов и программирование сервлетов связаны только с вашим контейнером сервлетов. Так что перестаньте беспокоиться о чем-либо еще и проверьте, включены ли библиотеки Tomcat в путь к классу WEB-APP.

Если не добавить их, и все будет хорошо.

Щелкните правой кнопкой мыши свой проект> Свойства> Добавить библиотеки> Время выполнения сервера

и выберите сервер, связанный с вашим приложением.

Все готово, сюда будут включены библиотеки контейнеров сервлетов, и классы HttpServletRequest и HttpServletResponse будут разрешены.

Надеюсь, это поможет, больше информации об архитектуре и контексте сервлета можно найти Здесь.

...