使用dwr20实现服务器推客户端结合响应socket服务器推消息.docx
- 文档编号:9078790
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:20
- 大小:21.98KB
使用dwr20实现服务器推客户端结合响应socket服务器推消息.docx
《使用dwr20实现服务器推客户端结合响应socket服务器推消息.docx》由会员分享,可在线阅读,更多相关《使用dwr20实现服务器推客户端结合响应socket服务器推消息.docx(20页珍藏版)》请在冰豆网上搜索。
使用dwr20实现服务器推客户端结合响应socket服务器推消息
使用dwr2.0实现服务器推客户端(结合响应socket服务器推消息)
1、在web.xml中配置加入dwr2.0的推功能
xmlversion="1.0"encoding="UTF-8"?
>
xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation=" --设置字符编码过滤器--> --定义整合SiteMesh必须的ActionContextCleanUpFilter--> --定义整合SiteMesh和核心Filter--> --struts2.0的过滤器--> --使用jwp的过滤器包,功能是控制session的超时判断,如果超时,直接跳转到登陆页面--> --设置session的超时时间为4分钟--> --配置spring的context文件的路径,如果没有配置,默认为web-inf下面的applicationContext.xml文件,且名称必须一样--> --spring装载applicationcontext的监听器--> --freemarker的servlet --> --dwr的servlet--> ************************* org.directwebremoting.servlet.DwrServlet initApplicationScopeCreatorsAtStartup **************************** -- --> --欢迎界面--> 这里与dwr1.0的配置是不一样的 2、dwr的服务器端执行方法代码 packagecom.leopard.dwr; importjava.io.BufferedReader; importjava.io.IOException; importjava.io.InputStream; importjava.io.InputStreamReader; importjava.io.OutputStream; importjava.io.PrintWriter; import.Socket; importjava.util.ArrayList; importjava.util.Collection; importjava.util.HashMap; importjava.util.HashSet; importjava.util.List; importjava.util.Map; importjavax.servlet.ServletContext; importjavax.servlet.http.HttpServletRequest; importorg.directwebremoting.ScriptBuffer; importorg.directwebremoting.ScriptSession; importorg.directwebremoting.ServerContext; importorg.directwebremoting.ServerContextFactory; importorg.directwebremoting.WebContextFactory; importorg.directwebremoting.proxy.dwr.Util; importcom.leopard.web.util.SingletonSocket; /** *处理聊天相关 * *@authorleopard * */ publicclassChatManager{ /**保存当前在线用户列表*/ publicstaticList /**保存当前的scriptsession*/ publicstaticMap /**保存当前的user和session对应*/ publicstaticMap /** *更新在线用户列表 *@paramusername待添加到列表的用户名 *@paramflag是添加用户到列表,还是只获得当前列表 *@paramrequest *@return用户userid */ publicStringupdateUsersList(Stringusername,booleanflag,HttpServletRequestrequest){ System.out.println("进入\\....."); Useruser=null; if(flag){ //这里取会话(HttpSession)的id为用户id user=newUser(request.getSession().getId(),username); //保存用户到列表 users.add(user); //将用户id和页面脚本session绑定 this.setScriptSessionFlag(user.getUserid()); //将用户和页面sessio绑定 this.setUserScriptSession(user); } Utilutil=newUtil(this.leopardScriptSessions(request)); //处理这些页面中的一些元素 util.removeAllOptions("users"); util.addOptions("users",users,"username"); util.removeAllOptions("receiver"); util.addOptions("receiver",users,"userid","username"); if(! flag){ returnnull; } returnuser.getUserid(); } /** *获得当前在线的scriptsession列表(解决了刷新改变scriptsession的问题) *@paramrequest *@return */ publicCollection //获得scriptSession,把httpsession和scriptSession存到map中 ScriptSessionscriptSession=WebContextFactory.get().getScriptSession(); scriptmap.put(request.getSession().getId(),scriptSession); Collection sessions.addAll(scriptmap.values()); returnsessions; } /** *绑定用户名和scriptsession *@paramuser */ publicvoidsetUserScriptSession(Useruser){ userScriptMap.put(user.getUsername(),WebContextFactory.get().getScriptSession()); } /** *将用户id和页面脚本session绑定 *@paramuserid */ publicvoidsetScriptSessionFlag(Stringuserid){ WebContextFactory.get().getScriptSession().setAttribute("userid",userid); } /** *根据用户id获得指定用户的页面脚本session *@paramuserid *@paramrequest *@return */ @SuppressWarnings("unchecked") publicScriptSessiongetScriptSession(Stringuserid,HttpServletRequestrequest){ ScriptSessionscriptSessions=null; Collection sessions.addAll(ServerContextFactory.get(request.getSession().getServletContext()) .getScriptSessionsByPage("/leopardweb/main/main.jsp")); for(ScriptSessionsession: sessions){ Stringxuserid=(String)session.getAttribute("userid"); if(xuserid! =null&&xuserid.equals(userid)){ scriptSessions=session; } } returnscriptSessions; } publicvoidcleanSession(Stringuserid,HttpServletRequestrequest){ users.remove(0); scriptmap.remove(userid); } /** *发送消息 *@paramsender发送者 *@paramreceiverid接收者id *@parammsg消息内容 *@paramrequest */ publicvoidsend(Stringsender,Stringreceiverid,Stringmsg,HttpServletRequestrequest){ ScriptSessionsession=this.getScriptSession(receiverid,request); ScriptBufferscript=newScriptBuffer(); script.appendScript("tempfuc(").appendData("nihao! ").appendScript(");"); session.addScript(script); Utilutil=newUtil(session); util.setStyle("showMessage","display",""); util.setValue("sender",sender); util.setValue("msg",msg); } @SuppressWarnings("static-access") publicvoidsocket(){ SingletonSocket.getInstance(); } } 这里的socket连接采用了单例模式,保证整个应用中只有一个连接 packagecom.leopard.web.util; importjava.io.BufferedReader; importjava.io.IOException; importjava.io.InputStream; importjava.io.InputStreamReader; import.Socket; importjava.util.Collection; importorg.directwebremoting.ScriptBuffer; importorg.directwebremoting.ScriptSession; importcom.leopard.dwr.ChatManager; /** *单例模式的socket的连接方式 *@authorleopard * */ publicclassSingletonSocket{ privateSingletonSocket(){ try{ Socketso=newSocket("localhost",8500); System.out.println("连接服务器。 "); InputStreaminputStream=so.getInputStream(); BufferedReaderinp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 dwr20 实现 服务器 客户端 结合 响应 socket 消息
![提示](https://static.bdocx.com/images/bang_tan.gif)