用户访问超时
解决两种情况下的用户访问超时。
a)普通http请求的session超时。
b)异步http请求的session超时,使用ext后大部分的界面刷新都是异步的ajax请求。
不管是那种类型的http请求总是可以由一个过滤器来捕捉。
分类:普通http请求的header参数中没有x-requested-with:XMLHttpRequest头信息,而异步的有。
其实对于常见的ajax框架,header中还有标示自己身份的header信息。
对于普通的http请求,发现session超时后直接重定向到一个超时页面,显示访问超时。
对于异步http请求,发现session超时后则向请求的response中写入特定的超时头信息,客户端ajax对象检测
头信息,发现有超时状态标志后调用显示超时信息的javascript方法,提示用户访问超时。
服务器端session超时后在过滤器中为response添加新的头信息,标记该请求超时:
if(httpRequest.getSession().getAttribute("USER") == null){
String ajax = httpRequest.getHeader("x-Requested-with");
if(ajax != null && ajax.equals("XMLHttpRequest")){
httpResponse.setHeader("sessionstatus", "timeout");
} else {
//普通http请求 session超时处理
wrapper.sendRedirect("......");
}
} else {
chain.doFilter(request, response);
}
使用Ext.Ajax对象完成异步请求的交互,Ext.Ajax是单实例对象(非常重要,全局单一Ext.Ajax实例!)。
注册Ext.Ajax的requestcomplete事件,每个ajax请求成功后首先响应该事件。在该事件的回调函数里面判断
访问请求是否超时。使用Ext.Ajax对象的好处是,只需要引入一个包含了几行超时处理代码的js文件,就可以
为当前应用增加超时处理功能,原有代码不需要做任何修改。
使用Ext.Ajax对象完成异步请求交互,每个页面引用:
Ext.Ajax.on('requestcomplete', function(conn,response,options){
if(response.getResponseHeader("sessionstatus")){
window.location = "<c:url value='/'>";
}
});
可以利用的几个特性:
a)所有的ajax请求均带有x-requested-with:XMLHttpRequest头信息
b)Ext.Ajax是单实例对象(非常重要,全局单一Ext.Ajax实例!)
c)注册Ext.Ajax的requestcomplete事件,每个ajax请求成功后首先响应该事件(概念类似spring的aop拦截)。
对于其他的ajax框架,解决用户访问请求超时这个问题的思路是类似的。
分享到:
相关推荐
总结一下,解决Ext异步跳转问题的关键在于正确地使用过滤器和处理异步请求的生命周期。在Java后端,过滤器可以拦截请求,根据需要进行处理,如强制跳转。而在Ext JS前端,我们需要监听请求事件,适时响应过滤器设置...
3. **Ajax请求**:使用`Ext.Ajax.request`方法发起异步请求,该方法支持POST或GET方式提交数据。在`action.js`中,可以配置请求的URL(如`action.html`),数据类型,以及成功或失败的回调函数。 4. **服务器端处理...
56. forward与redirect:forward是服务器内部跳转,redirect是客户端重新请求。 57. JSP动态INCLUDE与静态INCLUDE:动态INCLUDE()会每次都执行,静态INCLUDE()仅在首次编译时执行。 58. 软件开发过程:需求分析、...
- **日期选择器Ext.DatePicker** - 用于选择日期的弹出式控件,内置了许多实用功能,如日期范围选择、快捷键等。 - 通过简单的配置就可以实现复杂的需求。 #### 九、数据与ComboBox - **数据在这里是动词** - ...
- 拖动url——创建ext app - 文件管理,树目录变化后(增删改)自动同步到文件列表 - 文件管理,文件列表变化后(增删改)自动同步到树目录 - 中文用户名限制 - 对话框打开关闭动画 - 其他多处优化 ####fix ...