即時建立一個小的web應用程序,使用碼頭8作爲服務器和websockets。碼頭8 WebSocket和會話
在客戶端(瀏覽器)方面:用戶使用他的瀏覽器打開我的index.html,並打開並建立與我的碼頭服務器的新WebSocket連接。
在服務器端,我有一個WebSocketServlet偵聽WebSocket連接。
@Override
public WebSocket doWebSocketConnect(HttpServletRequest request, String arg1) {
System.out.println("doWebSocketConnect");
System.out.println("WebSocket "+request.getSession().getId());
return new UserWebSocket(request.getSession());
}
UserWebSocket是實現碼頭的,用於接收和通過的WebSockets發送消息WebSocket.OnTextMessage接口的類。
到目前爲止好,一切正常,迄今爲止。
所以我現在想要做的,是HttpSession的合作,以確定當前用戶,因爲 中的index.html網站也可以做其他(非的WebSocket)Servlet的一些Ajax調用,如提交一些簡單的表單數據通過HTTP POST等
例如看看我的SearchServlet:
public class SearchServlet extends HttpServlet{
...
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(request.getSession());
}
...
}
我的問題是,這兩個servlet(WebSocketServlet和SearchServlet)有兩種不同勢HttpSession對象有兩個不同勢HttpSession的IDS:
例如,我的WebSocketServlet在doWebSocketConnect()上獲得了會話ID = 1dwp0u93ght5w1bcr12cl2l8gp,而SearchServlet獲得了會話ID = 1sbglzngkivtf738w81a957pp,但用戶仍處於同一瀏覽器中並處於同一頁面(index.html)且未重新加載頁面等。建立WebSocket連接和SearchServlet通話之間的時間只需幾秒鐘...
有什麼建議嗎?
編輯:順便說一句。 兩個Servlet是在同一個ServletContext的:
ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletContext.setContextPath("/servlets");
servletContext.addServlet(new ServletHolder(new MyWebSocketServlet()),"/liveCommunication");
servletContext.addServlet(new ServletHolder(new SearchServlet()),"/search");
謝謝你的回答。我想你的權利與你的假設nr。 2.我使用碼頭作爲自己的嵌入式服務器。我想,問題是我的靜態內容文件(index.html)還沒有啓動Http會話。爲了解決我的問題,index.html必須啓動一個新的會話,然後WebSocketServlet和SearchServlet應該具有與index.html相同的會話。我的問題是,我不知道如何實現它。我有一個ResourceHandler resourceHandler = new ResourceHandler(); resourceHandler.setWelcomeFiles(new String [] {「index.html」}); 我在哪裏啓用SESSION? – sockeqwe 2012-02-06 11:39:46
似乎現在使用包裝ResourceHandler的SessionHandler工作...感謝您的幫助! – sockeqwe 2012-02-06 12:56:58