即时建立一个小的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