#java #embedded-jetty
#java #встроенный-jetty
Вопрос:
Я использую java 11 и встроенный jetty 9 для моего приложения JavaEE, я пытаюсь использовать аннотацию @Websevlet для публикации моего сервлета, но это не работает, я не знаю почему. Мой начальный класс java
import org.eclipse.jetty.annotations.AnnotationConfiguration;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.*;
public class Start {
public static void main(String[] args) throws Exception {
Server server = new Server(80);
WebAppContext wacHandler = new WebAppContext();
wacHandler.setConfigurations(new Configuration[]
{
new AnnotationConfiguration(),
new WebInfConfiguration(),
new WebXmlConfiguration(),
new MetaInfConfiguration(),
new FragmentConfiguration(),
new JettyWebXmlConfiguration()
});
server.setHandler(wacHandler);
server.start();
server.join();
}
}
Мой класс hello world
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet( "/getservlet")
public class ServletX extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>Hi there..</h1>");
}
}
У меня нет web.xml конфигурация, что я должен делать?
Комментарии:
1. Где находится ServletX? Это в файле WAR, который использует встроенный Jetty? или это где-то еще, например, в uberjar или в пути к классу контейнера?
2. servletX в файле WAR, который использует встроенный jetty
3. Тогда почему вы не ссылались на этот файл WAR в своем примере кода? У
WebAppContext
должно бытьsetWar()
или.setBaseResource()
, вызываемое против WAR (или распакованный каталог webapp), чтобы оно работало.
Ответ №1:
Если ServletX
находится в файле war, то есть в WEB-INF/classes/
каталоге архива, то объявленная вами конфигурация (в частности, AnnotationConfiguration
) выполнит сканирование байт-кода файла WAR и загрузит @WebServlet
аннотацию.
Также обратите внимание, что WebAppContext
потребуется указать на этот файл WAR, чего не делают ваши примеры кода.
WebAppContext wacHandler = new WebAppContext();
waxHandler.setWar("/path/to/myapp.war");
// ... more setup
Но! если этого ServletX
нет в файле WAR, но вместо этого он размещен в вашем классе embedded-jetty Start
, то вам нужно предоставить контейнер сервлета для проверки на этапе сканирования байт-кода.
Вы всегда можете включить ведение журнала ОТЛАДКИ / ТОЧНОГО уровня для именованного регистратора org.eclipse.jetty
и посмотреть, какие действия выполняются в отношении развертывания и сканирования байт-кода.
Комментарии:
1. Спасибо, сэр, за вашу помощь, у меня есть второй случай, возможно, servletX в моем классе запуска embedded-jetty, можете ли вы предоставить более подробную информацию об этом случае.