Maison  >  Article  >  interface Web  >  【websocet】这样写能握手成功吗?_html/css_WEB-ITnose

【websocet】这样写能握手成功吗?_html/css_WEB-ITnose

WBOY
WBOYoriginal
2016-06-24 12:02:291046parcourir

package websocket;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.catalina.websocket.WebSocketServlet; import org.apache.catalina.websocket.StreamInbound;public class WebSocketMessageServlet extends WebSocketServlet{	/**	 * 	 */	private static final long serialVersionUID = 1L;	private  String  username;        @Override      protected void doGet(HttpServletRequest req, HttpServletResponse resp)              throws ServletException, IOException {      	this.username = (String)req.getSession().getAttribute("user_nickname");          super.doGet(req, resp);      }     	@Override	protected StreamInbound createWebSocketInbound(String arg0,			HttpServletRequest arg1) {		// TODO Auto-generated method stub		return new WebSocketMessageInboundPool(this.username); 	}	 }  

package websocket;import java.io.IOException;import java.nio.CharBuffer;import java.nio.ByteBuffer;import java.util.HashMap;import java.util.Map;import org.apache.catalina.websocket.MessageInbound;import org.apache.catalina.websocket.WsOutbound;public class WebSocketMessageInboundPool extends MessageInbound{		private final  String user_nickname;	private static final Map<String,WebSocketMessageInboundPool > Connections = new HashMap<String,WebSocketMessageInboundPool>();		public  WebSocketMessageInboundPool(String username){		this.user_nickname=username;	}		protected void onOpen(WsOutbound outbound) {		// TODO Auto-generated method stub		addMessageInbound(this);		super.onOpen(outbound);	}		protected void onBinaryMessage(ByteBuffer arg0) throws IOException {		// TODO Auto-generated method stub		// 向所有已连接的客户端发送文本消息		try {			//向特定的用户发送数据			WebSocketMessageInboundPool  inbound = Connections.get(user_nickname);			if(inbound != null){				ByteBuffer bb = ByteBuffer.wrap(arg0.array());				WsOutbound wb = inbound.getWsOutbound();				wb.writeBinaryMessage(bb);				wb.flush();			}		}		catch (IOException e) {			e.printStackTrace();		}	}		protected void onTextMessage(CharBuffer arg0) throws IOException {		// TODO Auto-generated method stub			try {			//向特定的用户发送数据			WebSocketMessageInboundPool  inbound = Connections.get(user_nickname);			if(inbound != null){			CharBuffer cb = CharBuffer.wrap(arg0);			WsOutbound wb = inbound.getWsOutbound();			wb.writeTextMessage(cb);			wb.flush();			}		}		catch (IOException e) {				e.printStackTrace();			}		}		protected void onClose(int status) {		// TODO Auto-generated method stub		removeMessageInbound(this);		super.onClose(status);	}		//向连接池中添加连接	public static void addMessageInbound(WebSocketMessageInboundPool  inbound){		//添加连接		Connections.put(inbound.user_nickname, inbound);	}	public static void removeMessageInbound(WebSocketMessageInboundPool  inbound){		//移除连接		Connections.remove(inbound.user_nickname);	}}	




我的握手链接是ws = new WebSocket("ws://localhost:8080/websocket/web"); // 本地
xml配置:
<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" 	xmlns="http://java.sun.com/xml/ns/javaee" 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  <display-name></display-name>	    <servlet>  	<servlet-name>WebSocketMessageServlet</servlet-name>  	<servlet-class>websocket.WebSocketMessageServlet</servlet-class>  </servlet>  <servlet-mapping>  	<servlet-name>WebSocketMessageServlet</servlet-name>  	<url-pattern>/web</url-pattern>  </servlet-mapping>    <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>



但是我本地tomcat测试了还是不行,
tomcat项目lib文件夹下的jar包全都要删掉吗?



回复讨论(解决方案)

up..........................

木有人会吗?

public class WebSocketMessageServlet extends WebSocketServlet{     protected StreamInbound createWebSocketInbound(String arg0) {               System.out.println("$$$$$$$$");        return new WebSocketMessageInboundPool("1");      }


这样写就能握手,太奇怪了,明明要重载父类抽象方法才是正确的。

我在浏览器上F12看了一下,错误是这样说的

楼主你的xml配置有问题!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn