前言:
由于ajax请求不像http请求,可以直接进行页面跳转,你返回的所有东西,ajax都只会识别为一个字符串。
之前尝试的方法是在拦截器中返回一个标识给ajax,然后再在每一个ajax请求成功之后根据标识“isNotLogin”进行页面的跳转,但是这样也很麻烦,每一个ajax请求之后,都需要写一句if(returnStr=="isNotLogin"){ window.location.href="xxxxxx" }
查了资料,试了一下ajaxSetup方法,可以给所有的ajax请求设置初始化,个人觉得就类似一个ajax拦截器吧,虽然也需要在每一个需要使用的jsp中进行引用,不过已经方便很多了,减少了重复代码
1.struts.xml
之前贴过,就不再贴了
2.Interception的doIntercept方法中的关键代码
//ajax请求的处理 if (request.getHeader("X-Requested-With") != null && request.getHeader("X-Requested-With").equalsIgnoreCase("XMLHttpRequest")) { PrintWriter out = response.getWriter(); out.print("isNotLogin");//返回一个标识给前端 out.flush(); out.close(); return null; } //http请求的处理 else { //直接跳转到登录页面 return "login"; }
3.写一个单独的js文件,使用jQuery.ajaxSetup() 方法设置全局 AJAX 默认选项,捕获刚刚在拦截器里传递的值
$.ajaxSetup({ cache: false, //关闭ajax缓存 contentType:"application/x-www-form-urlencoded;charset=utf-8", //complete:表示完成请求后触发。即在success或error触发后触发。也有success: 和 error: 等参数,根据需要来 complete:function(XHR,textStatus){ var resText = XHR.responseText; /*根据拦截器传递的标识,进行相关操作*/ //isNotLogin标识用户当前未登录,需要将页面转到登录页面 if(resText=='isNotLogin'){ window.location=basePath+"/web/tologin.html"; } //isCookieLogin标识当前用户可使用cookie信息进行自动登录 else if(resText=='isCookieLogin'){ } } });
20150708补充
由于$.ajaxSetup级别太高,考虑到只是在请求成功后执行此操作,使用ajaxSuccess更符合需要。
!!!一定要注意ajaxSuccess的执行时机-->
ajaxSuccess只会在
success: function(data) {
……
}
success后的函数内容全部执行完毕后才会触发。
因此假如本来某个ajax请求的预期返回结果是一个json字符串,但是,如果该请求被拦截器拦截掉了,
且拦截器返回了一个"isNotLogin",很明显不是json格式,那么很有可能后面的js就会出错,js出错就会导致程序中断。这种情况目前还没找到一劳永逸的解决办法,能想到的是可以在前台得到返回值之后进行数据格式的判断或者写try-catch,我使用的是第二种,这样子如果js出错了程序还能继续走,走到ajaxSuccess,相应的页面跳转才能成功完成。
公共的js登录拦截器代码如下:
//当页面中所有ajax请求成功时执行下面的代码 $(document).ajaxSuccess(function (event,xhr,settings){ /* event:触发的事件对象 xhr:XMLHttpRequest对象 settings:可以获取当前ajax请求中的参数, 例如setting.url表示请求的url地址, 可以以此来过滤指定的ajax请求 */ //alert("ajaxSuccess:"+settings.url); var resText = xhr.responseText; /*根据拦截器传递的标识,进行相关操作 */ //isNotLogin标识用户当前未登录,需要将页面转到登录页面 if(resText=="isNotLogin"){ window.location=basePath+"/web/register_toLogin.html"; } //isCookieLogin标识当前用户可使用cookie信息进行自动登录 else if(resText=="isCookieLogin"){ } });
顺便贴一下几个全局 Ajax 事件处理器的执行顺序:
关于ajax请求的详细说明的链接:
http://www.cnblogs.com/heyuquan/archive/2013/05/13/js-jquery-ajax.html
4.将上面的js文件在每一个需要判断是否登录的jsp中进行引用,即可
相关推荐
在Struts2的配置文件(如struts.xml)中,我们可以定义拦截器链,将多个拦截器串联起来,每个拦截器按照顺序执行。 1. **创建自定义拦截器**:首先,我们需要创建一个实现了`Interceptor`接口的类,重写`intercept...
此外,为了更好地展示数据,可能还需要在Struts2中使用Interceptor(拦截器),例如,`params`拦截器用于将请求参数绑定到Action,`validation`拦截器负责验证表单数据,`workflow`拦截器管理Action的生命周期。...
struts2在struts2.xml里配置拦截器可以过滤到指定的url的请求,但是对于ajax的请求确是过滤不了,比如说sesion超时或某些页面有权限控制的,通过ajax的请求时系统会报错最近在解决此类问题时碰上了找了不少资料,...
- **Struts2拦截器**:在`web.xml`中配置`Struts2`过滤器,使所有URL都通过Struts2框架处理。这使得我们可以利用Struts2的特性来处理Ajax请求。 - **Struts2 JSON插件**:为了支持Ajax请求,我们需要引入`struts2-...
在Struts2中,Jquery可以与Ajax结合使用,实现页面的无刷新更新。 Ajax(Asynchronous JavaScript and XML)技术允许前端与后台进行异步通信,无需整个页面刷新,提高了用户体验。在Struts2框架下,我们可以使用...
通过在struts.xml配置文件中添加特定的拦截器,可以实现对Ajax请求的统一处理。 6. **错误处理**:在Ajax请求中,正确处理错误情况同样重要。Struts2可以配置全局异常处理,当Action执行出错时,可以返回一个特定的...
本项目示例涵盖了这些框架的整合使用,以及jQuery AJAX登录、Struts拦截器和Spring AOP(面向切面编程)的应用。 1. **Struts2**:Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它简化了...
在AJAX场景中,可能需要使用一些特定的拦截器,如`params`拦截器用于参数绑定,`validation`拦截器进行数据验证,或者自定义拦截器处理特定业务逻辑。 6. **响应处理**:当服务器端处理完请求后,会返回一个JSON...
6. **Struts2拦截器**:在处理Ajax请求时,Struts2的拦截器也扮演着重要角色。例如,`params`拦截器负责解析请求参数,`validation`拦截器进行字段验证,`defaultStack`包含了一系列默认的拦截器,它们可能会影响到...
1. **配置Struts2**:首先确保在`struts.xml`配置文件中添加了AJAX相关的拦截器,如`params`和`defaultStack`,它们允许Struts2接收和处理来自AJAX请求的数据。 2. **创建Action类**:定义一个Struts2 Action类,该...
在Struts2中,可以通过配置Action类的返回类型为"json",使得Action执行后返回JSON对象。JSON数据在Ajax请求和响应中起到关键作用,它可以将登录验证的结果(例如,成功或失败信息、错误消息等)以结构化的方式传递...
6. **错误处理和调试**:如何处理Struts 2中的异常,以及调试技巧和工具。 学习Struts 2和AJAX框架的组合,有助于开发者构建出响应快速、交互性强的Web应用。Struts 2的强大功能和AJAX的动态特性,使得开发者可以更...
在Struts2的配置文件(struts.xml)中,我们需要定义一个对应的Action,该Action将处理来自Ajax请求的数据,并返回响应。例如: ```xml <package name="default" namespace="/" extends="struts-default"> ...
在Struts2中,你需要创建一个处理Ajax请求的Action,然后在客户端使用JQuery的`$.ajax`或`$.get`、`$.post`等方法发送请求。服务器端Action处理完业务逻辑后,可以通过JSON或其他格式返回数据,客户端再根据返回的...
Struts2的核心是拦截器(Interceptor)机制,通过一系列可配置的拦截器来处理请求和响应。Struts2提供了丰富的内置拦截器,这些拦截器可以单独使用,也可以组合使用,以满足不同的业务需求。接下来将详细介绍Struts2...
例如,Struts2的Action类通常会注入Spring管理的Service,Service再通过Hibernate操作数据库,而Ajax请求则可能直接调用Struts2的Action或通过DWR与服务器交互。这样的设计模式提高了代码的可测试性和可维护性,降低...
同时,Struts2 提供的拦截器、结果类型等机制也能很好地配合 AJAX 请求,处理如权限验证、错误处理等问题。开发者可以根据实际需求选择合适的 AJAX 方法,结合 Struts2 Action 进行灵活的前后端交互。
Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中...在实际开发中,还可以进一步探索Struts2的拦截器、主题和国际化等功能,以及jQuery的动画效果、事件处理和插件机制,以满足更复杂的业务需求。
在Struts2中,开发者可以定义Action类,每个Action对应一个特定的用户请求,处理完成后返回结果到视图层。 **jQuery** 是一个流行的JavaScript库,简化了DOM操作、事件处理、动画和Ajax交互。在本案例中,jQuery...