这篇文章大部分内容是从其他地方看到的,只是自己添加了些内容。
对于普通的http请求,可以通过拦截器判断session超时,然后跳转到登录页面;但是对于Ajax请求,则不会如期待的那样自动转到登录页面,若想实现,必须特殊处理。
不论是普通http请求还是ajax请求,都可以通过拦截器来将请求捕获,而且区分这两种请求在于头部信息的不同:普通http请求的header参数中没有x-requested-with:XMLHttpRequest头信息,而异步的有。
个人呢认为Ext的Ajax请求分为这么几种,Ext.Ajax类、Ext.data.Connection类、Ext.data.HttpProxy类,其中Ext.Ajax类是对Ext.data.Connection类封装的单一实例,Ext.data.HttpProxy内部引用的还是Ext.Ajax类,所以我们需要为Ext.data.Connection类设置统一的超时处理。
我在Ext.data.Connection的源码中直接为其添加个监听,让它在发生异常时实现跳转
Action中拦截器的处理和原来几乎一样,只是在超时的处理上添加一个分支
对于普通的http请求,可以通过拦截器判断session超时,然后跳转到登录页面;但是对于Ajax请求,则不会如期待的那样自动转到登录页面,若想实现,必须特殊处理。
不论是普通http请求还是ajax请求,都可以通过拦截器来将请求捕获,而且区分这两种请求在于头部信息的不同:普通http请求的header参数中没有x-requested-with:XMLHttpRequest头信息,而异步的有。
个人呢认为Ext的Ajax请求分为这么几种,Ext.Ajax类、Ext.data.Connection类、Ext.data.HttpProxy类,其中Ext.Ajax类是对Ext.data.Connection类封装的单一实例,Ext.data.HttpProxy内部引用的还是Ext.Ajax类,所以我们需要为Ext.data.Connection类设置统一的超时处理。
我在Ext.data.Connection的源码中直接为其添加个监听,让它在发生异常时实现跳转
listeners:{
'requestcomplete':{
fn:function(conn,response,options){
if(response.getResponseHeader.sessionstatus){
window.location.href='error.jsp';
}
}
}
},
Action中拦截器的处理和原来几乎一样,只是在超时的处理上添加一个分支
if (request.getHeader("x-requested-with") != null
&& request.getHeader("x-requested-with").equalsIgnoreCase(//ajax超时处理
"XMLHttpRequest")) {
response.addHeader("sessionstatus", "timeout");
}else{//http超时的处理
}