1.web工程中导入commons-logging.jar,dwr.jar.(version: 2.0.5,目前dwr官网中有3.0版本http://getahead.ltd.uk/dwr/)
2.通过xml(Basic Templates)选择create xml file from a DTD file中的-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN 选择dwr,完成
3.配置web.xml文件
DwrServlets是类org.directwebremoting.servlet.DwrServlet ,但uk.ltd.getahead.dwr.DWRServlet仍然可以用,但在DWR 1.x不得不使用后者
<servlet> <servlet-name>dwr</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>activeReverseAjaxEnabled</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr</servlet-name> <url-pattern>/ajax/*</url-pattern> </servlet-mapping>
4.建立线程实现时钟的类
public class ClockTool implements Runnable{
private boolean flag = false;
private ServerContext sc;
public ClockTool(){
//取得web应用的ServletContext
ServletContext stx = WebContextFactory.get().getServletContext();
//取得ServerContext
sc = ServerContextFactory.get(stx);
}
public synchronized void switcher(){
flag = !flag;
if(flag){
System.out.println("####");
new Thread(this).start();
}
}
public void run(){
while(flag){
//主动退数据到客户端页面
//通过ServerContext可以取得特定页面的会话(dwr专有)
Collection sessions = sc.getScriptSessionsByPage("/myajax3/clock.jsp");
Util pages = new Util(sessions);
//针对此页面中的html元素进行设置
pages.setValue("showTime", new Date().toString());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(">>>>>>");
}
Collection sessions = sc.getScriptSessionsByPage("/myajax3/clock.jsp");
Util pages = new Util(sessions);
//针对此页面中的html元素进行设置
pages.setValue("showTime", "*");
}
}
5.dwr.xml文件中配置
<dwr> <allow> <create javascript="ClockTool" creator="new" scope="application"> <param name="class" value="com.mypack.ClockTool"></param> </create> </allow> </dwr>
6.clock.jsp中
<html>
<head>
<script type="text/javascript" src="/myajax/ajax/interface/ClockTool.js"></script>
<script type="text/javascript" src="/myajax/ajax/engine.js"></script>
<script type="text/javascript" src="/myajax/ajax/util.js"></script>
<script type="text/javascript">
function showTime(){
ClockTool.switcher();
}
</script>
</head>
<body οnlοad="dwr.engine.setActiveReverseAjax(true)">
<input type="button" οnclick="showTime()" value="start/stop"/><br>
<div id="showTime"></div>
</body>
</html>