`
gerrard_ok
  • 浏览: 146902 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DWR异常操作

 
阅读更多

DWR的后台server调用可能会产生Exception,如果不处理,前台的反应就是页面js报错了。这对于用户是很不友好的。
最近这个项目里的DWR异常处理,是参考网友的经验做的。下面简单谈谈:
DWR有很多种异常处理方式,有全局的,有针对某种方法的。

先说全局处理
最简单的如下面,一个方法就搞定了。

当然我在项目中是类似这么处理的:
服务端

 
public class ErrDemo {
    public String getData() {
        Date when = new Date();//FooException extend Exception
        throw new FooException("异常的详细信息", when);
        //FooException 实现getWhen() method
    }
}
 

 

如果不设置FooException的Message,默认是“Error”。
客户端

function eh(msg, ex) {
    alert(msg + ", date=" + ex.when);
    //alertMessagesBox('alert-messages-box',"" + dwr.util.toDescriptiveString(exc, 2),true,msg) ;
}

DWREngine.setErrorHandler(eh);
 

DWR.toDescriptiveString()是DWR util.js的一个函数。
带debug信息的toString,第一个为将要debug的对象,第二个参数为处理等级。等级如下: 

0: Single line of debug 单行调试 
1: Multi-line debug that does not dig into child objects 不分析子元素的多行调试 
2: Multi-line debug that digs into the 2nd layer of child objects 最多分析到第二层子元素的多行调试 


在dwr.xml里面配置
 
<convert match="com.db.exception.FooException" converter="exception"> 
    <param name="include" value="message"/> 
</convert>
 
  

当执行ErrDemo.getData(function(data) { alert("123"); });时,出现alert("异常的详细信息, date=xxxxxxxxxx");

再说说局部处理

 
 Demo.method(params, {
    callback:function(data) { alert("it worked"); },
    errorHandler:function(message) { alert("it broke"); },
    timeout:1000
});
 
 

对某一个function来进行超时\警告\错误处理。

下面列出engine.js中一些常用方法:

DWREngine.setErrorHandler(function)对错误的处理
DWREngine.setWarningHandler(function)对警告的处理
DWREngine.setTimeout() 设置超时的时间 
DWREngine.setAsync(false);设置DWR为同步调用
DWREngine.setAsync(true);设置DWR为异步调用
 

最后说说Session超时的情况
使用DWR,还需要考虑session超时的情况,当session超时了,系统应该友好地提示用户,并跳转到login页面。
网上有大致由两种处理方法,我在项目用了其中一种,如下:
首先在web.xml的dwr配置中(DwrServlet)加入

 

<init-param>
	<param-name>org.directwebremoting.extend.Remoter</param-name>
	<param-value>com.sch.common.DWRSessionService</param-value>
</init-param>

 

 

创建一个DWRSessionService.java

/**
 * @(#)DWRSessionService.java Aug 8, 2011
 */
package com.sch.common;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.extend.Calls;
import org.directwebremoting.extend.Replies;
import org.directwebremoting.impl.DefaultRemoter;
import org.directwebremoting.proxy.dwr.Util;

/**
 * desc: comment 
 * @author Chaisson
 * @since Aug 8, 2011 11:11:30 AM
 * @vision 1.0
 */
public class DWRSessionService extends DefaultRemoter {
	
	Logger logger = Logger.getLogger(this.getClass());

	public Replies execute(Calls calls) {

		HttpServletRequest req = WebContextFactory.get().getHttpServletRequest();
		// check session
		if (req.getSession(false) == null) {
			doLogout();
			return super.execute(new Calls());
		}

		return super.execute(calls);
	}

	private void doLogout() {

		logger.debug("dwr session is timeout");
		WebContext wct = WebContextFactory.get();
		Util utilThis = new Util(wct.getScriptSession());
		utilThis.addScript(new ScriptBuffer("logout()"));

	}

}

 

 

在页面上(当然最好是加在公共的header.jsp里,这样只需要加一处就ok了)

function logout(){
	    alertDialog("Session timeout",SESSION_TIMEOUT_MSG,'alert-messages-box',function(){
	       window.location.href = "<%=request.getContextPath() %>/wms/login.jsp";
	    });
	}

 

这样就大功告成了。

 

 

转自:http://blog.csdn.net/wangchsh2008/article/details/6652809

分享到:
评论

相关推荐

    Dwr入门操作手册及dwr包

    3. **错误处理**:DWR提供了详细的错误处理机制,便于调试和异常处理。 **五、DWR入门操作手册** "Dwr入门操作手册.doc"应该包含了DWR的安装指南、配置教程、基本使用示例以及常见问题解答。通过这份手册,初学者...

    dwr异步操作

    DWR提供了错误处理机制,当服务器端抛出异常或通信出现问题时,可以在JavaScript端捕获并处理。 7. **安全性**:由于DWR允许浏览器直接调用服务器端方法,因此必须谨慎考虑安全问题。可以设置白名单,只允许特定的...

    DWR操作数据库模拟实现Google搜索效果

    在本项目"**DWR操作数据库模拟实现Google搜索效果**"中,我们将探讨如何利用DWR技术来创建一个类似Google搜索的体验。这个项目的核心目标是通过用户在前端输入关键词,实时从后台数据库中检索匹配的信息,并在页面上...

    dwr操作文件上传下载

    在这个场景下,"dwr操作文件上传下载"指的是利用DWR框架来处理文件的上传和下载功能。 1. **DWR简介** DWR的核心功能是提供一种简单的API,使得JavaScript可以与服务器端的Java对象进行交互。它包括了自动处理JSON...

    dwr笔记 dwr自学资料

    2. **JavaScript与Java的桥接**:DWR通过动态生成JavaScript库来映射Java对象和方法,使得JavaScript可以直接调用Java方法,同时处理类型转换和异常处理。 3. **安全机制**:DWR提供了一套安全机制,包括基于IP地址...

    dwr+spring实例

    本实例"DWRSpring实例"是一个使用DWR与Spring框架结合的消息发布系统,包含了基础的CRUD(Create、Read、Update、Delete)操作。通过这个例子,我们可以深入理解DWR和Spring如何协同工作,以及它们在实际开发中的...

    DWR 视频教程 使用DWR开发AJAX For JavaEE

    9. **实战项目**:“[浪曦原创]零散视频三 使用DWR开发AJAX For J2EE(JustCode).wrf”可能是一个实际操作视频,详细演示如何使用DWR构建一个简单的AJAX应用,通过观看可以加深对上述理论知识的理解。 10. **资源...

    extjs_dwr整合例子

    DWR提供了异常处理机制,可以在JavaScript中捕获服务器端抛出的异常。同时,要确保DWR的安全配置,防止跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。 这个"Extjs+Dwr"的压缩包示例可能包含了相关的HTML、JavaScript...

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

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

    DWR3.0 jar包API文档

    - **JavaScript API**:DWR生成的JavaScript库提供了与远程Java对象交互的接口,如`dwr.engine`对象用于基本的调用控制,`DWRUtil`对象则提供了数据绑定和DOM操作的辅助方法。 - **安全配置**:必须正确配置DWR的...

    DWR2.0 中文手册

    2. **API使用**:DWR提供了一系列JavaScript API,如`DWREngine`、`RemoteObject`、`Batch`等,用于调用服务器端的方法、处理异步回调、批量操作等。开发者需要熟悉这些API的用法,以充分利用DWR的能力。 3. **安全...

    DWR2.0 整合Spring2.0

    8. **异常处理**:DWR2.0的异常信息可以通过Spring的统一异常处理机制进行捕获和处理,提供更友好的错误提示,提高用户体验。 整合DWR2.0和Spring2.0的过程通常包括以下几个步骤: 1. 添加DWR和Spring的依赖库到...

    关于dwr的视频

    6. **错误处理**:DWR提供了内置的错误处理机制,当服务器端出现异常时,可以在客户端捕获并显示错误信息。 7. **批量操作**:DWR的Batch API允许一次性发送多个请求,减少网络往返次数,提高性能。 8. **兼容性**...

    dwr实现的无刷新技术 dwr+jsp

    8. **错误处理**:在DWR中,可以捕获和处理服务器端或客户端的异常,提供友好的错误提示。 9. **性能优化**:DWR支持缓存机制,对于重复的请求,可以避免不必要的服务器调用,提高响应速度。 10. **集成其他框架**...

    DWR3.rar

    6. **错误处理**:DWR提供了丰富的错误处理机制,可以捕获并显示服务器端抛出的异常,为调试和问题定位提供帮助。 7. **缓存**:DWR支持缓存策略,可以缓存服务器返回的结果,减少不必要的服务器负载。 8. **可...

    DWR 查询功能测试

    5. **DWR的自动类型转换**:DWR能自动将Java对象转化为JavaScript对象,使得前端可以直接操作服务器返回的数据,无需手动进行JSON解析。 6. **DwrTable组件**:标签中的"DwrTable"可能指的是一种特定的组件或自定义...

    DWR与Jsp内置对象关系

    通过DWR,客户端可以直接操作服务器端的数据,这使得JSP内置对象的数据能在异步请求中得以利用。 2. **控制逻辑**:虽然DWR主要用于前端交互,但它也可以间接影响JSP页面的控制逻辑。例如,通过DWR调用的方法可以...

    dwr和简单的文件上传

    然后,你可以使用Java的文件操作API将数据写入磁盘,或者使用任何你喜欢的文件存储服务(如Amazon S3或Google Cloud Storage)。 ```java public void uploadFile(FileItem file) { // 使用Apache Commons ...

    dwr 各种调用方法

    在JavaScript端,接收到的返回值可以直接用于操作,因为DWR会映射JavaBean的属性到JavaScript对象的属性。 5. **更复杂的调用方式** 除了上述的基本调用方式,DWR还支持异步调用、批量调用、传递数组和集合、异常...

Global site tag (gtag.js) - Google Analytics