dwr配置文件dwr.xml祥解
本人對dwr 中文文檔關于dwr.xml做的一個整理,純粹體力活,有用得著的朋友別忘頂一下,留個聯系方式一起交流學習! dwr.xml是DWR的配置文件。默認情況下,應該把它放到WEB-INF目錄(web.xml的目錄)下 創建dwr.xml文件dwr.xml文件的結構如下: <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd"><dwr> <!-- init is only needed if you are extending DWR --> <init> <creator id="..." class="..."/> <converter id="..." class="..."/> </init> <!-- without allow, DWR isn't allowed to do anything --> <allow> <create creator="..." javascript="..."/> <convert converter="..." match="..."/> </allow> <!-- you may need to tell DWR about method signatures --> <signatures> ... </signatures></dwr> 術語這里是一些必須理解的術語 - 參數會被converted,遠程Bean會被created。所以如果你有一個叫A的bean,它有一個方法叫A.blah(B) 那么你需要一個A的creator和一個B的converter。 一:<allow>allow段落里面定義的試DWR可以創建和轉換的類。 二:Creatorsdwr.xml文件中的create元素的結構如下: <allow> <create creator="..." javascript="..." scope="..."> <param name="..." value="..."/> <auth method="..." role="..."/> <exclude method="..."/> <include method="..."/> </create> ...</allow> 這里的多數元素都是可選的 - 你真正必須知道的是指定一個creator和一個javascript名字。 creator屬性 是必須的 - 它用來指定使用那種創造器。 默認情況下DWR1.1有8種創造器。它們是:
如果你需要寫自己的創造器,你必須在init部分注冊它。 javascript屬性 用于指定瀏覽器中這個被創造出來的對象的名字。你不能使用Javascript的關鍵字。 scope屬性 非常類似servlet規范中的scope。 它允許你指定這個bean在什么生命范圍。選項有"application", "session", "request" 和"page"。這些值對于Servlet和JSP開發者來說應該相當熟悉了。 scope屬性是可選的。默認是"page"。如果要使用"session"需要cookies。當前的DWR不支持ULR重寫。 param元素 被用來指定創造器的其他參數,每種構造器各有不同。例如,"new"創造器需要知道要創建的對象類型是什么。每一個創造器的參數在各自的文檔中能找到。請查看上面的鏈接。 include和exclude元素 允許創造器來限制類中方法的訪問。一個創造器必須指定include列表或exclude列表之一。如果是include列表則暗示默認的訪問策略是"拒絕";如果是exclude列表則暗示默認的訪問策略是"允許"。 例如要拒絕防范除了setWibble()以外的所有方法,你應該把如下內容添加到dwr.xml中。 <create creator="new" javascript="Fred"> <param name="class" value="com.example.Fred"/> <include method="setWibble"/></create> 對于加入到create元素中的類的所有方法都是默認可見的。 auth元素 允許你指定一個J2EE的角色作為將來的訪問控制檢查: <create creator="new" javascript="Fred"> <param name="class" value="com.example.Fred"/> <auth method="setWibble" role="admin"/></create>
new創造器在DWR中已經默認聲明了:<creator id="new" class="uk.ltd.getahead.dwr.create.NewCreator"/> 。你不需要在dwr.xml文件中添加這段話,它已經存在于DWR的內部dwr.xml文件中了。 這個創造器通過類默認的夠早函數創造對象實例。用new創造器有一些好處:
你可以通過下面的方式使用new創造器來創造遠程調用Bean: <allow> <create creator="new" javascript="Blah"> <param name="class" value="java.util.Date"/> </create> ... </allow> 這些代碼把 java.util.Date 映射成Javascript,并且命名為Blah,所以在Javascript中當你調用Blah.toString(reply) 那么一個新的 java.util.Date 就會通過默認的構造函數創造出來, 然后 toString() 方法被調用, 然后結果數據返回給reply方法(在這個例子中date是字符串格式)。
none'創造器不創建任何對象 - 它會假設你不需要創建對象。這有可能是對的,有兩個原因。 你可能在使用的scope不是"page"(看上面),并在在前面已經把這個對象創建到這個scope中了,這時你就不需要再創建對象了。 還有一種情況是要調用的方法是靜態的,這時也不需要創建對象。DWR會在調用創建器之前先檢查一下這個方法是不是靜態的。 對于上訴兩種情況,你仍然需要class參數,用來告訴DWR它是在操作的對象類型是什么。
scripted創造器在DWR中已經默認聲明了:<creator id="script" class="uk.ltd.getahead.dwr.create.ScriptedCreator"/> 這個創造器用BSF來執行腳本得到Bean,例如: <allow> ... <create creator="script" javascript="EmailValidator"> <param name="language" value="beanshell"/> <param name="script"> import org.apache.commons.validator.EmailValidator; return EmailValidator.getInstance(); </param> </create> ...</allow> script創造器有如下參數:
需要了解的主題要使用這個創造器,你需要把一些輔助庫放到WEB-INF/lib文件夾下:BSF的jar包 當一個類是用script創造出來的,并且scope是session或application,如果你的腳本改變,session中的類和script中的類就不一致了。這樣會出現錯誤。雖然web容器不用重啟,但是用戶需要先登出(或以某種方式清空session),然后再登錄。 當clazz參數不為空,并且用來創造新實例,DWR簡單的調用 class.newInstance() 方法。這種方法是沒問題的,除非腳本正在用某個參數創建一個類,或者調用某個函數來配置這個類。 不幸的是,每次請求都要重新運行script并造成上面的問題。 |
---------------------------------------------------------------------------------------
——使你疲勞的不是遠方的高山,而是你鞋里一粒沙子!