Dorado7应用中的请求大致可分为两类:普通请求和Ajax类请求。对于这两种请求的异常处理方法存在着相当大的差异,因此以下将分开讨论这两种场景。

普通请求的异常处理

普通请求通常指那些直接访问某个视图的请求,例如那些通过.d结尾的URI直接映射某个.view.xml的请求。除此之外也包括那些装载Dorado7的脚本库、CSS、以及通过/resources/*装载各种资源文件的请求。

Dorado7通过SpringMVC中的SimpleMappingExceptionResolver来处理在这类请求中发生的异常,该类在Dorado缺省的上下文中是这样配置的:

在上面的配置中,Dorado只定义了默认的错误页面,即/dorado/ErrorPage。

如果要自定义此处的异常处理,可以在dorado-home下的servlet-context.xml中添加一个同名的Bean,以此来覆盖Dorado中的缺省配置。例如在下面的配置为某种特定异常定义了专用的错误处理页面。

当然,Dorado7并不局限只能使用SimpleMappingExceptionResolver,如果有需要也完全可以使用SpringMVC中提供的其他异常处理器,例如DefaultHandlerExceptionResolver,具体请查阅Spring的文档。

在ErrorPage的处理逻辑中,通过request.getAttribute("exception")或doradoContext.getAttribute(DoradoContext.REQUEST, "exception")可以获得实际发生的异常。

Ajax类请求的异常处理

在Dorado7的运行过程中动态装载数据、提交数据、执行AjaxAction、执行远程数据校验等动作都会发起Ajax类请求。由于此类请求对于返回数据的格式有着严格的要求,无论Server的逻辑成否都必须确保向Client返回特定格式的数据。因此通常不会使用ErrorPage机制。

要统一的处理Ajax类请求中的异常应利用Dorado7提供的全局拦截器机制,见 定义各种全局拦截器(草稿) (SEUG)。

很容易想象的是我们应该如何在这些拦截器中记录日志、改变传向客户端的异常信息。可是当我们一旦需要实现类似于普通请求中的出错重定向功能时应该怎么做呢?必须一旦业务系统抛出用户未登录或Session超时的异常时,即使在Ajax类请求中发生了这样的错误,开发者也仍然可能希望界面能够自动跳转到登录页面。

为解决这一问题,Dorado7提供了一种特别的异常类com.bstek.dorado.view.resolver.ClientRunnableException。该异常类的作用是向Client端返回一段可执行的JavaScript脚本,当Dorado7的客户端接收到这段脚本后会自动的执行它。

根据Dorado7的AjaxEngine实现的规范,当其接收到content-type为text/runnable的Response时,会自动将Response的内容识别为JavaScript并立即执行它。

不过,由于Dorado7中的Ajax请求支持请求自动合并的功能(一种自动将连续发出的Ajax请求合并为一次HTTP请求的优化功能),在这种合并请求中问题会变得比较复杂。因此,通常我们不建议你不要直接设置Response的content-type或者直接向Response的outputStream中进行输出。而是利用上面提到的ClientRunnableException这类经过包装方法。

由于返回一段可执行的JavaScript会打破AjaxAction等Ajax操作在客户端的正常后续处理,因此Dorado7将此操作视为失败的Ajax调用,在这种情况下AjaxAction的onSuccess事件不会被触发,相反onFailure事件会在执行的JavaScript被真正的执行前触发。

handlerexceptionresolver ajax,Http请求的异常处理(草稿) (SEUG)相关推荐

  1. ajax异步请求及案例

    ajax异步请求及案例 1.ajax的介绍 前端页面想和后端页面进行数据交互就可以使用ajax. 让 javascript 发送异步的 http 请求,与后台服务器通信进行数据的获取,实现局部刷新. ...

  2. js ajax 递归,javascript ajax循环请求/ 长轮询终极解决办法——递归

    ajax循环请求,不能使用for循环,原因如下: 1. 因为ajax是异步执行,在还没有拿到服务器响应内容,就进入下一个for循环中 解决办法:递归currentIndex = 0; function ...

  3. ajax提交相对路径报错,ajax提交请求为啥url要用这个函数encodeURI

    参考如下: 如果你是通过form提交的,那就不需要用这个了.但是如果是你使用url的方式 例如:ajax提交到后台的,就需要对url进行encodeURI编码, 否则,会导致后台出现各种乱码,不加en ...

  4. php 返回字符串给aja,解决ajax异步请求返回的是字符串问题

    1.返回结果差异 js获取后打印res.code无结果.因为返回数据格式不正确. php文件添加header头: header('Content-Type:application/json;'); 或 ...

  5. html弹窗赋值给查询框,bootstrap模态框动态赋值, ajax异步请求数据后给id为queryInfo的模态框赋值并弹出模态框(JS)...

    /查询单个 function query(id) { $.ajax({ url : "/small/productServlet", async : true, type : &q ...

  6. ajax jsonp请求报错not a function的解决方案

    ajax jsonp请求报错not a function的解决方案 参考文章: (1)ajax jsonp请求报错not a function的解决方案 (2)https://www.cnblogs. ...

  7. springmvc请求参数异常处理

    springmvc请求参数异常处理 参考文章: (1)springmvc请求参数异常处理 (2)https://www.cnblogs.com/nosqlcoco/p/5844160.html 备忘一 ...

  8. 取消Ajax请求 || Ajax重复请求问题

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  9. AJAX POST 请求

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  10. Ajax异步请求-简单模版

    1 <script type="text/javascript"> 2 window.onload = function () { 3 document.getElem ...

最新文章

  1. JDBC--Statement,PreparedStatement,CallableStatement的区别
  2. iis 发布MVC HTTP错误 403.14
  3. Ubuntu 11.10中用xen-tools安装虚拟机(UbuntuCentOS)
  4. ajax文字上下滚动,ajax页面底部 滚动加载效果 实例
  5. 关于“做一个聊天+信息分享客户端”的设想(SNS?)
  6. 03 | 高可用保证:Nacos 如何有效构建注册中心集群
  7. boost::json模块实现远程过程调用的测试程序
  8. 公司SAP ERP 项目开始上线切换和最终用户培训了!
  9. 网速慢?不!可能是DNS出了问题! 公共DNS优选之 BAT 百度、腾讯、阿里、谷歌DNS哪个更快?
  10. kali扫描内网ip_Metasploit路由转发实现内网渗透
  11. OAuth 2.1 的进化之路
  12. 推荐一篇关于多租户Multi-Tenant数据架构的文章
  13. Python——使用Flask框架封装接口
  14. vue 如何计算list的长度_航母的水线长度到底如何计算?
  15. ubuntu下非常好用的PDF阅读器
  16. PHP-Smarty
  17. HTML5--2 HTML标签
  18. 抖音快手YY西瓜斗鱼花椒虎牙等直播平台实时录制
  19. Intellij Idea 所有快捷键列表,工欲善其事必先利其器。
  20. 2022京东年货节全民炸年兽玩法攻略

热门文章

  1. 19.Virtual Type
  2. 2. 配置Xdebug
  3. 计算机动画原理课程设计,Flash动画优化的原理和常用优化方式,毕业论文,课程设计,PPT,开发报告,外文翻译 - 论文助手...
  4. 一个奇怪的发现:html与body,body的margin对html不起作用,html的padding对body却起作用
  5. 第七届蓝桥杯省赛--四平方和
  6. eslint配置文件解析
  7. MFC绘制图片闪烁详解
  8. hdu 1978 How many ways(dp)
  9. PHP基础教程-54课-问题
  10. Oracle Library cache 内部机制 说明