DWR源码学习(一)

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(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值