2016-02-28 27 views
0

我是websocket的新手,所以我在我的项目中遇到了一些问题。我正在创建一个聊天室。我有一个登录页面,将由UsernameServlet处理,然后它将链接到chatpage.html,它将打开一个websocket(聊天室服务器端点)。与Java的Web套接字映射

这里是我的loginpage.html

<body> 
    <form action="localhost:8080/chatRoom/UserNameServlet" name="submitForm" onchange="handleNewRoom()"> 
     <mark>Please select a room:</mark> 
     <select id="roomSelect" name="roomSelect"> 
      <option value="room1">Room 1</option> 
      <option value="room2">Room 2</option> 
     </select> 

     <mark>Please Enter username</mark> 
     <input type="text" name="username" size="20"/> 
     <input type="submit" value="Enter" /> 
    </form> 

    <script> 
     window.onload = function(){document.submitForm.action=submitAction();} 
     function submitAction(){ 
      return document.location.pathname; 
     }    
    </script> 
</body> 

这里是我的UserNameServlet @WebServlet( “/ UserNameServlet”)

public class UserNameServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * 
    * @param request 
    * @param response 
    * @throws ServletException 
    * @throws IOException 
    */ 
    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     response.setContentType("text/html"); 

     String username = request.getParameter("username"); 
     HttpSession session = request.getSession(true); 

     String roomName = request.getParameter("roomSelect"); 
     session.setAttribute("username", username); 
     PrintWriter out = response.getWriter(); 
     if(username == null) response.sendRedirect("loginpage.html"); 
     else response.sendRedirect("chatPage.html"); 

     } 

这里是我的chatPage.html

<script> 
     var websocket = new WebSocket("ws://""+"+document.location.host+"+"document.location.pathname+"+""chatroomServerEndpoint/"+roomName+""); 
</script> 

我ChatroomServerEndpoint.java

@ServerEndpoint(value="/chatroomServerEndpoint/{chatroom}", configurator=ChatroomServerConfigurator.class) 

因此,我的问题是:我的链接到websocket服务器是否正确,我如何在chatpage.html中访问roomName?

回答

0

您可以将roomName参数添加为通过loginpage.html定义的HTML会话的会话属性。重定向后,您可以通过构建WebSocket端点配置程序来访问HTML会话的属性。

  import javax.servlet.http.HttpSession; 
      import javax.websocket.HandshakeResponse; 
      import javax.websocket.server.HandshakeRequest; 
      import javax.websocket.server.ServerEndpointConfig; 
      import javax.websocket.server.ServerEndpointConfig.Configurator; 

      public class ChatRoomEndpointConfigurator extends Configurator { 
       @Override 
       public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) { 
       HttpSession httpSession = (HttpSession) request.getHttpSession(); 
       sec.getUserProperties().put(HttpSession.class.getName(), httpSession); 
      } 
     } 

之后,在ServerEndpoint,你会:

@ServerEndpoint(value = "/chatroomServerEndpoint/{chatroom}",configurator=ChatRoomEndpointConfigurator.class) 
    public class WSServer { 
     protected Session wsSession; 
     protected HttpSession httpSession;  

//Now, you can access the http's session attributes: 

     @OnOpen 
     public void onOpen(Session session, EndpointConfig config) { 
      this.wsSession=session; 
      this.httpSession=(HttpSession) config.getUserProperties().get(HttpSession.class.getName()); 
      String chatRoom = (String) httpSession.getAttribute("chatRoom"); 
     } 
    }