Контекст сервлета Jetty не найден
Я использую Jetty с двумя обработчиками, webapp и servlet и двумя контекстами, "/" и "/ d / *".
Webapp загружается нормально, в то время как я получаю "404 Not found" при попытке перейти на сервлет.
Вот код, который я использую:
public static void main(String[] args){
// The simple Jetty config here will serve static content from the webapp directory
String webappDirLocation = "src/main/webapp/";
// The port that we should run on can be set into an environment variable
// Look for that variable and default to 8080 if it isn't there.
String webPort = System.getenv("PORT");
if (webPort == null || webPort.isEmpty()) {
webPort = "7777";
}
Server server = new Server(Integer.valueOf(webPort));
HandlerCollection handlerCollection = new HandlerCollection();
// Add the GUI part
WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/");
webapp.setDescriptor(webappDirLocation + "/WEB-INF/web.xml");
webapp.setResourceBase(webappDirLocation);
handlerCollection.addHandler(webapp);
// Add the API part
ServletContextHandler apiContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
apiContext.setContextPath("/d");
apiContext.addServlet(new ServletHolder(new DownloaderServlet()), "/*");
handlerCollection.addHandler(apiContext);
// Add both handlers to the server
server.setHandler(handlerCollection);
try {
server.start();
server.join();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
Код сервлета:
@SuppressWarnings("serial")
@WebServlet
public class DownloaderServlet extends HttpServlet {
public DownloaderServlet(){}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<html><body><h1>My Servlet</h1></body></html>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
1 ответ
Я думаю, что это ошибка в Jetty. Обратная связь приветствуется. В любом случае добавление обработчика сервлета до того, как обработчик веб-приложения решил проблему:
HandlerCollection handlerCollection = new HandlerCollection();
// Add the API part
ServletContextHandler apiContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
apiContext.setContextPath("/d");
apiContext.addServlet(new ServletHolder(new DownloaderServlet()), "/*");
handlerCollection.addHandler(apiContext);
// Add the GUI part
WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/");
webapp.setDescriptor(webappDirLocation + "/WEB-INF/web.xml");
webapp.setResourceBase(webappDirLocation);
handlerCollection.addHandler(webapp);
// Add both handlers to the server
server.setHandler(handlerCollection);
Этот пример помог мне отладить эту проблему.