Отображение сервлета Jetty с web.xml не работает - PullRequest
0 голосов
/ 20 октября 2019

Я создаю веб-приложение на Java с Jetty и пытаюсь сопоставить сервлеты с web.xml, но это не работает - все URL-адреса сопоставленных сервлетов возвращают ошибку Jetty 404.

Здесьmy /src/main/webapp/WEB-INF/web.xml file:

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

  <error-page>
    <error-code> 404 </error-code>
    <location> /error/404 </location>
  </error-page>


  <servlet>
    <servlet-name> MainPage </servlet-name>
    <servlet-class> xx.yyy.zzz.vvvvvvvv.HelloPageHandler </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name> MainPage </servlet-name>
    <url-pattern> /* </url-pattern>
  </servlet-mapping>

  <filter>
    <filter-name> HeaderFilter </filter-name>
    <filter-class> xx.yyy.zzz.vvvvvvvv.HeaderFilter </filter-class>
  </filter>
  <filter-mapping>
    <filter-name> HeaderFilter </filter-name>
    <url-pattern> /* </url-pattern>
  </filter-mapping>

</web-app>

(реальное имя пакета скрыто по понятным причинам)

Основной код класса модуля запуска:

public static void main(String[] args) {
        Logger.getGlobal().log(Level.FINE, "Starting server");
        try {
            Server server = new Server(10800);
            ServletHandler servletHandler = new ServletHandler();

            server.start();
            server.join();
        } catch (Exception e) {
            Logger.getGlobal().log(Level.SEVERE, "Exception while starting server", e);
        }
    }

Однако при попыткедля просмотра отображенного URL:

Ошибка Jetty

Я попытался:

public static void main(String[] args) {
        Logger.getGlobal().log(Level.FINE, "Starting server");
        try {
            Server server = new Server(10800);

            ServletHandler servletHandler = new ServletHandler();

            server.setHandler(servletHandler);
            ServletHolder holder = new ServletHolder(new HelloPageHandler());
            servletHandler.addServletWithMapping(holder,  "/abcd/*");
            servletHandler.addFilterWithMapping(HeaderFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));

            server.start();
            server.join();
        } catch (Exception e) {
            Logger.getGlobal().log(Level.SEVERE, "Exception while starting server", e);
        }
    }

Однако добавление каждого сервлета в метод main по отдельностиповторяется и кажется глупым и неправильным. Есть идеи, почему это может происходить?

Заранее спасибо

...