项目使用Ext作为表现层,由dwr异步调用义务逻辑方法,通过filter过滤请求来实现权限管理,通过检查session中是否有User对象来判断是否为登陆用户。 这样做出现一个问题,当session过期时,异步调用方法无法得到相应的提示。
于是要通过对dwr.engine 进行修改来实现session 过期时有适当的提示信息。要点如下:
1. 在web.xml配置filter,对dwr方法调用路径进行拦截,url-partern(*.dwr);
在filter中编写代码,当session中有User对象时放行,session没有User对象时,执行response.setStatus(1000); 1000使我们自己指定的状态码。
2. 在jsp页面中引入dwr的js文件后执行如下js代码:
dwr.engine._stateChange = function(batch) {
var toEval;
if (batch.completed) {
dwr.engine._debug("Error: _stateChange() with batch.completed");
return;
}
var req = batch.req;
try {
if (req.readyState != 4) return;
}
catch (ex) {
dwr.engine._handleWarning(batch, ex);
// It's broken - clear up and forget this call
dwr.engine._clearUp(batch);
return;
}
try {
var reply = req.responseText;
reply = dwr.engine._replyRewriteHandler(reply);
var status = req.status; // causes Mozilla to except on page moves
if (reply == null || reply == "") {
dwr.engine._handleWarning(batch, { name:"dwr.engine.missingData", message:"No data received from server" });
}
else if (status != 200) {
if ( status == 1000) {
alert("未登录或登录超时,请重新登录");
return;
}
dwr.engine._handleError(batch, { name:"dwr.engine.http." + status, message:req.statusText });
}
else {
var contentType = req.getResponseHeader("Content-Type");
if (!contentType.match(/^text\/plain/) && !contentType.match(/^text\/javascript/)) {
if (contentType.match(/^text\/html/) && typeof batch.textHtmlHandler == "function") {
batch.textHtmlHandler();
}
else {
dwr.engine._handleWarning(batch, { name:"dwr.engine.invalidMimeType", message:"Invalid content type: '" + contentType + "'" });
}
}
else {
// Comet replies might have already partially executed
if (batch.isPoll && batch.map.partialResponse == dwr.engine._partialResponseYes) {
dwr.engine._processCometResponse(reply, batch);
}
else {
if (reply.search("//#DWR") == -1) {
dwr.engine._handleWarning(batch, { name:"dwr.engine.invalidReply", message:"Invalid reply from server" });
}
else {
toEval = reply;
}
}
}
}
}
catch (ex) {
dwr.engine._handleWarning(batch, ex);
}
dwr.engine._callPostHooks(batch);
// Outside of the try/catch so errors propogate normally:
dwr.engine._receivedBatch = batch;
if (toEval != null) toEval = toEval.replace(dwr.engine._scriptTagProtection, "");
dwr.engine._eval(toEval);
dwr.engine._receivedBatch = null;
dwr.engine._clearUp(batch);
};
其中红色的代码是我们添加的,其余为engine.js的源代码,我们状态为我们制定的1000时,弹出提示信息,并且中止执行其他其他操作,不再执行回调函数。
分享到:
相关推荐
然而,在使用 DWR 时,如何取得 Session 中保存的用户信息成为一个需要解决的问题。本文将详细介绍如何在 DWR 中取得 Session 等信息。 方法一:使用 DWR 的 API 在 DWR 中,可以使用 WebContextFactory 工厂类来...
在这个压缩包中,"dwrTest"可能包含了一个DWR框架的实例,帮助开发者了解如何在实际项目中应用DWR,并提供了针对DWR框架常见问题的解决方法。 DWR的主要特点和优势包括: 1. **实时双向通信**:DWR允许服务器端...
在本文中,我们将深入探讨DWR的一些高级方法调用。 1. **调用没有返回值和参数的JAVA方法** 在DWR中,调用一个没有返回值和参数的Java方法非常简单。首先,你需要在`dwr.xml`配置文件中声明你想要暴露的方法,如`...
dwr (Direct Web Remoting) 是一种开源技术,它允许在Web应用程序中实现在客户端JavaScript与服务器端Java之间进行安全的远程方法调用。DWR简化了前后端交互,使得前端可以直接调用后端的Java方法,就像调用本地函数...
### DWR使用方法详解:逐步指南 #### 一、引言 DWR(Direct Web Remoting)是一种简化Ajax开发的框架,它允许在浏览器端直接调用服务器端的方法,如同调用本地对象一样简单。本篇文章将从安装DWR、配置相关文件到...
- `handleError`: 错误处理机制,捕捉并处理在DWR调用中出现的异常。 6. **DWR配置**:DWR的配置文件(通常为`dwr.xml`)用于设置允许的远程方法、安全策略、转换器等,确保应用的安全性和性能。 7. **DWR与...
DWR作为一种强大的工具,简化了AJAX开发,让前端开发者可以直接使用JavaScript调用服务器端的Java方法。通过理解其核心组件、安装配置、创建远程接口、配置DWR以及使用JavaScript API,你就能在自己的项目中有效地...
SpringBoot整合Direct Web Remoting (DWR)是一个常见的技术实践,它允许JavaScript在浏览器端直接调用服务器端的Java方法,极大地增强了Web应用的交互性。在这个过程中,我们通常会结合使用FreeMarker或JSP作为视...
在描述中提到的问题是,当使用DWR调用Hibernate查询方法时,控制台显示了大量的SQL语句,导致性能下降。这通常是由Hibernate的延迟加载机制失效引起的。延迟加载意味着关联的对象或集合只在真正需要时才进行数据库...
dwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwr
4. **使用DWR的`util`对象**:在DWR中,我们可以直接使用`dwr.util`来调用其提供的方法,避免与jQuery的`$`混淆。例如,如果DWR的`dwr.utls`中的某个方法与jQuery中的`$`有冲突,我们可以用`dwr.util.getElementById...
DWR简化了AJAX(Asynchronous JavaScript and XML)应用的开发,使得开发者可以方便地在JavaScript中直接调用Java方法,仿佛它们是本地函数一样。 在"TestDwr"这个压缩包中,我们可以预期包含了一个简单的DWR实例,...
例如,通过DWR调用的方法可以决定是否在session中设置特定的标志,从而影响后续JSP页面的行为。 3. **错误处理**:DWR调用的服务器端方法如果抛出异常,可以捕获并将异常信息返回给客户端,此时可以利用DWR的错误...
DWR使JavaScript可以直接调用服务器端的Java方法,实现页面的异步更新,提供类似Ajax的功能。Spring Boot则是一个用于简化Spring应用程序创建过程的框架,它内置了Tomcat服务器,可以方便地将应用打包为可执行的JAR...
DWR的核心配置文件是`dwr.xml`,该文件定义了DWR允许访问的Java对象、转换规则以及方法签名等关键设置。 ### 1. `dwr.xml` 结构 `dwr.xml`的基本结构如下: ```xml <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//...
对于性能优化,可以考虑启用缓存,控制并发请求的数量,以及合理地组织DWR调用。 7. **调试与日志** DWR提供了丰富的调试和日志功能。通过调整`web.xml`中的`debug`参数,你可以开启或关闭调试模式。日志信息可以...
通过DWR,我们可以使用JavaScript直接调用服务器端的Java方法,实现Ajax(Asynchronous JavaScript and XML)的功能,即在后台与服务器交互数据并局部更新网页。 **Ajax**的核心是利用JavaScript进行异步数据请求,...
- **编写JavaScript代码**:使用DWR提供的API调用服务器端的方法。 3. **DWR实例操作** - **创建JavaBean**:例如创建一个名为`User`的Java类,包含姓名和年龄属性及对应的getter、setter方法。 - **配置dwr.xml...