DWR的簡單理解與實現(一)

1>:DWR的原理:

它是通過動態的把java對象動態地生成爲javascript對象,使得客戶端通過腳本就能訪問到服務器對象。就像AJAX通過XMLHttpRequest訪問服務器一樣。不過DWR更簡單。

2>:DWR框架的搭建:

1:首先去http://directwebremoting.org/dwr/下載所需要的engine.js和util.js,下載DWR.jarjar包。

2:配置web.xml文件

<servlet>
   <display-name>dwr</display-name>
   <servlet-name>dwr</servlet-name>
   <!-- 這個其實和Struts的一樣,在服務器啓動時加載這個Servlet -->
   <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
   <!-- 這個是用來查看我們DWR下可以允許調用的java類,可以輸如://http://localhost:8080/工程名/dwr/查看 -->
   <init-param>
    <param-name>debug</param-name>
    <param-value>true</param-value>
   </init-param>
<!-- 可能有時我們需要配置多個dwr.xml可以採用如下所示-->
   <init-param>   
      <param-name>config-dwr</param-name>       
      <param-value>WEB-INF/dwr.xml,WEB-INF/dwr1.xml,WEB-INF/dwr2.xml</param-value>   
   </init-param>
   <!-- 
   <init-param>   
      <param-name>config-dwr1</param-name>       
      <param-value>WEB-INF/dwr1.xml</param-value>   
   </init-param> 
   <init-param>   
      <param-name>config-dwr2</param-name>       
      <param-value>WEB-INF/dwr2.xml</param-value>   
   </init-param> 
    -->       
</servlet>
<servlet-mapping>
   <servlet-name>dwr</servlet-name>
   <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

3:編寫我們的類

public class Student {
	public String say(String str)
	{
		return str+"I'm a Student";
	}
}
public class Teacher {
	public String say()
	{
		return "I'm a teacher";
	}
}


 

public class Score {
public String say()
		{
			return "I'm a Score";
		}
	

}

4:在WEB-INF下建立我們自己的dwr.xml

對於Teacher類和Score類的DWR.xml與這個一樣,大家感興趣可以自幾建。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC    "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"    "http://www.getahead.ltd.uk/dwr/dwr20.dtd">

<dwr>
	<allow>
	<!-- creator 對象創建方式通常有四種:new 、spring、null、script下面的就是new的方式 -->
		<create creator="new" javascript="DWRStudent">
			<param name="class" value="Student"/>
		</create>
	   <create creator="new" javascript="JDate">
	    <param name="class" value="java.util.Date" />
	   </create>
	</allow>
	<dwr>


5:建立我們的index.jsp

<!--  <url-pattern>/dwr/*</url-pattern> -->
	<!-- 對應html中這個路徑,很多例子都是dwr,開始很不很明白,還以爲放置的engine.js的路徑 -->
	<script type='text/javascript' src='/Test/dwr/engine.js'></script>
	<script type='text/javascript' src='/Test/dwr/interface/DWRStudent.js'></script>
	<script type='text/javascript' src='/Test/dwr/interface/DWRScore.js'></script>
	<script type='text/javascript' src='/Test/dwr/interface/DWRTeacher.js'></script>
    <script type='text/javascript' src='/Test/dwr/interface/JDate.js'></script>
    <script type='text/javascript' src='/Test/dwr/engine.js'></script>
   <script type='text/javascript'>
    function displayDate()
    { 
     var str = JDate.toString();
     alert(str);
    } 
    function displaySay()
    {
     var str=DWRStudent.say("Hello",callback);
     var str1=DWRScore.say(callback);
     var str2=DWRTeacher.say(callback);
     //關於回調函數其實在你調用callback時,其實就是又調用了say(),這個方法。
     //data用來接收say方法的返回值,當然你也只可在回調方法時給他傳參,其實我感覺真正的調用java方法執行是在回調函數使用時。
     //否則返回值是“undefined”未定義的
    }
    function callback(data)
    {
     alert(data);
    }
   
</script>
</head>
<body>
   <input  type="button" id="date" value=" 日期 " οnclick="displayDate()">
    <input  type="button" id="content" value="say" οnclick="displaySay()">
</body>
</html>

這樣簡單地DWRk框架就是搭建好了。

3>:關於convert的一些知識

DWR幫助我們將本地的javascript腳本函數調用轉變成對遠程java對象函數的調用。在函數的調用過程中我們需要傳遞參數,這樣我們就需要將本地的javascript變量轉變成對應的java類型變量。這個就是Convertor的作用。DWR內部爲我們編寫了一些JAVA主要類型的Convertor.默認下面的數據類型會自動轉換:boolean, byte, short, int, long, float, double, char, java.lang.Boolean, java.lang.Byte, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Float, java.lang.Double, java.lang.Character, java.math.BigInteger, java.math.BigDecimal and java.lang.String.但是假如我們有這樣一個方法A.setB(B b),現在我們要在javascript腳本中調用該方法,我們需要傳遞java類型爲B的參數,這個時候我們就需要配B配置Convertor

如果大家對這個convert還不是很理解請到http://blog.csdn.net/xwdengjie/article/details/2867908查看。




 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章