用户登录后,显示所有文件的列表。点击“上传文件”,弹出文件上传窗口,用户浏览本地文件确定提交后,就可以将文件上传至服务器指定的位置。服务器将上传者和文件信息推送到所有的客户端页面指定的div中显示,并在页面文件列表的表格最后添加一行新上传的文件信息。
涉及的技术:
1.?Struts?1.x
2.?Dwr?2.0?服务器推模式
3.?Jsp
?
实现代码摘要:
FileAction.java
文件上传成功后,调用fileList.jsp中JavaScript方法sendMessag(msg);
?
out.println("<script?type='text/javascript'>"?+?????? "opener.sendMessage('"+username+"@"+fileName+"@"+sizeStr+"@"+ sdf.format(new?Date()).replace("?",?"")+"');"+ "</script>"); |
?
fileList.jsp
sendMessag(msg)调用后台UpLoadTip.java中的upBroadcast(msg)方法,并将新上传的文件信息作为参数传递过去。
?
<script?type='text/javascript'?src='./dwr/engine.js'></script>?<script?type='text/javascript'?src='./dwr/interface/UpLoadTip.js'>???</script> <script?type='text/javascript'?src='./dwr/util.js'></script> <script?type="text/javascript"> ????function?sendMessage(msg)?{ ??????UpLoadTip.upBroadcast(msg); ????} ????? ????function?show(obj){ ????addNewRow(obj);?//在文件列表?表格最后追加一行 ???} |
?
Dwr.xml(配置文件)
?
<dwr> <allow> <create?creator="new"?javascript="UpLoadTip"> <param?name="class"?value="com.kuntuo.service.impl.UpLoadTip"/> </create> ??</allow> </dwr> |
?
UpLoadTip.java
此类实现了服务器推模式的功能,首先获取需要推送的目标文件的所有客户端,然后进行回调客户端的show(msg)JavaScript方法。
?
public?class?UpLoadTip?{ ??public?void?upBroadcast(String?msg){ ????WebContext?wctx?=?WebContextFactory.get(); ????String?currentPage?=?wctx.getCurrentPage(); ????//获取当前页的所有客户端 ????ScriptProxy?sp?=?new?ScriptProxy( ?????????????wctx.getScriptSessionsByPage(currentPage)); ????//调用客户端show方法,并传递参数msg; ????sp.addFunctionCall("show",?msg); ??} } |
客户端的show(msg)方法来提示所有客户端“XXX上传了XXX文件”,并调用adNewRow(mag)将页面文件列表的表格最后添加一行新上传的文件信息。