DWR Reverse Ajax

1. 类

 

1.1 handle类

 

package com.cloverworxs.uma.helper; import java.util.Collection; import java.util.LinkedList; import org.directwebremoting.WebContext; import org.directwebremoting.WebContextFactory; import org.directwebremoting.proxy.dwr.Util; public class DWRHelper { private static final LinkedList messages = new LinkedList(); public static void addMessage(String text) { if (text != null && text.trim().length() > 0) { messages.addFirst(new Message(text)); while (messages.size() > 5) { messages.removeLast(); } } // Reverse Ajax code to be added here shortly WebContext wctx = WebContextFactory.get(); String currentPage = wctx.getCurrentPage(); // Clear the input box in the browser that kicked off this page only Util utilThis = new Util(wctx.getScriptSession()); utilThis.setValue("text", ""); // For all the browsers on the current page: Collection sessions = wctx.getScriptSessionsByPage(currentPage); Util utilAll = new Util(sessions); // Clear the list and add in the new set of messages utilAll.removeAllOptions("chatlog"); utilAll.addOptions("chatlog", messages, "text"); utilAll.addFunctionCall("changeStyle"); } }

 

1.2 bean类

package com.cloverworxs.uma.helper; import org.directwebremoting.Security; public class Message { public Message(String newtext) { text = newtext; if (text.length() > 256) { text = text.substring(0, 256); } text = Security.replaceXmlCharacters(text); } public long getId() { return id; } public String getText() { return text; } private long id = System.currentTimeMillis(); private String text; }

 

2. web.xml

 

<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>Ajax Upload</display-name> <servlet> <servlet-name>dwr-invoker</servlet-name> <display-name>DWR Servlet</display-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>logLevel</param-name> <param-value>WARN</param-value> </init-param> <!-- activeReverseAjaxEnabled important --> <init-param> <param-name>activeReverseAjaxEnabled</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <!-- The Usual Welcome File List --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>

3. dwr.xml

 

<dwr> <allow> <create creator="none" javascript="DWRHelper"> <param name="class" value="com.cloverworxs.uma.helper.DWRHelper" /> <include method="addMessage" /> </create> <convert converter="bean" match="com.cloverworxs.uma.helper.Message"> <param name="include" value="id,text" /> </convert> </allow> </dwr>

 

4. index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <mce:script type='text/javascript' src="dwr/interface/DWRHelper.js" mce_src="dwr/interface/DWRHelper.js"></mce:script> <mce:script type='text/javascript' src="dwr/engine.js" mce_src="dwr/engine.js"></mce:script> <mce:script type='text/javascript' src="dwr/util.js" mce_src="dwr/util.js"></mce:script> <mce:script type="text/javascript"><!-- function sendMessage() { DWRHelper.addMessage(dwr.util.getValue("text")); } function changeStyle() { if($('chatlog').style.listStyleType == 'decimal'){ $('chatlog').style.listStyleType = 'upper-alpha'; }else{ $('chatlog').style.listStyleType = 'decimal'; } } // --></mce:script> </head> <!-- dwr.engine.setActiveReverseAjax(true) important --> <body onload="dwr.engine.setActiveReverseAjax(true);"> <p>This is a very simple chat demo that uses reverse ajax to collect messages and server-side browser manipulation to update the pages with the results.</p> <p>Your Message: <input id="text" onkeypress="dwr.util.onReturn(event, sendMessage)" /> <input type="button" value="Send" onclick="sendMessage()" /></p> <hr /> <ul id="chatlog" style="list-style-type:armenian;" mce_style="list-style-type:armenian;"> </ul> </body> </html>

 

5. 从非DWR的servlet线程使用 Reverse Ajax

 

List containers = ContainerUtil.getAllPublishedContainers(getServletContext()); DefaultContainer container = (DefaultContainer)containers.get(0); ScriptSessionManager sessionManager = (ScriptSessionManager) container.getBean(ScriptSessionManager.class.getName()); // 群发 //Collection sessions = sessionManager.getScriptSessionsByPage(request.getContextPath()+File.separator+"jsp/import/import.jsp"); // 单发,页面通过类似uploadForm.action = "<%=strContextPath%>/servlet/FileUpload?scriptSessionId="+dwr.engine._getScriptSessionId() 形式发送scriptSessionId参数 String id = (String) request.getParameter("scriptSessionId"); RealScriptSession mySession= sessionManager.getScriptSession(id); sessionManager.setPageForScriptSession(mySession, request.getContextPath()+File.separator+"jsp/import/import.jsp");

 

6. 注意事项

 

6.1 需要的类库 dwr.jar    commons-logging-1.1.1.jar   log4j-1.2.8.jar

6.2 log4j 配置文件

 

#-------------------------------- # LEVEL = FATAL ERROR WARN INFO DEBUG log4j.rootLogger=INFO, stdout, fileout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.fileout=org.apache.log4j.RollingFileAppender log4j.appender.fileout.File=/home/guo/ibatis.log log4j.appender.fileout.MaxFileSize=10000KB log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} :%m%n log4j.appender.fileout.layout=org.apache.log4j.PatternLayout log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH:mm:ss} :%m%n

6.3 dwr.xml文件要已以下内容开头(注意版本号)

 

<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">

 

6.4 MSXML5.0.DLL问题建议升级到3.0使用。

你可能感兴趣的:(Ajax,String,servlet,DWR,browser,containers)