最近公司要弄一个后台持续推送信息的功能,查了下需要用到DWR,遂研究之。
一个最基本的DWR实例需要两个包:dwr.jar和commons-logging-1.0.4.jar.(不知道怎么下载,需要去官网下载),下面开始步入正题:
1.创建一个JavaWeb项目,并且将上面的两个包拖入到WEB-INF下的lib里面去。
2.修改web.xml。<固定写法,直接复制>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>Dwr</display-name>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.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> <!--此处列为标记1,后面有解释-->
</servlet-mapping>
</web-app>
3.创建一个实体类。
package com.mz.dwr;
public class DwrDemo {
public String getInput(String input){
return "你的输入是"+input;
}
}
4. 配置dwr.xml<重点部分,这部分主要配置javascript与java的映射>
在web.xml同级目录下创建新的xml文件,名称叫做dwr.xml,主要配置信息如下:
<allow>
<create creator="..." javascript="..." scope="...">
<param name="..." value="..."/>
<auth method="..." role="..."/>
<exclude method="..."/>
<include method="..."/>
</create>
...
</allow>
其中creator和javascript是必须属性。其余可以省略,主要作用如下表所示:
下来看下我们程序的配置:
<?xml version="1.0" encoding="UTF-8"?>
<dwr>
<allow>
<!--标记2-->
<create creator="new" javascript="Demo">
<param name="class" value="com.mz.dwr.DwrDemo"></param>
</create>
<!-- java 类库 -->
<create creator="new" javascript="MyDate">
<param name="class" value="java.util.Date"></param>
</create>
<!-- convert元素用于数据类型转换,即java类和javascript之间相互转换 -->
<convert converter="exception" match="java.lang.Exception" />
<convert converter="bean" match="java.lang.StackTraceElement" />
</allow>
</dwr>
下面解释一下标记2.。标记2中creator的值只能是下面几个,不能乱起。
而后面javascript中的值代表的是与由这个类被改成的js.<要知道dwr的本质是将java代码经过反射修改为js代码>;在这里你姑且可以认为把类改成成了一个名字为Demo的js文件,Demo.js.
5.新建一个jsp页面。
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
标记3
-->
<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 type="text/javascript">
function getInput(name) {
Demo.getInput(name, dwrHandler);
}
function dwrHandler(data) {
alert(data);
}
</script>
</head>
<body>
<input type="button" οnclick="getInput('mazhan')" value="hh">
</body>
</html>
这里主要注意一下标记3,标记下面引入的三个js文件,前两个是自动生成的。必须引入。其中xxx/dwr/xxx.js中的dwr,是和标记1的设置相同的。
引人的第三个js文件,作用是中 xxx/dwr/interface/xxx.js的命名,dwr和上面一样,interface是必须加的,xxx.js的名称是根据标记2中javascript后面接的名字相同。
所以在调用时,直接Demo.函数就是调用java里面的代码,dwrHandler是回调函数。
如此一下,一个简单的dwr程序就写好了。
下一章,讲一下与Spring的整合。