多余的话就不说了,请看DWR的例子程序:
web.xml
 <?
    
    
      xml version="1.0" encoding="ISO-8859-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"
    
    
      >
      
    
    
      <!
    
    
      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"
    
    
      >
      
    
    
      <
    
    
      web-app 
    
    
      id
    
    
      ="dwr"
    
    
      >
    
    
      5
 
      
      6
 <
    
    
      display-name
    
    
      >
    
    
      DWR (Direct Web Remoting)
    
    
      </
    
    
      display-name
    
    
      >
      
        
    
    
      <
    
    
      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
    
    
      >
      
        
    
    
      <
    
    
      description
    
    
      >
    
    
      A demo of how to call Java on the server directly from Javascript on the client
    
    
      </
    
    
      description
    
    
      >
    
    
      8
 
      
      9
 <
    
    
      servlet
    
    
      >
      
        
    
    
      <
    
    
      servlet
    
    
      >
    
    
      10
 <
    
    
      servlet-name
    
    
      >
    
    
      dwr-invoker
    
    
      </
    
    
      servlet-name
    
    
      >
      
          
    
    
      <
    
    
      servlet-name
    
    
      >
    
    
      dwr-invoker
    
    
      </
    
    
      servlet-name
    
    
      >
    
    
      11
 <
    
    
      display-name
    
    
      >
    
    
      DWR Servlet
    
    
      </
    
    
      display-name
    
    
      >
      
          
    
    
      <
    
    
      display-name
    
    
      >
    
    
      DWR Servlet
    
    
      </
    
    
      display-name
    
    
      >
    
    
      12
 <
    
    
      description
    
    
      >
    
    
      Direct Web Remoter Servlet
    
    
      </
    
    
      description
    
    
      >
      
          
    
    
      <
    
    
      description
    
    
      >
    
    
      Direct Web Remoter Servlet
    
    
      </
    
    
      description
    
    
      >
    
    
      13
 <
    
    
      servlet-class
    
    
      >
    
    
      uk.ltd.getahead.dwr.DWRServlet
    
    
      </
    
    
      servlet-class
    
    
      >
      
          
    
    
      <
    
    
      servlet-class
    
    
      >
    
    
      uk.ltd.getahead.dwr.DWRServlet
    
    
      </
    
    
      servlet-class
    
    
      >
    
    
      14
 <!--
      
          
    
    
      <!--
    
    
      15
 <init-param>
      
          <init-param>
      16
 <param-name>config</param-name>
      
            <param-name>config</param-name>
      17
 <param-value>WEB-INF/dwr.xml</param-value>
      
            <param-value>WEB-INF/dwr.xml</param-value>
      18
 </init-param>
      
          </init-param>
      19
 -->
      
          
    
    
      -->
    
    
      20
 <
    
    
      init-param
    
    
      >
      
          
    
    
      <
    
    
      init-param
    
    
      >
    
    
      21
 <
    
    
      param-name
    
    
      >
    
    
      debug
    
    
      </
    
    
      param-name
    
    
      >
      
            
    
    
      <
    
    
      param-name
    
    
      >
    
    
      debug
    
    
      </
    
    
      param-name
    
    
      >
    
    
      22
 <
    
    
      param-value
    
    
      >
    
    
      true
    
    
      </
    
    
      param-value
    
    
      >
      
            
    
    
      <
    
    
      param-value
    
    
      >
    
    
      true
    
    
      </
    
    
      param-value
    
    
      >
    
    
      23
 </
    
    
      init-param
    
    
      >
      
          
    
    
      </
    
    
      init-param
    
    
      >
    
    
      24
 <
    
    
      init-param
    
    
      >
      
          
    
    
      <
    
    
      init-param
    
    
      >
    
    
      25
 <
    
    
      param-name
    
    
      >
    
    
      scriptCompressed
    
    
      </
    
    
      param-name
    
    
      >
      
            
    
    
      <
    
    
      param-name
    
    
      >
    
    
      scriptCompressed
    
    
      </
    
    
      param-name
    
    
      >
    
    
      26
 <
    
    
      param-value
    
    
      >
    
    
      false
    
    
      </
    
    
      param-value
    
    
      >
      
            
    
    
      <
    
    
      param-value
    
    
      >
    
    
      false
    
    
      </
    
    
      param-value
    
    
      >
    
    
      27
 </
    
    
      init-param
    
    
      >
      
          
    
    
      </
    
    
      init-param
    
    
      >
    
    
      28
 <
    
    
      load-on-startup
    
    
      >
    
    
      1
    
    
      </
    
    
      load-on-startup
    
    
      >
      
          
    
    
      <
    
    
      load-on-startup
    
    
      >
    
    
      1
    
    
      </
    
    
      load-on-startup
    
    
      >
    
    
      29
 </
    
    
      servlet
    
    
      >
      
        
    
    
      </
    
    
      servlet
    
    
      >
    
    
      30
 
      
      31
 <
    
    
      servlet-mapping
    
    
      >
      
        
    
    
      <
    
    
      servlet-mapping
    
    
      >
    
    
      32
 <
    
    
      servlet-name
    
    
      >
    
    
      dwr-invoker
    
    
      </
    
    
      servlet-name
    
    
      >
      
          
    
    
      <
    
    
      servlet-name
    
    
      >
    
    
      dwr-invoker
    
    
      </
    
    
      servlet-name
    
    
      >
    
    
      33
 <
    
    
      url-pattern
    
    
      >
    
    
      /dwr/*
    
    
      </
    
    
      url-pattern
    
    
      >
      
          
    
    
      <
    
    
      url-pattern
    
    
      >
    
    
      /dwr/*
    
    
      </
    
    
      url-pattern
    
    
      >
    
    
      34
 </
    
    
      servlet-mapping
    
    
      >
      
        
    
    
      </
    
    
      servlet-mapping
    
    
      >
    
    
      35
 
      
      36
 </
    
    
      web-app
    
    
      >
      
    
    
      </
    
    
      web-app
    
    
      >
    
  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
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
 
      
      
         .
      
      .
    
   <
    
    
      script 
    
    
      type
    
    
      ='text/javascript' 
    
    
      src
    
    
      ='dwr/interface/Test.js'
    
    
      ></
    
    
      script
    
    
      >
    
    
        
    
    
      <
    
    
      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/engine.js'
    
    
      ></
    
    
      script
    
    
      >
    
    
       <
    
    
      script 
    
    
      type
    
    
      ='text/javascript' 
    
    
      src
    
    
      ='dwr/util.js'
    
    
      ></
    
    
      script
    
    
      >
      
        
    
    
      <
    
    
      script 
    
    
      type
    
    
      ='text/javascript' 
    
    
      src
    
    
      ='dwr/util.js'
    
    
      ></
    
    
      script
    
    
      >
    
  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);//这个方法是我们要关注的
}
。。。。。。。
}
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(


 
					 
					