DWR源碼學習(一)
多余的話就不說了,請看DWR的例子程序:
web.xml

?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

?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?





?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()?+?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?????}
(待續)
posted on 2006-05-27 19:23 javajohn 閱讀(5548) 評論(13) 編輯 收藏 所屬分類: AJAX