这部分将实际开发一个应用,套用了一个老外的示例模板,做了一个在线礼品的简易版本。
先讲一下应用的结构
页面端:
demo.jsp用来展示界面
服务端:
DemoAction是Struts中的Action子类负责控制转换,
DemoFacade是业务类负责业务处理。
Goods是一个业务实体类
Struts部分的配置就忽略不说了,实际上这个应用并没有包含Struts的配置
主要讲一下dwr的配置,首先需要在web.xml增加下面的servelt映射:
xml 代码
- <servlet>
- <description>Direct Web Remoter Servlet</description>
- <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>dwr-invoker</servlet-name>
- <url-pattern>/dwr/*</url-pattern>
- </servlet-mapping>
如上uk.ltd.getahead.dwr.DWRServlet是dwr的核心,用来处理javascript的对远程方法的调用,还有其他参数请参考相关文档。
然后,需要在dwr.xml配置相应的远程方法(与具体需要在客户端调用的方法相关),如下为演示应用的配置:
xml 代码
- <dwr>
- <allow>
- <convert converter="bean" match="dwr.demo.Goods"/>
- <create creator="new" javascript="DemoAction" class="dwr.demo.DemoAction">
- <include method="query4dwr"/>
- <include method="copy4dwr"/>
- <include method="paste4dwr"/>
- </create>
- <create creator="new" javascript="DemoFacade" class="dwr.demo.DemoFacade">
- <include method="queryList"/>
- <include method="restore"/>
- <include method="del"/>
- </create>
- </allow>
- </dwr>
如上有一个转换器(converter)是用来映射dwr.demo.Goods为bean类型,其他转换器类型请参考相关文档;还有两个创建器分别创建 javascript中的DemoAction类和DemoFacade类,分别对应dwr.demo.DemoAction类和 dwr.demo.DemoFacade,其中定义的方法就可以从javascript中直接调用了。
最后,我们需要在页面中包含相应的javascript:
<script src="http://www.zhmy.com/dwr/interface/DemoAction.js"></script>
<script src="http://www.zhmy.com/dwr/interface/DemoFacade.js"></script>
<script src="http://www.zhmy.com/dwr/engine.js"></script>
<script src="http://www.zhmy.com/dwr/util.js"></script>
如上,dwr/interface/DemoAction.js和dwr/interface/DemoFacade.js是dwr自动生成的 javascript文件,包含相应的类及方法,dwr/engine.js是dwr的核心引擎脚本处理客户端调用的转换,dwr/util.js包含了工具函数简化页面处理。
下面以查询为例,看一下dwr的具体使用:
DemoAction:
public List query4dwr(int type, boolean needClear, HttpServletRequest request) {
if (needClear) request.getSession().removeAttribute("dwr.demo.goodsId");
return demoFacade.queryList(type);
}
demo.jsp:
function updateResults() {
DWRUtil.removeAllRows("goodsbody");
var type = document.getElementById("type").value;
DemoAction.query4dwr(type, true, fillTable);
}
function fillTable(goods) {
document.forms[0].select.checked = false;
document.getElementById("totalRecords").innerHTML = goods.length;
DWRUtil.addRows("goodsbody", goods, [ addCheckbox, getName, getPrice, getCount]);
}
如上,DemoAction.query4dwr(type, true, fillTable)就可以直接调用DemoAction的方法了,这里fillTable是函数,dwr通过回调函数的方式来进行后续处理。比较一下 javascript和action中的方法参数,HttpServletRequest是可以不传的,dwr会自动加上,另一个就是回调参数放在最后,这是比较好的方式,其他方式请参考文档。
最后看一下,dwr如何与Struts集成,如下代码:
public ActionForward query(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
String type = request.getParameter("type");
//或者从form中取值
List goodsList = query4dwr(Integer.parseInt(type), true, request);
request.setAttribute("goodsList", goodsList);
return mapping.findForward("success");
}
public List query4dwr(int type, boolean needClear, HttpServletRequest request) {
if (needClear) request.getSession().removeAttribute("dwr.demo.goodsId");
return demoFacade.queryList(type);
}
前一个方法是Struts的方式,但dwr不支持,因此要重构一下在下面的方法才可以被dwr调用。
实际上,只有在方法中需要使用到HttpServletRequest是才需要重构方法,如果不使用HttpServletRequest,我们就可以直接调用业务层的类的方法,这样即简单又方便,如下:
demo.jsp:
function restore() {
DemoFacade.restore(updateResults);
}
DemoAction:
public synchronized void restore() {
goodsList.clear();
initGoods();
}
小结
dwr封装了ajax中与服务端交互的模块,通过直接调用服务端类的方法简化了客户端与服务端的交互。虽然说还缺省类似tag这样的组件,但已经很大程度简化了ajax的开发。
资源
dwr主站:http://getahead.ltd.uk/dwr
ajax主站:http://en.wikipedia.org/wiki/AJAX
分享到:
相关推荐
### DWR框架配置学习教程 #### 一、DWR框架简介与配置 DWR(Direct Web Remoting)是一个用于简化Ajax应用开发的框架,它可以让客户端JavaScript代码直接调用服务器端Java方法,从而大大简化了前端与后端的交互...
<bean id="dwr" class="uk.co.edgaroswald.dwr.DWRConfiguration"> <!-- 配置DWR的设置,如安全、白名单等 --> </bean> ``` 4. **创建可调用的Java类** 创建一个Java类,该类的方法将被前端JavaScript调用。...
总的来说,DWR框架通过简化Ajax通信,让开发者可以更专注于业务逻辑,而不是底层的网络通信细节。这个示例将帮助你理解如何配置DWR,使其与Spring协同工作,以及如何处理集合类型的参数和返回值。通过深入学习和实践...
<url-pattern>/dwr/*</url-pattern> </servlet-mapping> ``` 二、配置dwr.xml文件 dwr.xml文件是DWR的核心配置文件,用于定义 remotable对象、转换器和签名信息。 ```xml <dwr> <allow> <!-- 使用new关键字...
<artifactId>dwr</artifactId> <version>3.0.4</version> </dependency> ``` 如果手动添加jar包,则需要下载DWR的相关jar包并将其放置在项目的`WEB-INF/lib`目录下。 ##### 2. 创建并配置`dwr.xml` 接着,在`...
<script type="text/javascript" src="/dwr/interface/UserService.js"></script> <script type="text/javascript"> UserService.getUserInfo(function(userInfo) { // 处理返回的数据 }); </script> ``` ...
<script type='text/javascript' src='/TestDWR1/dwr/interface/TestDWR.js'></script> <script type='text/javascript' src='/TestDWR1/dwr/engine.js'></script> <script type='text/javascript' src='/TestDWR...
### dwr推模式学习资料知识点解析 #### 一、DWR简介及推模式概述 **Direct Web Remoting (DWR)** 是一个简化Ajax应用程序开发的Java框架,它允许客户端JavaScript直接调用服务器端的Java方法,从而使得开发更加...
在DWR框架中,配置文件起着至关重要的作用,它是连接客户端和服务器端的关键桥梁。通常,DWR的配置文件是`dwr.xml`,这个文件位于Web应用的WEB-INF目录下。通过这个文件,我们可以定义哪些Java类和方法可以被远程...
Direct Web Remoting (DWR) 是一种开源的Java框架,用于在Web应用程序中实现JavaScript和服务器端Java对象之间的双向通信。DWR简化了Ajax(Asynchronous JavaScript and XML)的使用,使得开发者可以在不刷新整个...
<bean id="dwrConfig" class="org.directwebremoting.config.DwrConfiguration"> <!-- 配置其他属性 --> </bean> <filter> <filter-name>DWR Filter</filter-name> <filter-class>org.directwebremoting.servlet...
<servlet-name>DWR</servlet-name> <servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/...
- `<convert converter="bean" match="dwr.sample.Apartment"/>`:指定对`dwr.sample.Apartment`类的对象使用Bean转换器。 - `<create>`标签用于创建可由JavaScript访问的Java对象。 - `creator="new"`:表示使用...
**DWR.xml配置文件**是DWR框架的核心配置,它定义了哪些Java类和方法可以被客户端JavaScript访问。以下是一些关键配置元素的解释: 1. **<dwr>`根元素**:这是配置文件的起点,通常包含其他所有配置元素。 2. **`...
<script type="text/javascript" src="/dwr/interface/MyService.js"></script> <script type="text/javascript"> MyService.getHello(function(response) { alert(response); }); </script> ``` ### 6. AJAX...
<url-pattern>/dwr/*</url-pattern> </servlet-mapping> ``` - **`DwrServlet`**: DWR的Servlet负责处理客户端发送过来的请求,并调用后端Java对象的方法。 - **`debug`**: 设置为`true`表示开启调试模式,可以...
3. **集成Spring框架**:DWR支持Spring框架,这意味着可以在JavaScript中直接访问Spring管理的Bean,进一步简化了开发流程。 4. **其他特性**:包括支持多种日志记录组件(如commons-logging)、支持多种选择等。 #...
### dwr学习笔记和总结 #### 一、DWR简介 DWR (Direct Web Remoting) 是一个简化Ajax开发的框架,它使得JavaScript能够直接调用服务器端的Java方法成为可能,无需编写复杂的Ajax代码。这极大地提高了开发效率,并...
例如,通过`<create>`标签,你可以指定使用Spring框架来实例化Java对象,并通过`<param>`标签将Spring中的bean注入到DWR中。 3. **beans.xml配置**:在`beans.xml`中,你需要定义你要远程调用的Java类,将其作为...