부두 8을 서버 및 웹 소켓으로 사용하는 작은 웹 앱을 작성합니다.부두 8 웹 소켓 및 세션
클라이언트 (브라우저) 측 : 사용자가 브라우저 (index.html)를 열고 열면 내 jetty 서버와의 새로운 WebSocket 연결이 설정됩니다.
서버 측에서 WebSocket 연결을 수신 대기하는 WebSocketServlet이 있습니다.
@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 수신 및 WebSocket을 통해 메시지를 보내는 부두의 WebSocket.OnTextMessage 인터페이스를 구현하는 클래스입니다.
지금까지 너무 좋아서 지금까지 모든 것이 잘 작동합니다.
index.html 사이트는 다른 (비 WebSocket) 서블릿에서 간단한 양식 데이터를 제출하는 것처럼 일부 Ajax 호출을 수행 할 수 있기 때문에 HttpSession을 사용하여 현재 사용자를 식별합니다. 이 두 서블릿 (WebSocketServlet 및 SearchServlet)이 두 diffrent의 HttpSession ID를 가진 두 개의 diffrent의 HttpSession 객체를 가지고,
public class SearchServlet extends HttpServlet{
...
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(request.getSession());
}
...
}
내 문제는 다음과 같습니다 : HTTP POST 등을 통해
예를 들어내 SearchServlet를 보라
내 WebSocketServlet에 대한 doWebSocketConnect() 세션 ID가 1dwp0u93ght5w1bcr12cl2l8gp이고 SearchServlet에 세션 ID가 1sbglzngkivtf738w81a957pp인데 사용자가 여전히 동일한 브라우저 및 동일한 페이지 (index.html)에 있고 다시로드하지 않은 경우 페이지 등 WebSocket 연결을 설정하고 SearchServlet 호출 사이의 시간은 단지 몇 초입니다 ...
어떤 제안?
EDIT : btw. 두 서블릿은 동일의 ServletContext에 있습니다 내가 볼 수있는 두 가지 원인이 있습니다
ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletContext.setContextPath("/servlets");
servletContext.addServlet(new ServletHolder(new MyWebSocketServlet()),"/liveCommunication");
servletContext.addServlet(new ServletHolder(new SearchServlet()),"/search");
답장을 보내 주셔서 감사합니다. 너의 가정과 함께 너의 권리가 있다고 생각해. 2. 나는 부두를 자신의 임베디드 서버로 사용한다. 그리고 문제는 내 정적 콘텐츠 파일 (index.html)이 HTTP 세션을 아직 시작하지 않았다는 것입니다. 내 문제를 해결하려면 index.html이 새 세션을 시작해야하며 WebSocketServlet과 SearchServlet이 index.html과 동일한 세션을 가져야합니다. 내 문제는 구현 방법이 없습니다. 나는 ResourceHandler를 가지고있다. resourceHandler = new ResourceHandler(); resourceHandler.setWelcomeFiles (new String [] { "index.html"}); 어디에서 SESSION을 사용할 수 있습니까? – sockeqwe
ResourceHandler를 감싸는 SessionHandler를 사용하는 것 같습니다 ... 도와 줘서 고마워! – sockeqwe