空間站

          北極心空

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
          DWR一個外國人實現的很有前途的AJAX框架。
          多余的話就不說了,請看DWR的例子程序:
          web.xml
           1<?xml version="1.0" encoding="ISO-8859-1"?>
           2<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
           3
           4<web-app id="dwr">
           5
           6  <display-name>DWR (Direct Web Remoting)</display-name>
           7  <description>A demo of how to call Java on the server directly from Javascript on the client</description>
           8
           9  <servlet>
          10    <servlet-name>dwr-invoker</servlet-name>
          11    <display-name>DWR Servlet</display-name>
          12    <description>Direct Web Remoter Servlet</description>
          13    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
          14    <!--
          15    <init-param>
          16      <param-name>config</param-name>
          17      <param-value>WEB-INF/dwr.xml</param-value>
          18    </init-param>
          19    -->
          20    <init-param>
          21      <param-name>debug</param-name>
          22      <param-value>true</param-value>
          23    </init-param>
          24    <init-param>
          25      <param-name>scriptCompressed</param-name>
          26      <param-value>false</param-value>
          27    </init-param>
          28    <load-on-startup>1</load-on-startup>
          29  </servlet>
          30
          31  <servlet-mapping>
          32    <servlet-name>dwr-invoker</servlet-name>
          33    <url-pattern>/dwr/*</url-pattern>
          34  </servlet-mapping>
          35
          36</web-app>
          servlet(uk.ltd.getahead.dwr.DWRServlet)里:
           1     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException
           2     {
           3         try
           4         {
           5             builder.set(req, resp, getServletConfig(), getServletContext(), container);
           6             ServletLoggingOutput.setExecutionContext(this);
           7 
           8             processor.handle(req, resp);//該方法對所有request路徑/dwr/*有效,在引用JS的時候,使用這個路徑執行dwr生成的javascript代碼

              finally
          11         {
          12             builder.unset();
          13             ServletLoggingOutput.unsetExecutionContext();
          14         }
          15     }

          index.html
           1 <?xml version="1.0" encoding="ISO-8859-1" ?>
           2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
           3 <html xmlns="http://www.w3.org/1999/xhtml">
           4 <head>
           5   <title>DWR - Test Home</title>
           6   <script type='text/javascript' src='dwr/interface/Test.js'></script>
           7   <script type='text/javascript' src='dwr/engine.js'></script>
           8   <script type='text/javascript' src='dwr/util.js'></script>
           9   <script>
          10     function init() {
          11       // This turns off the no-javascript message
          12       document.getElementById("start").style.display = "none";
          13       // This checks for file: URLs and loading problems
          14       if (window.DWREngine == null || window.DWRUtil == null) {
          15         document.getElementById("file").style.display = "block";
          16         return;
          17       }
          18       // DWR setup
          19       DWREngine.setErrorHandler(function(message) { alert(message); });
          20       DWREngine.setWarningHandler(function(message) { alert(message); });
          21       DWRUtil.useLoadingMessage();
          22       // Turn on the generic error div
          23       $("error").style.display = "block";
          24       // Load a message from the server
          25       Test.getInsert(load);
          26     }
          27 
          28     function load(data) {
          29       $("error").style.display = "none";
          30       DWRUtil.setValue("reply", data);
          31       $("reply").style.display = "block";
          32     }
          33   </script>
          34 </head>
          35 
          36 <body onload="init()">
          37 .
          這一部分經過了SERVLET處理:
            <script type='text/javascript' src='dwr/interface/Test.js'></script>
            
          <script type='text/javascript' src='dwr/engine.js'></script>
            
          <script type='text/javascript' src='dwr/util.js'></script>
          dwrservlet.doPost方法內processor.handle(req, resp)這個方法如下:
           1     public void handle(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException
           2     {
           3         String pathInfo = req.getPathInfo();
           4         String servletPath = req.getServletPath();
           5 
           6         if (nullPathInfoWorkaround && pathInfo == null)
           7         {
           8             pathInfo = req.getServletPath();
           9             servletPath = HtmlConstants.PATH_ROOT;
          10             log.debug("Default servlet suspected. pathInfo=" + pathInfo + "; contextPath=" + req.getContextPath() + "; servletPath=" + servletPath); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
          11         }
          12 
          13         if (pathInfo == null ||
          14             pathInfo.length() == 0 ||
          15             pathInfo.equals(HtmlConstants.PATH_ROOT))
          16         {
          17             resp.sendRedirect(req.getContextPath() + servletPath + HtmlConstants.FILE_INDEX);
          18         }
          19         else if (pathInfo.startsWith(HtmlConstants.FILE_INDEX))
          20         {
          21             index.handle(req, resp);
          22         }
          23         else if (pathInfo.startsWith(HtmlConstants.PATH_TEST))
          24         {
          25             test.handle(req, resp);
          26         }
          27         else if (pathInfo.startsWith(HtmlConstants.PATH_INTERFACE))
          28         {
          29             iface.handle(req, resp);//這個方法是我們要關注的
                       }
               。。。。。。。
               }
           iface.handle(req, resp);//這個方法是我們要關注的,來自DefaultInterfaceProcessor
           1     public void handle(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
           2     {
           3         String pathinfo = req.getPathInfo();
           4         String servletpath = req.getServletPath();
           5         if (pathinfo == null)
           6         {
           7             pathinfo = req.getServletPath();
           8             servletpath = HtmlConstants.PATH_ROOT;
           9         }
          10         String scriptname = pathinfo;
          11         scriptname = LocalUtil.replace(scriptname, HtmlConstants.PATH_INTERFACE, HtmlConstants.BLANK);
          12         scriptname = LocalUtil.replace(scriptname, HtmlConstants.EXTENSION_JS, HtmlConstants.BLANK);
          13         Creator creator = creatorManager.getCreator(scriptname);
          14 
          15         //resp.setContentType("text/javascript");
          16         PrintWriter out = resp.getWriter();
          17         out.println();
          18 
          19         out.println("function " + scriptname + "() { }"); //從這里開始DWR自動生成javascript
                       String   path = overridePath;
          22         if (path == null)
          23         {
          24             path = req.getContextPath() + servletpath;
          25         }
          26         out.println(scriptname + "._path = '" + path + "';"); //$NON-NLS-1$ //$NON-NLS-2$
          27 
          28         Method[] methods = creator.getType().getMethods();
          29         for (int i = 0; i < methods.length; i++)
          30         {
          31             Method method = methods[i];
          32             String methodName = method.getName();
          33 
          34             // We don't need to check accessControl.getReasonToNotExecute()
          35             // because the checks are made by the doExec method, but we do check
          36             // if we can display it
          37             String reason = accessControl.getReasonToNotDisplay(req, creator, scriptname, method);
          38             if (reason != null && !allowImpossibleTests)
          39             {
          40                 continue;
          41             }
          42 
          43             // Is it on the list of banned names
          44             if (jsutil.isReservedWord(methodName))
          45             {
          46                 continue;
          47             }
          48 
          49             out.print('\n');
          50             out.print(scriptname + '.' + methodName + " = function("); //$NON-NLS-1$
          51             Class[] paramTypes = method.getParameterTypes();
          52             for (int j = 0; j < paramTypes.length; j++)
          53             {
          54                 if (!LocalUtil.isServletClass(paramTypes[j]))
          55                 {
          56                     out.print("p" + j + ""); //$NON-NLS-1$ //$NON-NLS-2$
          57                 }
          58             }
          59             out.println("callback) {"); //$NON-NLS-1$
          60 
          61             out.print("    DWREngine._execute(" + scriptname + "._path, '" + scriptname + "', '" + methodName + "\', "); //實現javascript調用java內的方法
                           for (int j = 0; j < paramTypes.length; j++)
          63             {
          64                 if (LocalUtil.isServletClass(paramTypes[j]))
          65                 {
          66                     out.print("false, "); //$NON-NLS-1$
          67                 }
          68                 else
          69                 {
          70                     out.print("p" + j + ""); //$NON-NLS-1$ //$NON-NLS-2$
          71                 }
          72             }
          73             out.println("callback);"); //$NON-NLS-1$
          74 
          75             out.println('}');
          76         }
          77 
          78         out.flush();
          79     }
          DWR例子程序下載地址:http://www.aygfsteel.com/Files/javajohn/dwr.rar
          (待續)
          posted on 2007-10-23 10:37 蘆葦 閱讀(951) 評論(0)  編輯  收藏 所屬分類: JAVA
          主站蜘蛛池模板: 阆中市| 黔江区| 潜江市| 德安县| 河东区| 富川| 海晏县| 绿春县| 清流县| 个旧市| 胶南市| 达孜县| 轮台县| 怀仁县| 南汇区| 金堂县| 泽库县| 永善县| 桂平市| 湖南省| 伊春市| 普洱| 邻水| 闵行区| 镇沅| 昌宁县| 浙江省| 临洮县| 合江县| 同仁县| 临沂市| 科技| 江陵县| 卓资县| 合川市| 太白县| 班戈县| 碌曲县| 澎湖县| 富源县| 鄂温|