`
mymail
  • 浏览: 17362 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

dwr方法调用session过期问题的解决方法

    博客分类:
  • java
阅读更多

项目使用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等信息.doc

    然而,在使用 DWR 时,如何取得 Session 中保存的用户信息成为一个需要解决的问题。本文将详细介绍如何在 DWR 中取得 Session 等信息。 方法一:使用 DWR 的 API 在 DWR 中,可以使用 WebContextFactory 工厂类来...

    DWR框架实例及常见问题解决办法,免费放送

    在这个压缩包中,"dwrTest"可能包含了一个DWR框架的实例,帮助开发者了解如何在实际项目中应用DWR,并提供了针对DWR框架常见问题的解决方法。 DWR的主要特点和优势包括: 1. **实时双向通信**:DWR允许服务器端...

    高级dwr方法调用少用的

    在本文中,我们将深入探讨DWR的一些高级方法调用。 1. **调用没有返回值和参数的JAVA方法** 在DWR中,调用一个没有返回值和参数的Java方法非常简单。首先,你需要在`dwr.xml`配置文件中声明你想要暴露的方法,如`...

    dwr 各种调用方法

    dwr (Direct Web Remoting) 是一种开源技术,它允许在Web应用程序中实现在客户端JavaScript与服务器端Java之间进行安全的远程方法调用。DWR简化了前后端交互,使得前端可以直接调用后端的Java方法,就像调用本地函数...

    DWR使用方法-step by step

    ### DWR使用方法详解:逐步指南 #### 一、引言 DWR(Direct Web Remoting)是一种简化Ajax开发的框架,它允许在浏览器端直接调用服务器端的方法,如同调用本地对象一样简单。本篇文章将从安装DWR、配置相关文件到...

    dwr.jar dwrUtil常见方法 dwr详细资料

    - `handleError`: 错误处理机制,捕捉并处理在DWR调用中出现的异常。 6. **DWR配置**:DWR的配置文件(通常为`dwr.xml`)用于设置允许的远程方法、安全策略、转换器等,确保应用的安全性和性能。 7. **DWR与...

    DWR的使用方法

    DWR作为一种强大的工具,简化了AJAX开发,让前端开发者可以直接使用JavaScript调用服务器端的Java方法。通过理解其核心组件、安装配置、创建远程接口、配置DWR以及使用JavaScript API,你就能在自己的项目中有效地...

    springboot整合dwr实现js调用java方法

    SpringBoot整合Direct Web Remoting (DWR)是一个常见的技术实践,它允许JavaScript在浏览器端直接调用服务器端的Java方法,极大地增强了Web应用的交互性。在这个过程中,我们通常会结合使用FreeMarker或JSP作为视...

    Dwr+Hibernate的Lazy问题

    在描述中提到的问题是,当使用DWR调用Hibernate查询方法时,控制台显示了大量的SQL语句,导致性能下降。这通常是由Hibernate的延迟加载机制失效引起的。延迟加载意味着关联的对象或集合只在真正需要时才进行数据库...

    dwr dwrdwr

    dwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwr

    jquery和dwr.utls冲突解决

    4. **使用DWR的`util`对象**:在DWR中,我们可以直接使用`dwr.util`来调用其提供的方法,避免与jQuery的`$`混淆。例如,如果DWR的`dwr.utls`中的某个方法与jQuery中的`$`有冲突,我们可以用`dwr.util.getElementById...

    dwr实例,JavaScript调用java方法的小例子

    DWR简化了AJAX(Asynchronous JavaScript and XML)应用的开发,使得开发者可以方便地在JavaScript中直接调用Java方法,仿佛它们是本地函数一样。 在"TestDwr"这个压缩包中,我们可以预期包含了一个简单的DWR实例,...

    DWR与Jsp内置对象关系

    例如,通过DWR调用的方法可以决定是否在session中设置特定的标志,从而影响后续JSP页面的行为。 3. **错误处理**:DWR调用的服务器端方法如果抛出异常,可以捕获并将异常信息返回给客户端,此时可以利用DWR的错误...

    DWR3.0.2-RELEASE修改版源码(解决资源加载问题导致的和SpringBoot整合后SpringBoot项目无法以独立JAR运行)

    DWR使JavaScript可以直接调用服务器端的Java方法,实现页面的异步更新,提供类似Ajax的功能。Spring Boot则是一个用于简化Spring应用程序创建过程的框架,它内置了Tomcat服务器,可以方便地将应用打包为可执行的JAR...

    DWR配置文件详解,DWR配置

    DWR的核心配置文件是`dwr.xml`,该文件定义了DWR允许访问的Java对象、转换规则以及方法签名等关键设置。 ### 1. `dwr.xml` 结构 `dwr.xml`的基本结构如下: ```xml <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//...

    DWR快速配置入门 DWR快速配置入门.

    对于性能优化,可以考虑启用缓存,控制并发请求的数量,以及合理地组织DWR调用。 7. **调试与日志** DWR提供了丰富的调试和日志功能。通过调整`web.xml`中的`debug`参数,你可以开启或关闭调试模式。日志信息可以...

    dwr实现ajax功能ajax+dwr

    通过DWR,我们可以使用JavaScript直接调用服务器端的Java方法,实现Ajax(Asynchronous JavaScript and XML)的功能,即在后台与服务器交互数据并局部更新网页。 **Ajax**的核心是利用JavaScript进行异步数据请求,...

    dwr实例操作+rmi实例操作

    - **编写JavaScript代码**:使用DWR提供的API调用服务器端的方法。 3. **DWR实例操作** - **创建JavaBean**:例如创建一个名为`User`的Java类,包含姓名和年龄属性及对应的getter、setter方法。 - **配置dwr.xml...

Global site tag (gtag.js) - Google Analytics