主要是要时在工程中导入catalina.jar,websocket-api.jar,其中前者在java中可以找到,后者如果java中找不到可以试着去下载jetty看看里面的.jar文件。
<------------------------------------------------------------------------分割线-------------------------------------------------------------------------------------------->
在服务器端,也出现了一些实现websocket协议的项目:
resin 包含有websocket 实现
pywebsocket, apache http server 扩展
apache tomcat 7.0.27 版本
Nginx 1.3.13 版本
websocket api在浏览器端的广泛实现似乎只是一个时间问题了, 值得注意的是服务器端没有标准的api, 各个实现都有自己的一套api, 并且jcp也没有类似的提案, 所以使用websocket开发服务器端有一定的风险.可能会被锁定在某个平台上或者将来被迫升级.
咳咳,以上这大坨来自百度百科,欲知详细请自行查找
好了,准备开发环境:java sdk7,Myeclipse10,Tomcat7.47
下载好了自行安装,我不管了
打开MyEclipse新建一个JSP工程,然后导入catalina.jar,websocket-api.jar
什么,你觉得不爽,那你就多导几个吧,反正不要钱,也没人强奸你!
Ok,接下来,新建一个类
WebsocketConfig ,有关抽象类ServerApplicationConfig请查看javaEE7 api
这个很重要,你知道吗,我不哆嗦,你往下看
- package com.websocket;
-
- import java.util.HashSet;
- import java.util.Set;
-
- import javax.websocket.Endpoint;
- import javax.websocket.server.ServerApplicationConfig;
- import javax.websocket.server.ServerEndpointConfig;
-
- public class WebsocketConfig implements ServerApplicationConfig{
-
- @Override
- public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scanned) {
-
- System.out.println("******getAnnotatedEndpointClasses******");
-
-
-
-
- Set<Class<?>> res=new HashSet<>();
- for(Class<?> cs:scanned){
- if(cs.getPackage().getName().startsWith("com.websocket.")){
- res.add(cs);
- }
- }
- return res;
- }
-
- @Override
- public Set<ServerEndpointConfig> getEndpointConfigs(
- Set<Class<? extends Endpoint>> scanned) {
-
- System.out.println("******getEndpointConfigs******");
- Set<ServerEndpointConfig> res=new HashSet<>();
-
-
-
-
-
-
-
-
-
- return res;
- }
-
- }
好了,现在我们来建立一个简单chat的ServerEndpoint,据说有两种方式:1、使用@
ServerEndpoint
2、采用继承的方式
我们先来第一种,新建一个类chat1
- package com.websocket.chat;
-
- import java.io.IOException;
- import java.util.Set;
- import java.util.concurrent.CopyOnWriteArraySet;
- import java.util.concurrent.atomic.AtomicInteger;
-
- import javax.websocket.OnClose;
- import javax.websocket.OnMessage;
- import javax.websocket.OnOpen;
- import javax.websocket.Session;
- import javax.websocket.server.ServerEndpoint;
- import util.HTMLFilter;
-
- @ServerEndpoint(value="/chat01")
-
-
- public class chat_1 {
- private static final AtomicInteger connectionIds = new AtomicInteger(0);
- private static final Set<chat_1> connections =
- new CopyOnWriteArraySet<chat_1>();
-
- private final String nickname;
- private Session session;
-
- public chat_1() {
- nickname = "游客ID:" + connectionIds.getAndIncrement();
- }
-
-
- @OnOpen
- public void start(Session session) {
- this.session = session;
- connections.add(this);
- String message = String.format("嗨嗨,姑娘们,来接客了: %s %s", nickname, "has joined.");
- broadcast(message);
- }
-
-
- @OnClose
- public void end() {
- connections.remove(this);
- String message = String.format("客官慢走,嘿嘿,还没付钱呢: %s %s",
- nickname, "has disconnected.");
- broadcast(message);
- }
-
-
- @OnMessage
- public void receive(String message) {
-
- String filteredMessage = String.format("您有新消息:%s: %s",
- nickname, HTMLFilter.filter(message.toString()));
- broadcast(filteredMessage);
- }
-
-
- private static void broadcast(String msg) {
- for (chat_1 client : connections) {
- try {
- client.session.getBasicRemote().sendText(msg);
- } catch (IOException e) {
- connections.remove(client);
- try {
- client.session.close();
- } catch (IOException e1) {
-
- }
- String message = String.format("* %s %s",
- client.nickname, "has been disconnected.");
- broadcast(message);
- }
- }
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
index.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
-
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
-
- <title>My JSP 'index.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
-
- <body>
- <li><a href="chat01.xhtml">chat01</a></li>
- <pre code_snippet_id="91119" snippet_file_name="blog_20131201_4_6394982" name="code" class="java" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 24px; text-indent: 28px; "><li><a href="chat02.xhtml">chat02</a></li></pre> </body></html>
- <pre></pre>
- <img src="https://img-blog.csdn.net/20131201181020546?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGluZ2xlbHk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
- <pre></pre>
转自:http://blog.csdn.net/xinglely/article/details/17056723
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_38171115/article/details/79602401
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。