2014-07-08 120 views
0

我綁定使用Jetty運行一個servlet,但只能使用java代碼(embedded jetty)。 這裏是我的兩個類:是否可以在沒有web.xml文件的情況下在jetty上運行servlet?

ExampleServer.java:

import org.eclipse.jetty.server.Connector; 
import org.eclipse.jetty.server.Handler; 
import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.server.ServerConnector; 
import org.eclipse.jetty.server.handler.DefaultHandler; 
import org.eclipse.jetty.server.handler.HandlerCollection; 
import org.eclipse.jetty.servlet.ServletContextHandler; 

/** 
* Created by Administrator on 7/8/14. 
*/ 
public class ExampleServer { 

    public static void main(String[] args) throws Exception { 
     Server server = new Server(); 
     ServerConnector connector = new ServerConnector(server); 
     connector.setPort(8080); 

     server.setConnectors(new Connector[]{connector}); 

     ServletContextHandler context = new ServletContextHandler(); 
     context.setContextPath("/hello"); 
     context.addServlet(HelloServlet.class, "/"); 

     HandlerCollection handlers = new HandlerCollection(); 
     handlers.setHandlers(new Handler[]{context, new DefaultHandler()}); 
     server.setHandler(handlers); 

     server.start(); 
     server.join(); 
    } 
} 

HelloServlet.java:

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException; 

/** 
* Created by Administrator on 7/8/14. 
*/ 
public class HelloServlet extends HttpServlet{ 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     response.setContentType("text/html"); 
     response.setStatus(HttpServletResponse.SC_OK); 
     response.getWriter().println("<h1>Hello from HelloServlet</h1>"); 
     response.getWriter().println("session=" + request.getSession(true).getId()); 
    } 
} 

現在,當我試圖訪問http://localhost:8080/hello我得到以下錯誤:

HTTP錯誤:500

訪問/ hello /時出現問題。原因:

java.lang.IllegalStateException: No SessionManager 

有關如何解決該問題的任何想法? 謝謝。

+0

是的,如果你嵌入服務器並在啓動時提供正確的參數。也就是說,你調用自己的主 – maress

+0

所以我必須添加一些東西在我的主要方法? – skiabox

+0

您會看到web.xml數據只是配置數據。您在啓動服務器時提供參數。谷歌嵌入式碼頭,你會看到如何傳遞參數 – maress

回答

1

你似乎已經錯過了一步,

context.addServlet(HelloServlet.class, "/"); 
context.setSessionHandler(new org.eclipse.jetty.server.session.SessionHandler()); 

通常情況下,使用配置文件來設置,默認情況下(或使用JDBCSessionManager爲集羣)。另外,你只需要這個,因爲你叫request.getSession(true).getId()

相關問題