<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

           Dwr 通過用戶配置文件 dwr.xml java 類映射成一個 javascript 對象,從實現手法上看與 java 里的數據映射很相似。而 dwr 是將 JAVA 的對象映射到了 js 里,由客戶端的 JS 提供給用戶各類實現,而 java 代碼完全在后臺運行。

           DWR 函數調用里涉及到的 JS 代碼: engine.js

           DWR 函數調用里涉及到的類有: AbstractDWRServlet DefaultProcessor

    用戶在提交 request 以后的操作步驟請參見我 blog 里的:《 dwr 源碼學習(一)》, JAVA 代碼生成的映射 JS 代碼其實只是一個 javascript 接口,它調用了 DWREngine._execute 這個函數,而這個函數大體只是執行了一些解析的工作,在它結尾處調用了 DWREngine.endBatch() ,然后又執行了 DWREngine._sendData(batch) ,這時我們會發現有這樣一句: batch.req.open("GET", batch.path + "/exec/" + statsInfo + "?" + query, batch.async); ”很熟悉吧。

        下一步就到了真正的實現 js 調用 java 代碼里方法的時候了,興奮吧。其實實現也是很簡單的。通過 servlet 這里實現了對各類型 request 參數的不同的匹配,還是看 AbstractDWRServlet .getPost() 這個方法:

     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);
     9         }
    10         finally
    11         {
    12             builder.unset();
    13             ServletLoggingOutput.unsetExecutionContext();
    14         }
    15 }
    16 注意processor.handle(req, resp);
    17     public void handle(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException
    18     {
    19         String pathInfo = req.getPathInfo();
    20         String servletPath = req.getServletPath();
    21 
    22         if (nullPathInfoWorkaround && pathInfo == null)
    23         {
    24             pathInfo = req.getServletPath();
    25             servletPath = HtmlConstants.PATH_ROOT;
    26             log.debug("Default servlet suspected. pathInfo=" + pathInfo + "; contextPath=" + req.getContextPath() + "; servletPath=" + servletPath); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
    27         }
    28 
    29         if (pathInfo == null ||
    30             pathInfo.length() == 0 ||
    31             pathInfo.equals(HtmlConstants.PATH_ROOT))
    32         {
    33             resp.sendRedirect(req.getContextPath() + servletPath + HtmlConstants.FILE_INDEX);
    34         }
    35         else if (pathInfo.startsWith(HtmlConstants.FILE_INDEX))
    36         {
    37             index.handle(req, resp);
    38         }
    39         else if (pathInfo.startsWith(HtmlConstants.PATH_TEST))
    40         {
    41             test.handle(req, resp);
    42         }
    43         else if (pathInfo.startsWith(HtmlConstants.PATH_INTERFACE))
    44         {
    45             iface.handle(req, resp);
    46         }
    47         else if (pathInfo.startsWith(HtmlConstants.PATH_EXEC))
    48         {
    49             exec.handle(req, resp);
    50         }
    51         else if (pathInfo.equalsIgnoreCase(HtmlConstants.FILE_ENGINE))
    52         {
    53             file.doFile(req, resp, HtmlConstants.FILE_ENGINE, HtmlConstants.MIME_JS);
    54         }
    55         else if (pathInfo.equalsIgnoreCase(HtmlConstants.FILE_UTIL))
    56         {
    57             file.doFile(req, resp, HtmlConstants.FILE_UTIL, HtmlConstants.MIME_JS);
    58         }
    59         else if (pathInfo.equalsIgnoreCase(HtmlConstants.FILE_DEPRECATED))
    60         {
    61             file.doFile(req, resp, HtmlConstants.FILE_DEPRECATED, HtmlConstants.MIME_JS);
    62         }
    63         else
    64         {
    65             log.warn("Page not found (" + pathInfo + "). In debug/test mode try viewing /[WEB-APP]/dwr/"); //$NON-NLS-1$ //$NON-NLS-2$
    66             resp.sendError(HttpServletResponse.SC_NOT_FOUND);
    67         }
    68     }
    69 

    也就只有這幾種類型的請求,還記得 DWREngine._sendData 嗎?里面有這么一句:“ batch.req.open("GET", batch.path + "/exec/" + statsInfo + "?" + query, batch.async); ”看到他的請求路徑是 exec ,對應在 processor.handle(req, resp); 這個方法里就是 exec ,在剛才的 JAVA 代碼里我們已經看到過了是括號內的代碼( else if (pathInfo.startsWith(HtmlConstants. PATH_EXEC )) ),而 exec 早已在 servlet 初始化的時候就已經設置為 DefaultExecProcessor ,它的函數 hadle() 就是具體對 js 調用 java 類方法的實現了。

    DWR 是一個小型的 AJAX 框架,它的實現思路簡單,其實有很多人在開發中一定也有過類似的想法。它之所以現在才出現我想大概還是要歸功于異步 javascript 消息發送這樣的技術成為現實。所以我又想 AJAX ,從技術上說只能是 javascript 有了一個飛躍性的進步,而 AJAX 的最終成功卻要靠軟件工程。

    posted on 2007-10-23 10:37 蘆葦 閱讀(394) 評論(0)  編輯  收藏 所屬分類: JAVA
    主站蜘蛛池模板: 亚洲一区在线免费观看| 亚洲国产成人综合| 日韩在线视频免费| 亚洲第一区精品日韩在线播放| 亚洲国产精品综合久久20| 在线看片免费不卡人成视频| 亚洲一区二区三区免费在线观看| 久久九九兔免费精品6| 亚洲中文无码av永久| 毛片免费全部播放一级| 亚洲成a∨人片在无码2023| 国产成人免费片在线观看| 一级女人18片毛片免费视频 | 国产亚洲人成在线播放| 免费永久看黄在线观看app| 人人鲁免费播放视频人人香蕉| 久久久久亚洲精品男人的天堂 | 日韩精品无码免费视频| 最新亚洲成av人免费看| 久久99热精品免费观看牛牛| 亚洲成人午夜电影| 白白国产永久免费视频| 一级成人生活片免费看| 久久精品国产亚洲AV无码偷窥| 在线看片免费不卡人成视频| 美女被羞羞网站免费下载| 国产亚洲婷婷香蕉久久精品| 亚洲免费中文字幕| 国产亚洲精彩视频| 亚洲精品无码不卡在线播HE | 久久精品亚洲日本波多野结衣| 亚洲国产综合精品一区在线播放| 国产猛男猛女超爽免费视频| 亚洲国产视频一区| 免费播放春色aⅴ视频| 免费网站看av片| 亚洲av无码一区二区三区天堂| 国产亚洲一区二区三区在线观看| 精品国产污污免费网站aⅴ| 黄色网页免费观看| 久久久亚洲欧洲日产国码是AV|