DWR基础学习
????? DWR(direct web remoting)是一個開源的java包,可以使瀏覽器中的代碼使用web服務器中java類的方法,就像這個方法就是在瀏覽器中一樣。
??????DWR包括兩個部分:一個運行在服務器端的Java Servlet,負責處理瀏覽器的請求并發送反饋給瀏覽器;另一個是運行在瀏覽器端的JavaScript,負責發生請求并動態修改web頁面。步驟如下:
(1)、下載dwr.jar,將WEB-INF\lib下的jar文件放在web-inf/lib目錄下
(2)、修改web.xml,增加: <servlet>???
????<servlet-name>dwr-invoker</servlet-name>???
????<display-name>DWR?Servlet</display-name>???
????<servlet-class>uk.ltd.getahead.dwr.DWRServletservlet-class>?//如果是DWR?2.x,改成org.directwebremoting.servlet.DwrServlet????
????<init-param>??
????????<param-name>debug</param-name>???
????????<param-value>true</param-value>???
????</init-param>??
</servlet>?????
<servlet-mapping>??
??? <servlet-name>dwr-invoker</servlet-name>??
??? <url-pattern>/dwr/*</url-pattern>??
</servlet-mapping>??
(3)、創建dwr.xml放在與web.xml一個目錄下面
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>???
??? <allow>
??????? <create?creator="new"?javascript="JDate">?//JS使用的類名?
???????????? <param?name="class"?value="java.util.Date"/>??//實際java的類
?????? ?</create>??
??????? <create?creator="new"?javascript="Hello" scope="page/request/session/application">?//可以設置對象保存的位置
???????????? <param?name="class"?value="com.dwr.HelloWorld"/>??//實體bean
??????? </create>??
??? </allow>??
</dwr>??
(4)、
一般jsp頁面中需要加入:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>??
<head>??
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">??
<title>DWR's? HelloWorld</title>??
<script type='text/javascript' src='dwr/interface/Hello.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='hello.js'></script>??
</head>??
<body>??
<input id="user" type="text" /><input type='button' value='哈羅' οnclick='hello();' />? <div id="result"></div>??
</body>??
</html>?
其中最后一個js文件是自定義的文件,其他的是動態生成的
(5)、寫服務端的JAVA類
package com.dwr;
public class HelloWorld {
????? private String name;
????? public HelloWorld(){}
????? public String getName(){
????????? ?return name;
????? }
????? public void setName(String name){
????????? this.name=name;
????? }
????? public String sayHello(String name){
????????? return "hello,"+name;
???? ?}
}
(6)、寫客戶端的js
function hello() {
??? var user = $('user').value;
??? Hello.sayHello(user, callback);
}
?
function callback(msg) {//回調方法
??? DWRUtil.setValue('result', msg);
}
dwr相關的幾個配置文件介紹
1.web.xml中dwr定義的一點小技巧
加下面的參數,可以讓dwr以debug模式產生測試頁面
<init-param>???
??? <param-name>debug</param-name>??
??? <param-value>true</param-value>??
</init-param>??
2.dwr.xml介紹
格式:
<dwr>?????
??? <init>???
?????? ?<creator?id="..."?class="..."/>??
?????? ?<converter?id="..."?class="..."/>??
??? </init>???
??? <allow>??
??????? <create?creator="..."?javascript="..."/>??
??????? <convert?converter="..."?match="..."/>??
??? </allow>??
??? <signatures>???
?????? ?...????
??? </signatures>????
</dwr>??
(1)一般結構如下,對每個要在遠程訪問方法的java類都要定義一個creator
<create?creator="..."?javascript="..."?scope="...">??
???? <param?name="..."?value="..."/>??
???? <auth?method="..."?role="..."/>??
???? <exclude?method="..."/>???
?????<include?method="..."/>??
</create>?? 對各個元素進行描述
(2)、 creator屬性
new:指用java的new操作符創建對象
none:并不產生對象
scripted:用腳本語言創建對象,如BeanShell?或 Groovy via BSF
spring:通過spring framework創建對象
struts:使用struts的FormBean
pageflow:使用Beehive or Weblogic的PageFlow
(3)、javascript屬性
?????????在瀏覽器端,代理的遠程java對象的javascript對象的名字,也就是說,是一個JavaScript對象名稱
(4)、scope屬性
?????????遠程java對象scope可以設置page、request、session、application。
(5)、param子元素:定義訪問的具體java類。
(6)、include和exclude子元素:限制訪問的方法
DWR util.js工具包的使用
目錄列表:
1、$()
2、DWRUtil.getText(id)
3、DWRUtil.getValue(id)
4、DWRUtil.setValue(id,value)
5、DWRUtil.getValues()
6、DWRUtil.setValues()
7、DWRUtil.addOptions and DWRUtil.removeAlloptions
8、DWRUtil.addRows and DWRUtil.removeAllRows
9、DWRUtil.onReturn
10、DWRUtil.toDescriptiveString
11、DWRUtil.useLoadingMessage
(1)、DWRUtil.selectRange("selectRangeBasic", 5, 15) 選中selectRangeBasic文本框里面從第五個字符到第15個字符之間的字符.
(2)、var arrayFive = [ 'One', 'Two', 'Three', 'Four', 'Five' ];
DWRUtil.addOptions('addOptionsBasic', arrayFive); 將數組添加到下拉菜單里面去;
(3)、DWRUtil.getValue('addOptionsBasic') 得到 addOptionsBasic 對象的值;
(4)、DWRUtil.getText('addOptionsBasic') 得到下拉框 addOptionsBasic 顯示的文本;
(5)、var arrayObject = [
{ name:'One', value:'1' },
{ name:'Two', value:'2' },
{ name:'Three', value:'3' },
{ name:'Four', value:'4' },
{ name:'Five', value:'5' }
];DWRUtil.addOptions('addOptionsObject1', arrayObject, "name"); 將數組添加到下拉菜單里面去;后面的參數是確定那個是給用戶顯示的文本,同時也是值;如果是name表示名稱和值都用name顯示。
DWRUtil.addOptions('addOptionsObject1', arrayObject, "name","value"); 同上,不過后面參數是: 3=值;4=文本;
(6)、var map = { one:1, two:2, three:3, four:4, five:5 };
DWRUtil.addOptions('addOptionsMap1', map); 同上, one 是值;1 是文本;
DWRUtil.addOptions('addOptionsMap1', map,true); 同上, 1 是值;one 是文本;
(7)、DWRUtil.cloneNode('cloneNode1', { idPrefix:'pre', idSuffix:'suf' });克隆一個節點,參數一為要克隆的節點的id,第二個參數是在克隆的節點id前面加pre,后面加suf.(注意:如果該節點有子節點的話,子節點的名字也一樣加
(8)、DWRUtil.onReturn(event, submitFunction);一般在form表單里面,防止在文本框上按回車就提交表單.
例如:
<input type="text"
οnkeypress="DWRUtil.onReturn(event, submitFunction)"/>
<input type="button" οnclick="submitFunction()"/>
submitFunction表示要調用的js函數
轉載于:https://www.cnblogs.com/flyingzqx/archive/2009/12/14/1623696.html
總結
- 上一篇: 一段时间以来的SEO优化结果
- 下一篇: 理解MySQL——复制(Replicat