Возникли проблемы при развертывании простого веб-приложения в Jetty - PullRequest
0 голосов
/ 26 марта 2019

Я использую Jetty для написания простого сервера.

SimpleServer.java:

public class SimpleServer {

    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);
        server.setHandler(new ServerHandler());
        server.start();
        server.join();
    }   

}

ServerHandler.java:

public class ServerHandler extends AbstractHandler {

    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

        response.setContentType("text/html; charset=utf-8");
        response.setStatus(HttpServletResponse.SC_OK);
        baseRequest.setHandled(true);
        response.getWriter().println("<h1>Hello World</h1>");
    }
}

Я использую maven, чтобы упаковать файлы в файл war, а затем выбросить их в каталог jetty / webapps. У меня есть файл war с именем root.war, так что это означает, что контекст находится на localhost: 8080 /. Но когда я получаю к нему доступ, я получаю следующую ошибку в браузере:

HTTP ERROR 503

Problem accessing /. Reason:

    Service Unavailable

В консоли я получаю java.lang.reflect.InvocationTargetException. Этот проект работает и работает в IntelliJ. Только когда я помещаю это в папку jetty / webapps, я получаю ошибки.

1 Ответ

1 голос
/ 26 марта 2019

Ваш пример кодовой базы написан с использованием Jetty Handler API.

Файл WAR ожидает API сервлета , а не API обработчика Jetty.

Если вы хотите продолжить использовать API Jetty Handler, то вы останетесь с embedded-jetty и будете делать все без файла WAR.

Если вы хотите файл WAR, вам не нужно использовать Jetty Handler API.

Перенесите ваш код в Servlet API и добавьте ссылку на него в свой веб-дескриптор (WEB-INF/web.xml). Это даст правильный WAR-файл, который можно развернуть.

public class ServerServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    {
        response.setContentType("text/html; charset=utf-8");
        response.setStatus(HttpServletResponse.SC_OK);
        response.getWriter().println("<h1>Hello World</h1>");
    }
}

Примечание. При желании вы можете использовать Аннотация API сервлетов вместо WEB-INF/web.xml, но знайте, что вы хотите, чтобы в каталоге ${jetty.base} был настроен модуль annotations. включен.

...