2013-10-31 30 views
4

請給我建議如何正確設置Jetty。我正在使用最新版本的jetty(9.0.6.v20130930)。我訂購服務器實現具體的servlet,它不工作! 我已經與Jetty合作過一次,並沒有看到類似的東西。java.lang.IllegalStateException:沒有SessionManager

- Main.class

public static void main(String[] args) throws Exception 
    { 
     MessageSystem ms = new MessageSystem(); 
     Frontend frontend = new Frontend(ms); 

     (new Thread(frontend)).start(); 

     Server server = new Server(8080); 
     server.setHandler(frontend); 

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

    } 

- Frontend.class

public class Frontend extends AbstractHandler implements Runnable, Abonent { 
    ... constructor and others methods... 

    public void handle(String target, Request baseRequest, 
         HttpServletRequest request, 
         HttpServletResponse response) 
      throws IOException, ServletException 
    { 
     setResponseSettings(baseRequest,response); 
     PrintWriter out = response.getWriter(); 

     try { 
      int id; 
      HttpSession session = request.getSession(); 
      if(session.isNew()){ 
       id = setSessionId(session); 
       pageContent = "Hello new user! Your id: "+id; 
       out.println(new Page().enterName()); 
      }else{ 
       id = getSessionId(session); 
       pageContent = "Hi! I remember you. You are: " +id; 
       out.println(new Page().normalContent()); 
      } 
     } 
     catch (IllegalStateException ex){ 
      System.out.println("Exception!"+ex); 
     } 
     out.println("<H1>" + pageContent + "</H1>"); 
     Iterator iterator = listStrings.iterator(); 
     while (iterator.hasNext()){ 
      out.println("<br>"); 
      out.println("Your text from TextField: "+iterator.next()); 
     } 
     out.close(); 
    } 

- Сonsole

2013-11-01 04:06:24.273:INFO:oejs.Server:main: jetty-9.0.6.v20130930 
2013-11-01 04:06:24.309:INFO:oejs.ServerConnector:main: Started [email protected]0f79{HTTP/1.1}{0.0.0.0:8080} 
Exception!java.lang.IllegalStateException: No SessionManager 
Exception!java.lang.IllegalStateException: No SessionManager 
+0

你還沒有看過我的話題.. OMG –

+1

@ paulsm4是埃爾達爾被問的問題是關於原料碼頭處理器+會話使用。鏈接到的可能的重複是當您有一個完全合格的Web應用程序時,Eldar不會。 –

回答

11

你缺少三樣東西。

Main.java

import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.server.handler.ContextHandler; 
import org.eclipse.jetty.server.session.HashSessionIdManager; 
import org.eclipse.jetty.server.session.HashSessionManager; 
import org.eclipse.jetty.server.session.SessionHandler; 

public class Main 
{ 
    public static void main(String[] args) 
    { 
     MyDumpHandler dump = new MyDumpHandler(); 

     Server server = new Server(8080); 

     // Specify the Session ID Manager 
     HashSessionIdManager idmanager = new HashSessionIdManager(); 
     server.setSessionIdManager(idmanager); 

     // Sessions are bound to a context. 
     ContextHandler context = new ContextHandler("/"); 
     server.setHandler(context); 

     // Create the SessionHandler (wrapper) to handle the sessions 
     HashSessionManager manager = new HashSessionManager(); 
     SessionHandler sessions = new SessionHandler(manager); 
     context.setHandler(sessions); 

     // Put dump inside of SessionHandler 
     sessions.setHandler(dump); 

     // Tree is now 
     // Server 
     // + ContextHandler("/") 
     //  + SessionHandler(Hash) 
     //   + MyDumpHandler 

     try 
     { 
      server.start(); 
      server.join(); 
     } 
     catch (Throwable t) 
     { 
      t.printStackTrace(); 
     } 
    } 
} 

MyDumpHandle r.java

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

import org.eclipse.jetty.server.Request; 
import org.eclipse.jetty.server.handler.AbstractHandler; 

public class MyDumpHandler extends AbstractHandler 
{ 
    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException 
    { 
     PrintWriter out = response.getWriter(); 
     response.setContentType("text/plain"); 

     try 
     { 
      HttpSession session = request.getSession(); 
      if (session.isNew()) 
      { 
       out.printf("New Session: %s%n", session.getId()); 
      } 
      else 
      { 
       out.printf("Old Session: %s%n", session.getId()); 
      } 
     } 
     catch (IllegalStateException ex) 
     { 
      out.println("Exception!" + ex); 
      ex.printStackTrace(out); 
     } 
     out.close(); 
    } 
} 
相關問題