Я создаю веб-приложение на 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 по отдельностиповторяется и кажется глупым и неправильным. Есть идеи, почему это может происходить?
Заранее спасибо