dwr

java开发人员和网页设计人员的桥梁,dwr。
DWR(Direct Web Remoting)是一个用于改善web页面与Java类
交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含
AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB
服务器上的JAVA函数,就像它就在浏览器里一样。

RPC(Remote Procedure Call Protocol)——远程过程调用协议
,它是一种通过网络从远程计算机程序上请求服务,而不需要了
解底层网络技术的协议。RPC协议假定某些传输协议的存在,
如TCP或UDP,为通信程序之间携带信息数据。
在OSI网络通信模型中,RPC跨越了传输层和应用层。
RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

OSI是Open System Interconnect的缩写,意为开放式系统互联。
国际标准组织(国际标准化组织)制定了OSI模型。
这个模型把网络通信的工作分为7层,分别是物理层、数据链路
层、网络层、传输层、会话层、表示层和应用层。

负责处理客户端请求,并呼叫java物件的是DWRServlet,DWR其实
有些model2的味道,只是view这一层比较弱,因为前端数据的
获取是通过javascript程序代码来完成的。

在mvc模型中,通过在web.xml文件里加入中央servlet的配置
获取客户端的所有请求。然后找寻第三方的配置文件,
进行action的分发。对于dwr也类似,需要在web.xml加入dwr的
中央控制器,然后读取dwr的配置文件,进行远程服务器端或者
分布式应用程序的调用。
在web.xml中加入DWRServlet的配置:
<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  <display-name>  ajaxDWR</display-name>  <servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
    <init-param>
      <description>
      </description>
      <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></web-app>

class里的main函数是为了测试用的。真正发布运行调用的是客户
端的请求。

package onlyfun.caterpillar; public class Hello {  public String hello(String name) {      return "哈囉!" + name + "!您的第一個DWR!";    }}

<?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="Hello">      <param name="class" value="onlyfun.caterpillar.Hello" />    </create>  </allow></dwr>


creator設定為new,表示使用Hello的無參數建構子來生成物件,javascript設定為Hello,表示客戶端JavaScript程式可以使用Hello來呼叫對應的onlyfun.caterpillar.Hello物件
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=BIG5">  <title>第一個DWR程式</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='哈囉' onclick='hello();' />
 <div id="result"></div> </body></html>
dwr/interface/Hello.js是由DWRServlet根據dwr.xml中的設定生成的,
engine.js負責客戶端伺服端溝通,
util.js是一些好用的JavaScript程式,可以讓您少寫很多JavaScript。
function hello() {
   var user = $('user').value;
    Hello.hello(user, callback);}
function callback(msg) {   DWRUtil.setValue('result', msg);}
${'user'}取得輸入欄位的DOM物件
,value取得當中的欄位值,而後呼叫Hello.hello(),並將value當作參數傳送… 結果是呼叫Server端的Hello Java物件,當結果傳回後,會呼叫JavaScript的callback函式,DWRUtil的setValue()方法會將傳回的msg設定給指定 id的DOM

package onlyfun.caterpillar;
import java.util.ResourceBundle;
public class Book {  private ResourceBundle resource;   
public Book() {
    resource = ResourceBundle.getBundle("book");   }
          public String getDescription(String key) {
    retn resource.getString(key);  }} 
從程式中就知道,它會去抓book_zh_TW.properties的資料。
获取本地的一些资源文件。对于存在中文的资源文件,需要
使用bin目录下的native2ascii工具进行转换以支持国际化。 

 <div id="spring" onmouseover="getBookData(this);" onmouseout="clearData();"><a href="http://www.gotop.com.tw/waweb2004/home/home.aspx?pg=HM010X&bn=ACL021000">
<small><img style="border: 0px solid ; width: 80px; height: 110px; float: left;" alt="Spring 技術手冊" title="Spring 技術手冊" src="images/SpringTech_S.jpg" hspace="10" vspace="2"></small></a></div>

4、多dwr.xml文件的配置

可能有几种情况,我们一一列举。 一个servlet,多个dwr.xml配置文件;
多个servlet,每个servlet对应一个或多个dwr.xml.

一个servlet,多个dwr.xml配置文件;


java代码:  

<servlet>

    <servlet-name>dwr-invoker</servlet-name>

    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>

    <init-param>

      <param-name>config-1</param-name>

      <param-value>WEB-INF/dwr1.xml</param-value>

    </init-param>

    <init-param>

      <param-name>config-2</param-name>

      <param-value>WEB-INF/dwr2.xml</param-value>

    </init-param>

</servlet>

 
在这种配置下,param-name的值必须以config开头。param-name可以有>=0个。如果没有param-name,那么将会读取 WEB-INF/dwr.xml。如果有大于零个param-name,那么WEB-INF/dwr.xml文件将不会被读取。

多个servlet,每个servlet对应一个或多个dwr.xml


java代码:  

<servlet>

   <servlet-name>dwr-invoker</servlet-name>

    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>

<!--用classes/dwr.xml-->

</servlet>

<servlet>

   <servlet-name>dwr-invoker1</servlet-name>

   <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>

   <init-param>

     <param-name>config-admin</param-name>

     <param-value>WEB-INF/dwr1.xml</param-value>

   </init-param>

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

<servlet-mapping>

   <servlet-name>dwr-invoker1</servlet-name>

   <url-pattern>/dwr1/*</url-pattern>

</servlet-mapping>

 
在这种情况下,我们可以根据J2EE security来控制权限,针对不同url,加不同的角色

 

你可能感兴趣的:(DWR)