使用dwr20实现服务器推客户端结合响应socket服务器推消息文档格式.docx
- 文档编号:22214908
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:20
- 大小:21.98KB
使用dwr20实现服务器推客户端结合响应socket服务器推消息文档格式.docx
《使用dwr20实现服务器推客户端结合响应socket服务器推消息文档格式.docx》由会员分享,可在线阅读,更多相关《使用dwr20实现服务器推客户端结合响应socket服务器推消息文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
com.leopard.filters.SetCharacterEncodingFilter<
/filter-class>
init-param>
<
param-name>
encoding<
/param-name>
param-value>
UTF-8<
/param-value>
/init-param>
/filter>
--定义整合SiteMesh必须的ActionContextCleanUpFilter-->
struts-cleanup<
org.apache.struts2.dispatcher.ActionContextCleanUp<
--定义整合SiteMesh和核心Filter-->
sitemesh<
com.opensymphony.module.sitemesh.filter.PageFilter<
--struts2.0的过滤器-->
struts2<
org.apache.struts2.dispatcher.FilterDispatcher<
--使用jwp的过滤器包,功能是控制session的超时判断,如果超时,直接跳转到登陆页面-->
SessionInactivityFilter<
javawebparts.filter.SessionInactivityFilter<
forwardTo<
/errors.jsp<
--设置session的超时时间为4分钟-->
session-config>
session-timeout>
120<
/session-timeout>
/session-config>
filter-mapping>
url-pattern>
/*<
/url-pattern>
/filter-mapping>
--配置spring的context文件的路径,如果没有配置,默认为web-inf下面的applicationContext.xml文件,且名称必须一样-->
context-param>
contextConfigLocation<
/WEB-INF/classes/com/leopard/spring/applicationContext_*.xml<
/context-param>
--spring装载applicationcontext的监听器-->
listener>
listener-class>
org.springframework.web.context.ContextLoaderListener<
/listener-class>
/listener>
--freemarker的servlet
servlet>
servlet-name>
freemarker<
/servlet-name>
servlet-class>
com.opensymphony.webwork.views.freemarker.FreemarkerServlet<
/servlet-class>
/servlet>
-->
--dwr的servlet-->
*************************
dwr-invoker<
org.directwebremoting.servlet.DwrServlet
description>
调试DWR,发布系统时应将其设为false<
/description>
debug<
true<
使用服务器推技术(反转AJAX)<
activeReverseAjaxEnabled<
initApplicationScopeCreatorsAtStartup
maxWaitAfterWrite<
100<
load-on-startup>
4<
/load-on-startup>
servlet-mapping>
/dwr/*<
/servlet-mapping>
****************************
img<
org.leopard.web.util.AuthImg<
/authImg<
--<
*.ftl<
dwr<
Admin<
/admin<
-->
--欢迎界面-->
welcome-file-list>
welcome-file>
/login/login.jsp<
/welcome-file>
/welcome-file-list>
/web-app>
这里与dwr1.0的配置是不一样的
uk.ltd.getahead.dwr.DWRServlet<
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<
User>
users=newArrayList<
();
/**保存当前的scriptsession*/
publicstaticMap<
String,ScriptSession>
scriptmap=newHashMap<
/**保存当前的user和session对应*/
userScriptMap=newHashMap<
/**
*更新在线用户列表
*@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,"
username"
receiver"
users,"
userid"
"
if(!
flag){
returnnull;
returnuser.getUserid();
}
*获得当前在线的scriptsession列表(解决了刷新改变scriptsession的问题)
*@return
publicCollection<
ScriptSession>
leopardScriptSessions(HttpServletRequestrequest){
//获得scriptSession,把httpsession和scriptSession存到map中
ScriptSessionscriptSession=WebContextFactory.get().getScriptSession();
scriptmap.put(request.getSession().getId(),scriptSession);
Collection<
sessions=newHashSet<
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);
*根据用户id获得指定用户的页面脚本session
@SuppressWarnings("
unchecked"
)
publicScriptSessiongetScriptSession(Stringuserid,HttpServletRequestrequest){
ScriptSessionscriptSessions=null;
sessions.addAll(ServerContextFactory.get(request.getSession().getServletContext())
.getScriptSessionsByPage("
/leopardweb/main/main.jsp"
));
for(ScriptSessionsession:
sessions){
Stringxuserid=(String)session.getAttribute("
if(xuserid!
=null&
&
xuserid.equals(userid)){
scriptSessions=session;
}
returnscriptSessions;
publicvoidcleanSession(Stringuserid,HttpServletRequestrequest){
users.remove(0);
scriptmap.remove(userid);
*发送消息
*@paramsender发送者
*@paramreceiverid接收者id
*@parammsg消息内容
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);
msg"
msg);
static-access"
publicvoidsocket(){
SingletonSocket.getInstance();
}
这里的socket连接采用了单例模式,保证整个应用中只有一个连接
packagecom.leopard.web.util;
importcom.leopard.dwr.ChatManager;
*单例模式的socket的连接方式
*
publicclassSingletonSocket{
privateSingletonSocket(){
try{
Socketso=newSocket("
localhost"
8500);
System.out.println("
连接服务器。
InputStreaminputStream=so.getInputStream();
BufferedReaderinp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 dwr20 实现 服务器 客户端 结合 响应 socket 消息