2015-06-04 3 views
1

У меня есть webapp с Maven, который использует плагин Tomcat для сервера. Приложение скомпилируется в .war, который при извлечении, кажется, содержит все классы (включая сервлеты) в папке WEB-INF/classes.Maven Tomcat plugin - 404 WebServlet не найден

Когда URL http://localhost:8080/com.galya.crm получает удар, index.html (который является SPA приложения) загружается нормально перенаправление http://localhost:8080/com.galya.crm/#!/login/msg/notlogged

У меня есть 4 сервлетов аннотированных аналогичным образом:

@WebServlet("/restapi/login") 
public class LoginController extends HttpServlet { 

Проблема приходит, когда приложение SPA пытается аутентифицироваться с помощью сервлета входа (показано выше). Я ожидаю, что он будет здесь: http://localhost:8080/com.galya.crm/restapi/login, но я получаю ошибку 404.

Ниже я приложил папку плагина Tomcat, которая автоматически создается. Рабочий каталог пуст, и я не уверен, что все в порядке.

enter image description here

Первоначально WebApp/WEB-INF/web.xml был автоматически сгенерирован и содержала следующее:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > 
<web-app> 
<display-name>Archetype Created Web Application</display-name> 
</web-app> 

Я также попытался изменить его принять WebServlet аннотаций, но не сделал работа также:

<!DOCTYPE web-app PUBLIC 
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd" > 
<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"> 
</web-app> 

PS Приложение некоторое время назад работало на другом сервере, поэтому проблема должна быть в конфигурациях сервера, а не в самом коде.

+0

Я только что увидел, что сервер Tomcat использует свою конфигурацию из \ target \ tomcat \ conf \ web.xml, где версия "2.5". Кажется, что это должно быть проблемой, но вставка фрагмента для 3.0 сверху не работает ... – Galya

+0

ОК, похоже, я сделал ужасно глупую ошибку. Я запустил команду tomcat: run, которая запустила еще один сервер, сконфигурированный с помощью Idea, а не с плагином. Теперь, когда я использую команду tomcat7: запустите и с помощью конфигураций версии 3, сервлеты работают. Но index.html теперь дает ошибку 404, даже если указан в списке приветственных файлов – Galya

ответ

0

Несомненно, причиной является то, что дескриптор развертывания должен быть объявлен версией 3.0. Ваш web.xml все равно 2.3.

Удалить декларацию DOCTYPE и оставить корневой узел так же, как вы уже сделали:

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

Испытано себя, и это сработало.

+0

Вы имеете в виду Doctype? – Galya

+0

Да. В последнем скрипте OP устанавливал как тип документа, так и схему, разных версий. Я предполагаю, что декларация doctype имеет приоритет над схемой, поэтому лучше отказаться от нее. –

+0

Это может быть проблема, но прошло много времени, и я не уверен, что произошло. Тем не менее я собираюсь принять ваш ответ за усилия. – Galya