23456<" />

DWR源码学习(一)

系统 1818 0
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(

DWR源码学习(一)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论