在 Jetty 中部署简单的 Web 应用程序时遇到问题
Having trouble deploying simple web app in Jetty
我正在使用 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目录下。我有一个名为 root.war 的 war 文件,这意味着上下文位于 localhost:8080/。但是当我访问它时,在浏览器中出现以下错误:
HTTP ERROR 503
Problem accessing /. Reason:
Service Unavailable
在控制台中,我得到一个 java.lang.reflect.InvocationTargetException
。该项目在 IntelliJ 中运行。只有当我把它放在 jetty/webapps 文件夹中时,我才会出错。
您的示例代码库是使用 Jetty Handler
API.
编写的
WAR 文件需要 Servlet API,而不是 Jetty 处理程序 API。
如果您想继续使用 Jetty Handler
API,那么您将继续使用 embedded-jetty
并在没有 WAR 文件的情况下完成所有操作。
如果你想要一个 WAR 文件,那么你将不得不不使用 Jetty Handler
API.
将您的代码迁移到使用 Servlet API,并在您的 Web 描述符 (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>");
}
}
注意:您可以选择使用 Servlet API Annotations 而不是 WEB-INF/web.xml
,但要知道您需要将 ${jetty.base}
实例目录配置为具有 annotations
模块已启用。
我正在使用 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目录下。我有一个名为 root.war 的 war 文件,这意味着上下文位于 localhost:8080/。但是当我访问它时,在浏览器中出现以下错误:
HTTP ERROR 503
Problem accessing /. Reason:
Service Unavailable
在控制台中,我得到一个 java.lang.reflect.InvocationTargetException
。该项目在 IntelliJ 中运行。只有当我把它放在 jetty/webapps 文件夹中时,我才会出错。
您的示例代码库是使用 Jetty Handler
API.
WAR 文件需要 Servlet API,而不是 Jetty 处理程序 API。
如果您想继续使用 Jetty Handler
API,那么您将继续使用 embedded-jetty
并在没有 WAR 文件的情况下完成所有操作。
如果你想要一个 WAR 文件,那么你将不得不不使用 Jetty Handler
API.
将您的代码迁移到使用 Servlet API,并在您的 Web 描述符 (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>");
}
}
注意:您可以选择使用 Servlet API Annotations 而不是 WEB-INF/web.xml
,但要知道您需要将 ${jetty.base}
实例目录配置为具有 annotations
模块已启用。