Почему сервер предварительного просмотра в Eclipse не учитывает мою аннотацию @WebServlet?

Я использую аннотацию @WebServlet в своем приложении, например:

@WebServlet("/tokenize")
public class TokenizerServlet extends HttpServlet {
   ...
}

Это не работает в «Предварительном просмотре J2EE на локальном хосте» в Eclipse. Любой запрос к http://localhost:8080/myApp/tokenizer возвращает 404. При сопоставлении с web.xml этот же URL работает нормально.

Однако когда приложение развернуто (в моем случае в Azure), оно работает. Так что проблема не в коде или конфигурации, а в сервере предварительного просмотра в Eclipse.

Как мне настроить сервер предварительного просмотра, чтобы он учитывал мою аннотацию? Я смотрел везде, и, похоже, не так много настроек, о которых можно было бы говорить. Корневой элемент моего web.xml выглядит так:

<web-app 
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0">

В узле "Предварительный просмотр J2EE" в проекте у меня есть это:

введите здесь описание изображения

ОБНОВЛЕНИЕ --

У меня никогда не было решения для этого, но я обнаружил, что запустить Tomcat локально настолько просто, что вместо этого я начал делать это. Я оставляю этот вопрос здесь на случай, если у кого-то еще возникнет такая же проблема, просто чтобы вы знали, что вы не одиноки, и, возможно, кто-то когда-нибудь даст ответ.


person Deane    schedule 28.12.2017    source источник


Ответы (1)


Концепция аннотации в сервлете появилась при представлении сервлета 3.0. Любая более низкая версия ниже не будет поддерживать аннотацию. Я думаю, что в вашей среде IDE вы использовали версию сервлета ниже 3.0. При создании динамического веб-проекта эту версию можно изменить.

введите здесь описание изображения

person Nithin    schedule 28.12.2017
comment
Разве мой корневой тег web.xml (приведенный выше) не указывает на то, что я использую версию 3.0? - person Deane; 28.12.2017
comment
Если нет, то как мне использовать 3.0? Я использую Eclipse Oxygen — последнюю версию. 3.0 не поддерживает? - person Deane; 28.12.2017
comment
извините ... мой ответ не был полным ... пожалуйста, проверьте завершенный ответ - person Nithin; 28.12.2017
comment
Нет, 3.0 стоит по умолчанию, и я его не менял. Я только что проверил в разделе "Свойства проекта" - для динамического веб-проекта установлено значение 3.0. - person Deane; 28.12.2017
comment
Какой сервер использовался в eclipse?? - person Nithin; 28.12.2017
comment
Он просто называется J2EE Preview Server. - person Deane; 28.12.2017
comment
Я использовал аннотации в своих недавних динамических веб-проектах eclipse с сервером apache (ранее никогда не работал с J2EE Preview Server). Обычно это позволяет избежать использования файла web.xml. Запуск вашего приложения путем удаления web.xml (сохраните резервную копию) может работать в этом контексте. - person Nithin; 28.12.2017
comment
В вашем примере @WebServlet(/tokenize) действует как замена ‹servlet-mapping› ‹servlet-name›TokenizerServlet‹/servlet-name› ‹url-pattern›tokenize‹/url-pattern› ‹/servlet-mapping› в web.xml, если файл не используется - person Nithin; 28.12.2017
comment
Честно говоря, я просто запустил экземпляр Tomcat локально и начал запускать его оттуда. Я понятия не имею, в чем проблема с моим локальным Eclipse, но, вероятно, это лучше, чем я запускаю Tomcat. Спасибо за помощь, все равно. - person Deane; 28.12.2017
comment
Не говоря уже о Tomcat, я думаю, что удаление web.xml с вашего текущего сервера может сработать. Почувствовал себя счастливым, помогая вам .. - person Nithin; 28.12.2017
comment
Чтобы узнать больше об использовании apache в eclipse, посетите этот сайт: coreservlets.com/Apache-Tomcat-Tutorial/ - person Nithin; 28.12.2017