Подтвердить что ты не робот

Request.getServletContext() не найден, даже с новым JAR

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

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

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

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

  • Обнаруженный метод был создан в 2.3, поэтому я включил JAR, который отражает это (и имеет его в моем пути построения Eclipse).
  • Я включаю JAR в свой путь к классам build.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

Любые идеи о том, чего я могу потерять? Я ценю любые ответы.

4b9b3361

Ответ 1

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

См. также:

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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

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

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

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

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