嵌入式码头. java.lang.IllegalStateException:!STOPPED
发布时间:2020-12-15 04:35:34 所属栏目:Java 来源:网络整理
导读:我试图在嵌入式jetty容器中制作简单的servlet. 这是我的码头配置: public class Application { public static void main(String[] args) throws Exception { //-Dport=8188 int port = 8188; if(System.getProperty("port") != null) { port = Integer.valu
我试图在嵌入式jetty容器中制作简单的servlet.
这是我的码头配置: public class Application { public static void main(String[] args) throws Exception { //-Dport=8188 int port = 8188; if(System.getProperty("port") != null) { port = Integer.valueOf(System.getProperty("port")); } //-Dhost="127.0.0.1" String host = System.getProperty("host"); if(host == null || host.isEmpty()) { host = "127.0.0.1"; } ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); InetAddress address = InetAddress.getByName(host); InetSocketAddress socketAddress = new InetSocketAddress(address,port); Server jettyServer = new Server(socketAddress); jettyServer.setHandler(context); ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class,"/*"); jerseyServlet.setInitOrder(0); // Initializing servlet jerseyServlet.setInitParameter( "jersey.config.server.provider.classnames",Proxy.class.getCanonicalName() ); try { jettyServer.start(); jettyServer.join(); } finally { jettyServer.destroy(); } } } 我添加了一个最简单的servlet,它什么都不做.刚写了一些字符串来回复: public class Proxy extends HttpServlet { protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { doRequest(request,response); } protected void doPost(HttpServletRequest request,response); } private void doRequest(HttpServletRequest request,HttpServletResponse response) throws IOException { PrintWriter writer = response.getWriter(); writer.println("GOT IT!"); } } 当我启动它时,我收到一个错误: 2016-08-14 10:53:42.338:INFO::main: Logging initialized @110ms 2016-08-14 10:53:47.404:INFO:oejs.Server:main: jetty-9.3.z-SNAPSHOT 2016-08-14 10:53:47.923:INFO:oejsh.ContextHandler:main: Started o.e.j.s.ServletContextHandler@8458f04{/,null,AVAILABLE} Exception in thread "main" java.lang.IllegalStateException: !STOPPED at org.eclipse.jetty.server.handler.HandlerWrapper.destroy(HandlerWrapper.java:135) at ru.gridr.Application.main(Application.java:50) 哪里出错了? 解决方法
当你执行jettyServer.destroy()时,你请求销毁
一旦服务器完成启动,就会执行此代码: jettyServer.join(); 所以,你应该删除块: finally { jettyServer.destroy(); } 因为我想你希望你的服务器在启动后继续工作. 我猜这个消息
你应该在停止之后使用jettyServer.destroy(),我想在两种情况下: >如果在服务器启动期间发生任何异常. 如果在服务器启动期间发生任何异常,您可以尝试这样的事情: try { jettyServer.start(); jettyServer.join(); } catch (Exception e){ logger.errror("error during server starting",e) jettyServer.stop(); jettyServer.destroy(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |