|
http://getahead.ltd.uk/dwr/ Õâ¶Îʱ¼ä½ÏÏÐ,Ñо¿ÁËÒ»·¬dwr.·¢ÏÖdwrʵÏÖµÄAJAXÓÐЩµØ·½È·ÊµºÜÊÇÏȽø.±ÈÈ綯̬Éú³Éjavascript´úÂë;Òþ²ØµÄhttpÐÒé;javascriptÓÚjava´úÂë½»»¥µÄÊÇjavascript¶ÔÏó(»ò×Ö·û´®)µÈ. ÒÔÏÂÊÇÎÒÁÙʱÒëµÄһЩ¶«Î÷.±¾À´ÏëÈ«Òë,·¢ÏÖdwrʵÔÚÊǼòµ¥,¾ÍËæ±ãдÁË.Ó¢ÎľӲî,ÏÖÒ»°Ñ.
1¡¢DWR: Easy AJAX for JAVA
×÷Ϊһ¸öjava open source library,DWR¿ÉÒÔ°ïÖú¿ª·¢ÈËÔ±Íê³ÉÓ¦ÓÃAJAX¼¼ÊõµÄweb³ÌÐò¡£Ëü¿ÉÒÔÈÃä¯ÀÀÆ÷ÉϵÄjavascript·½·¨µ÷ÓÃÔËÐÐÔÚweb·þÎñÆ÷ÉÏjava·½·¨¡£
DWRÖ÷ÒªÓÉÁ½²¿ÃÅ×é³É¡£javascriptÓëweb·þÎñÆ÷ͨÐŲ¢¸üÐÂwebÒ³£»ÔËÐÐÔÚweb·þÎñÆ÷µÄServlet´¦ÀíÇëÇó²¢°ÑÏìÓ¦·¢»Øä¯ÀÀÆ÷¡£
DWR²ÉÓÃÐÂÓ±µÄ·½·¨ÊµÏÖÁËAJAX(±¾À´Ò²Ã»ÓÐÈ·Çе͍Òå)£¬ÔÚjava´úÂë»ù´¡É϶¯Ì¬µÄÉú³Éjavascript´úÂë¡£web¿ª·¢Õß¿ÉÒÔÖ±½Óµ÷ÓÃÕâЩjavascript´úÂ룬Ȼ¶øÕæÕýµÄ´úÂëÊÇÔËÐÐÔÚweb·þÎñÆ÷ÉϵÄjava code¡£³öÓ밲ȫ¿¼ÂÇ£¬¿ª·¢Õß±ØÐëÅäÖÃÄÄЩjava class±©Â¶¸øDWR.(dwr.xml)
ÕâÖÖ´Ó(javaµ½javascript)µ÷ÓûúÖÆ¸øÓû§Ò»Öָоõ£¬ºÃÏó³£¹æµÄRPC»úÖÆ£¬»òRMI or SOAP.µ«ÊÇËüÔËÐÐÔÚwebÉÏ£¬²»ÐèÒªÈκÎä¯ÀÀÆ÷²å¼þ¡£
DWR²»ÈÏΪä¯ÀÀÆ÷ºÍweb·þÎñÆ÷Ö®¼äÐÒéÖØÒª£¬°Ñϵͳ½çÃæ·ÅÔÚÊ×λ¡£×î´óÌôÕ½ÊÇjava method callµÄͬ²½ÌØÕ÷ÓëajaxÒì²½ÌØÐÔÖ®¼äµÄì¶Ü¡£ÔÚÒ첽ģÐÍÀ½á¹ûÖ»ÓÐÔÚ·½·¨½áÊøºó²ÅÓÐЧ¡£DWR½â¾öÁËÕâ¸öÎÊÌ⣬°Ñ»Øµ÷º¯Êýµ±³É²ÎÊý´«¸ø·½·¨£¬´¦ÀíÍê³Éºó£¬×Ô¶¯µ÷Óûص÷·½·¨¡£
Õâ¸öͼ±íÏÔʾÁË£¬Í¨¹ýjavascriptʼþ£¬DWRÄܸıäselectµÄÄÚÈÝ£¬µ±È»ÕâЩÄÚÈÝÓÉjava´úÂë·µ»Ø¡£ javascriptº¯ÊýData.getOptions(populateList)ÓÉDWR¶¯Ì¬Éú³É£¬Õâ¸öº¯Êý»áµ÷ÓÃjava class DataÀàµÄ·½·¨¡£DWR´¦ÀíÈçºÎÔ¶³Ìµ÷Ó㬰üÀ¨×ª»»ËùÓеIJÎÊýºÍ·µ»ØµÄ½á¹û£¨javascript\java£©¡£java·½·¨Ö´ÐÐÍêºó£¬Ö´Ðлص÷·½·¨populateList¡£ÔÚÕû¸ö¹ý³ÌÖÐÎÒÃǾÍÏëÔÚÓñ¾µØµÄ·½·¨Ò»Ñù¡£
2¡¢Getting Started
·Ï»°ÉÙ˵£¬ÊÔÊÔ¾ÍokÁË¡£ 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 id="dwr"> <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> </web-app>
dwr.xml Óëweb.xmlͬĿ¼ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd"> <dwr> <allow> <create creator="new" javascript="JDate"> <param name="class" value="java.util.Date"/> </create> </allow> </dwr>
index.html <html> <head> <title>DWR - Test Home</title> <script type='text/javascript' src='dwr/interface/JDate.js'></script> <script type='text/javascript' src='dwr/engine.js'></script> <script> function init(){ JDate.getYear(load); } function load(data){ alert(data+1900+'Äê') } </script> </head> <body onload="init()"> </body> </html>
dwr.jar ÏÂÔØ·ÅlibÏÂ
ÍêÁË£¬Ê²Ã´£¬¹»ÁË£¬¾ÍÕâЩ¡£·ÃÎÊok! 3¡¢Examples http://www.aboutmyhealth.org/ Õâ²»ÊÇGoogle SuggestÂð!ok. 4¡¢Ô´ÂëdzÎö dwrµÄÉè¼ÆºÜÏówebwork2µÄÉè¼Æ,Òþ²ØhttpÐÒé,À©Õ¹ÐÔ£¬¼æÈÝÐÔ¼°Ç¿¡£
ͨ¹ýÑо¿uk.ltd.getahead.dwr.DWRServletÕâ¸öservletÀ´Ñо¿ÏÂdwrµ½µ×ÊÇÈçºÎ¹¤×÷µÎ¡£
´úÂë
- web.xmlÅäÖÃ
- <servlet>
- <servlet-name>dwr-invoker</servlet-name>
- <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>dwr-invoker</servlet-name>
- <url-pattern>/dwr/*</url-pattern>
- </servlet-mapping>
ÕâÑùËùÓеÄ/dwr/*ËùÓÐÇëÇó¶¼ÓÉÕâ¸öservletÀ´´¦Àí£¬Ëüµ½µ×´¦ÀíÁËЩʲôÄÜ¡£ÎÒÃÇ»¹ÒÔÉÏÃæ×î¼òµ¥µÄÀý×ÓÀ´¿´¡£ 1¡¢ web·þÎñÆ÷Æô¶¯£¬DWRServlet init()·½·¨µ÷Óã¬initÖ÷Òª×öÁËÒÔϹ¤×÷¡£ ÉèÖÃÈÕÖ¾¼¶±ð¡¢ÊµÀý»¯DWRÓõ½µÄµ¥ÀýÀࣨÕâЩÀàÔÚjvmÖÐÖ»ÓÐÒ»¸öʵÀý¶ÔÏ󣩡¢¶ÁÈ¥ÅäÖÃÎļþ£¨°üÀ¨dwr.jar°üÖеÄdwr.xml,WEB-INF/dwr.xml. config*.xml£©¡£ 2¡¢ÇëÇó´¦Àí DWRServlet.doGet, doPost·½·¨¶¼µ÷ÓÃprocessor.handle(req, resp)·½·¨´¦Àí¡£Processor¶ÔÏóÔÚinit()·½·¨ÖÐÒѾ³õʼ»¯ÁË¡£
´úÂë
- public void handle(HttpServletRequest req, HttpServletResponse resp)
- throws IOException
- {
- String pathinfo = req.getPathInfo();
- if(pathinfo == null || pathinfo.length() == 0 || pathinfo.equals("/"))
- {
- resp.sendRedirect(req.getContextPath() + req.getServletPath() + '/' + "index.html");
- } else
- if(pathinfo != null && pathinfo.equalsIgnoreCase("/index.html"))
- {
- doIndex(req, resp);
- } else
- if(pathinfo != null && pathinfo.startsWith("/test/"))
- {
- doTest(req, resp);
- } else
- if(pathinfo != null && pathinfo.equalsIgnoreCase("/engine.js"))
- {
- doFile(resp, "engine.js", "text/javascript");
- } else
- if(pathinfo != null && pathinfo.equalsIgnoreCase("/util.js"))
- {
- doFile(resp, "util.js", "text/javascript");
- } else
- if(pathinfo != null && pathinfo.equalsIgnoreCase("/deprecated.js"))
- {
- doFile(resp, "deprecated.js", "text/javascript");
- } else
- if(pathinfo != null && pathinfo.startsWith("/interface/"))
- {
- doInterface(req, resp);
- } else
- if(pathinfo != null && pathinfo.startsWith("/exec"))
- {
- doExec(req, resp);
- } else
- {
- log.warn("Page not found. In debug/test mode try viewing /[WEB-APP]/dwr/");
- resp.sendError(404);
- }
- }
Ŷ¡£ÕâЩ»ÐÈ»´óÎò¡£dwr/*´¦ÀíµÄÇëÇóÒ²¾ÍÕ⼸ÖÖ¡£ £¨1£©dwr/index.html£¬dwr/test/ÕâÖÖÖ»ÄÜÔÚdebugģʽÏÂʹÓ㬵÷ÊÔÓᣠdwr/engine.js£¬dwr/util.js£¬dwr/deprecated.jsµ±Õâ¸öÇëÇ󵽴´Ódwr.jar°üÖжÁÈ¡ÎļþÁ÷£¬ÏìÓ¦»ØÈ¥¡££¨Öظ´ÇëÇóÓлº´æ£© £¨2£©µ±dwr/interface/ÕâÖÖÇëÇóµ½À´£¬£¨ÀýÈçÎÒÃÇÔÚindex.htmlÖÐµÄ <script type='text/javascript' src='dwr/interface/JDate.js'></script>£©DWR×öÒ»¼þΰ´óµÄÊ¡£°ÑÎÒÃÇÔÚWEB-INF/dwr.xmlÖÐµÄ <create creator="new" javascript="JDate"> <param name="class" value="java.util.Date"/> </create> java.util.Dateת»¯Îªjavascriptº¯Êý¡£ http://localhost:port/simpledwr/dwr/interface/JDate.js¿´¿´°É¡£ ϸ½ÚÒ²±È½Ï¼òµ¥£¬Í¨¹ýjava·´É䣬°Ñ·½·¨¶¼Ð´³ÉjavascriptÌØ¶¨µÄ·½·¨¡££¨ÎÒ¾õµÃÕâЩת»»¿ÉÒԷŵ½»º´æÀÏ´ε÷ÓÃû±ØÒªÔÙÉú³ÉÒ»±é£¬²»ÖªµÀ×÷ÕßΪʲôûÕâÑù×ö£©¡£ £¨3£©dwr/exec javascriptµ÷Ó÷½·¨Ê±·¢ËÍÕâÖÖÇëÇ󣬿ÉÄÜÊÇXMLHttpRequest»òIFrame·¢ËÍ¡£ µ±È»£¬javascriptµ÷Óõķ½·¨Ç©ÃûÓëjava´úÂëÒ»Ö£¬°üÀ¨²ÎÊý£¬»¹ÓÐjavascriptµÄ»Øµ÷·½·¨Ò²´«µ½ÁË·þÎñÆ÷¶Ë£¬ÔÚ·þÎñÆ÷¶ËºÜÈÝÒ×ʵÏÖ¡£»Øµ÷·½·¨µÄjavaµÄÖ´Ðнá¹û ·µ»ØÀàËÆ <script>callMethod(½á¹û)<script>µÄjavascript×Ö·û´®,ÔÚä¯ÀÀÆ÷Ö´ÐС£¹þ£¬Ò»ÇоÍÕâô¼òµ¥£¬ÇÉÃî¡£
dwrµÄÉè¼Æ¹¹Ë¼ºÜÊÇÇÉÃî¡£ µÚÒ»¡¢°ÑjavaÀàת»¯ÎªjavascriptÀàÓÉdwr×Ô¶¯Íê³É£¬Ö»Ðè¼òµ¥µÄÅäÖᣠµÚ¶þ¡¢Ó¦ÓÃÆðÀ´¼«Æä¼òµ¥¡£¿ª·¢Õß²»Òª¸Ã·þÎñÆ÷´úÂë¾Í¿ÉÒÔ¼¯³É¡£ µÚÈý¡¢ÈÝÒײâÊÔ¡£ºÍwebworkÒ»Ñù£¬Òþ²ØµÄhttpÐÒé¡£ µÚËÄ¡¢¼°Ç¿À©Õ¹ÐÔ¡£ÀýÈçÓëspring¼¯³É£¬Ö»ÐèÐÞ¸ÄÒ»µã´úÂë¡£ µÚÎå¡¢ÐÔÄÜ¡£¾ÍÎÒÓëjason,µÈ¼òµ¥±È½Ï£¬dwrÐÔÄÜ¿ÉÄÜÊÇ×îºÃµÄ¡£ µÚÁù¡¢×Ô¶¯°Ñjava¶ÔÏóת»¯Îªjavascript¶ÔÏ󣬲¢ÇÒ¼°Ò×À©Õ¹¡£[/code] |