Apache tomcat и servlet (новичок) - ошибка 404, может быть, классы не найдены? - PullRequest
0 голосов
/ 28 ноября 2018

Я новичок в сервлетах и ​​для сервлета "hello world style" я установил apache tomcat и создал в его каталоге webapps следующее:

servletdir
|- index.xhtml
|- WEB-INF
   |- web.xml
   |- classes
      |- mypackage
         |- ServletClass.class

Инициализировал все, чтобы я мог получить доступ к своемусервлет на локальном хосте:

web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app>

<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>mypackage.ServletClass</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/servleturl/*</url-pattern>
</servlet-mapping>

</web-app>

, а index.xhtml содержит форму, которая имеет action="/servleturl" method="get"

Теоретически, когда я запускаю tomcat,Теперь я должен получить доступ к сервлету и файлу index.xhtml через localhost:8080/servletdir/index.xhtml и отправить туда форму.Достижение индекса не составляет проблемы, но когда я отправляю форму, я получаю ошибку 404 для сервлета, говоря, что он: «Исходный сервер не нашел текущее представление для целевого ресурса или не хочет раскрыть, что он существует»..

Мой класс сервлетов не должен быть проблемой, он расширяет HttpServlet и переопределяет doGet для вывода простого html через getWriter().println() параметра ServletResponse параметра.Может ли ошибка в классе сервлетов вызвать 404?Моя структура каталогов или web.xml неверны?

Я перепробовал несколько структур каталогов и решений, в том числе:

  • структура плоского каталога в WEB-INF и класс не в пакете (нет каталога "classes")
  • нет WEB-INF, все в dir сервлета напрямую
  • оберните WEB-INF и index.xhtml в каталог с именем "WebContent"
  • keepкаталог "classes", но не используйте пакет, поместите файлы классов непосредственно в классы *

Я проследил несколько ресурсов, включая некоторые учебные пособия и множество вопросов, которые не имеют прямого отношения к моей проблеме, но содержат некоторую информацию, но поскольку я новичок в этой технологии, я не могу определить, какой ресурс хорош, а какой нет, поэтому я попробовал почти все, что нашел.

Структура каталогов, описанная вtop находится непосредственно на диске, как эта структура, а не в файле war, но, поскольку я могу получить доступ к некоторым частям, я думаю, что это не проблема.

*: обратите внимание, что я перекомпилируюкаждый раз при изменении структуры каталогов, представляющих пакет, менялись файлы java с соответствующим «пакетом» в верхней строке файла, это не проблема

1 Ответ

0 голосов
/ 28 ноября 2018

изменить action="/servleturl" method="get" на action="/servletdir/servleturl" method="get" или action="servleturl" method="get".

с помощью action="/servleturl", вы пытаетесь получить доступ к корневому относительному пути, но у вас отсутствует контекстный путь servletdir.

Если вы используете action="servleturl", вам не нужно указывать путь контекста в action, так как он получит его из текущего URL

...