DWR是一个开源的类库,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码(javascript)使用运行在WEB服务 器上的JAVA函数,就像它就在浏览器里一样. 它包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJAX原则的Servlet(小应用程序)中获取数据.另外一方面一个 JavaScript库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容.
DWR的简单应用:
1、下载DWR开发发包,建议下载ZIP的压缩包,方便程序员学习。我使用的DWR版本是:dwr-2.0.3-src
2、新建web工程,在WEB-INF/lib下引入dwr.jar包, 添加dwr.xml文件(在DWR ZIP中有类似的dwr.xml文件可以COPY去掉没有用的内容即可)
3、在web.xml中加入如下配置:
<!-- 配置DWR -->
<servlet>
<display-name>DWR2.0.3 SERVELET</display-name>
<servlet-name>dwr-invoke</servlet-name>
<servlet-class>org.directwebremoting.servlet.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-invoke</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
4、写一个简单的JavaBean,如下:
package com.brofe.dwr.pojo;
public class RemotePojo {
public RemotePojo() {}
public String remoteGetStr () {
return "你好,brofe。 欢迎!!!";
}
}
5、在dwr.xml文件添加如下配置(一下是完整的xml文件,你只需CTRL + A, CTRL + C , CTRL +V):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<create javascript="RemotePojo" creator="new">
<param name="class" value="com.brofe.dwr.pojo.RemotePojo" />
<include method="remoteGetStr"/>
</create>
</allow>
</dwr>
6、新建JSP页面引入如下脚本:
<!-- 导入DWR2.0.3核心的JS文件 -->
<script type="text/javascript" src="<%=request.getContextPath()%>/dwr/engine.js"></script>
<script type="text/javascript" src="<%=request.getContextPath()%>/dwr/util.js"></script>
<script type="text/javascript" src="<%=request.getContextPath()%>/dwr/interface/RemotePojo.js"></script>
7、调用
<script type="text/javascript">
var show = document.getElementById("show");
function getStr () {
RemotePojo.remoteGetStr(getStrCallback);
}
function getStrCallback (result) {
show.innerText = result;
}
</script>
补充:在DWR中需要用到session,request等这些东西的时候,可以用以下方法获取:
1. 使用DWR的API (很多人都不推荐这种做法,经测试,使用起来肯定没问题)
WebContext ctx = WebContextFactory.get();
ctx.getSession()
ctx.getHttpServletRequest()
...
2. 在Java的服务方法中定义这些类型的参数,让DWR自动传入相应的对象:
HttpServletRequest,HttpServletResponse,HttpSession,ServletContext,ServletConfig.
示例如下:
Java端定义方法: saveOrder(String id, String name, HttpSession session)
Javascript调用: OrderService.saveOrder(jsID,jsName,callBack)
注意,这里不需要传入session这个参数,DWR会自动传入,在Java端可以直接使用.