根据Tomcat7.0.37 chat 官方例子修改,核心代码如下:
/*
*
*/
package com.servlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.catalina.websocket.StreamInbound;
import org.apache.catalina.websocket.WebSocketServlet;
/**
* Example web socket servlet for chat.
*/
@SuppressWarnings("serial")
public class ChatWebSocketServlet extends WebSocketServlet
{
//private static final String GUEST_PREFIX="Guest";
//private final AtomicInteger connectionIds=new AtomicInteger(0);
//private final Set<ChatMessageInbound> connections=new CopyOnWriteArraySet<ChatMessageInbound>();
protected StreamInbound createWebSocketInbound(String subProtocol,HttpServletRequest request)
{
System.out.println(subProtocol+"...");
System.out.println(request.getParameter("cs"));
HttpSession session=request.getSession();
String sessionId=session.getId();
ChatMessageInbound chatMessageInbound=new ChatMessageInbound();
chatMessageInbound.setSessionId(sessionId);
return chatMessageInbound;
}
/*
public class ChatMessageInbound extends MessageInbound
{
private String nickname;
public ChatMessageInbound()
{
}
public ChatMessageInbound(int id)
{
this.nickname=GUEST_PREFIX+id;
}
protected void onOpen(WsOutbound outbound)
{
connections.add(this);
String message=String.format("* %s %s",nickname,"has joined.");
broadcast(message);
}
protected void onClose(int status)
{
connections.remove(this);
String message=String.format("* %s %s",nickname,"has disconnected.");
broadcast(message);
}
protected void onBinaryMessage(ByteBuffer message) throws IOException
{
throw new UnsupportedOperationException("Binary message not supported.");
}
protected void onTextMessage(CharBuffer message) throws IOException
{
// Never trust the client
String filteredMessage=String.format("%s: %s",nickname,
HTMLFilter.filter(message.toString()));
broadcast(filteredMessage);
}
public void broadcast(String message)
{
for(ChatMessageInbound connection : connections)
{
try
{
CharBuffer buffer=CharBuffer.wrap(me