DWR框架的初步使用-第一个DWR程序

DWR(Direct Web Remoting)是一个使用javascript代码可以调用java代码的远程服务器端Ajax开源框架。

DWR原理是利用java的反射机制使javascript端能够动态的生成javas代码。

下面我们来看一看怎么使用DWR来创建第一个入门程序:

首先导入dwr.jar包,然后导入commons-logging

配置web.xml文件:

<?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>SoftTalent</display-name>
    <servlet>
        <servlet-name>dwr-invoker</servlet-name>
        <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
        <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中的参数debug在开发阶段可以设置为true方便调试,开发完成之后将其设置为false。

   web.xml配置完成之后新建一个dwr.xml 里面配置的是java的类以及对应的javascript对象名称:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
   "http://getahead.org/dwr/dwr30.dtd">
     <dwr>
      <allow>
         <create creator="new" javascript="demo">
              <param name="class" value="com.ipro.softtalents.test.TestDwr"/>
         </create>
      </allow>
  </dwr>
如上面所写的java端的类是com.ipro.softtalents.test包下的TestDwr类在javascript对应的对象名称叫做demo,在javascript端使用demo.xxxx()方法就可以直接调用

java代码了。

java代码如下:

package com.ipro.softtalents.test;

public class TestDwr {
    
    public String rest(){
        try{
            System.out.println("Test dwr hello world!");
        }catch(Exception e){
            e.printStackTrace();
        }
       return "test invoke success!";
    }
}

jsp页面代码如下:

 <%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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=utf-8">
<link rel="stylesheet" type="text/css" href="css/style.css"></link>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/engine.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/util.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/interface/demo.js"></script>

<script>
   function test1(){
       demo.rest(
               function(data){
                    alert(data);   //data为java端代码的返回值   javascript的语法
                });
   }
</script>
 <title>title</title>
</head>
<body>
    <c:import url="/jsp/common/head.jsp"/>
        <input type="button" value="调用Test" οnclick="test1();">
    <br>
    <c:import url="/jsp/common/root.jsp"/>
</body>
</html>


上面导入的engine.js和util.js是必须要导入的js文件 后面第三个js名称格式为:   basePath/dwr/interface/javscript端设置的对象名.js;

basePath最好使用${pageContext.request.contextPath}这样的格式来写,使用

<%
   String path=request.getContextPath();
   String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getLocalPort()+"/"+path+"/";
%>

<base href="<%=basePath%>">这样的路径在dwr2.0会报出  No data received from server错误

                                                                                   dwr3.0中会报出  dwr.engine.incompleteReply, Incomplete reply from server错误

具体还不知道什么原因,待查。但使用${pageContext.request.contextPath}这样的格式就没有问题:

这是客户端的信息:

    test invoke success!

这是服务端控制台打印的信息:Test dwr hello world!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值