`
ronon
  • 浏览: 192263 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

Struts2 在登录拦截器中对ajax请求的处理

 
阅读更多

前言:

由于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中进行引用,即可

  • 大小: 54.1 KB
  • 大小: 51.8 KB
分享到:
评论

相关推荐

    struts2 拦截器 权限 ajax jsp

    在Struts2的配置文件(如struts.xml)中,我们可以定义拦截器链,将多个拦截器串联起来,每个拦截器按照顺序执行。 1. **创建自定义拦截器**:首先,我们需要创建一个实现了`Interceptor`接口的类,重写`intercept...

    struts2ajax项目

    此外,为了更好地展示数据,可能还需要在Struts2中使用Interceptor(拦截器),例如,`params`拦截器用于将请求参数绑定到Action,`validation`拦截器负责验证表单数据,`workflow`拦截器管理Action的生命周期。...

    ajax请求拦截器

    struts2在struts2.xml里配置拦截器可以过滤到指定的url的请求,但是对于ajax的请求确是过滤不了,比如说sesion超时或某些页面有权限控制的,通过ajax的请求时系统会报错最近在解决此类问题时碰上了找了不少资料,...

    Ajax与Struts2异步请求数据

    - **Struts2拦截器**:在`web.xml`中配置`Struts2`过滤器,使所有URL都通过Struts2框架处理。这使得我们可以利用Struts2的特性来处理Ajax请求。 - **Struts2 JSON插件**:为了支持Ajax请求,我们需要引入`struts2-...

    Struts2+Jquery+Ajax

    在Struts2中,Jquery可以与Ajax结合使用,实现页面的无刷新更新。 Ajax(Asynchronous JavaScript and XML)技术允许前端与后台进行异步通信,无需整个页面刷新,提高了用户体验。在Struts2框架下,我们可以使用...

    struts2ajax

    通过在struts.xml配置文件中添加特定的拦截器,可以实现对Ajax请求的统一处理。 6. **错误处理**:在Ajax请求中,正确处理错误情况同样重要。Struts2可以配置全局异常处理,当Action执行出错时,可以返回一个特定的...

    struts2+spring4+mybatis3,登录jquery ajax,struts拦截器,springAOP的例子

    本项目示例涵盖了这些框架的整合使用,以及jQuery AJAX登录、Struts拦截器和Spring AOP(面向切面编程)的应用。 1. **Struts2**:Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它简化了...

    struts2中AJAX实现

    在AJAX场景中,可能需要使用一些特定的拦截器,如`params`拦截器用于参数绑定,`validation`拦截器进行数据验证,或者自定义拦截器处理特定业务逻辑。 6. **响应处理**:当服务器端处理完请求后,会返回一个JSON...

    struts2的ajax异步请求访问

    6. **Struts2拦截器**:在处理Ajax请求时,Struts2的拦截器也扮演着重要角色。例如,`params`拦截器负责解析请求参数,`validation`拦截器进行字段验证,`defaultStack`包含了一系列默认的拦截器,它们可能会影响到...

    ajax请求传值Struts2+jsp

    1. **配置Struts2**:首先确保在`struts.xml`配置文件中添加了AJAX相关的拦截器,如`params`和`defaultStack`,它们允许Struts2接收和处理来自AJAX请求的数据。 2. **创建Action类**:定义一个Struts2 Action类,该...

    struts2+jquery+json+ajax例子

    在Struts2中,可以通过配置Action类的返回类型为"json",使得Action执行后返回JSON对象。JSON数据在Ajax请求和响应中起到关键作用,它可以将登录验证的结果(例如,成功或失败信息、错误消息等)以结构化的方式传递...

    Struts 2及AJAX框架的详细介绍

    6. **错误处理和调试**:如何处理Struts 2中的异常,以及调试技巧和工具。 学习Struts 2和AJAX框架的组合,有助于开发者构建出响应快速、交互性强的Web应用。Struts 2的强大功能和AJAX的动态特性,使得开发者可以更...

    struts2+ajax+jquery

    在Struts2的配置文件(struts.xml)中,我们需要定义一个对应的Action,该Action将处理来自Ajax请求的数据,并返回响应。例如: ```xml <package name="default" namespace="/" extends="struts-default"> ...

    struts2_ajax.rar_struts2 ajax

    在Struts2中,你需要创建一个处理Ajax请求的Action,然后在客户端使用JQuery的`$.ajax`或`$.get`、`$.post`等方法发送请求。服务器端Action处理完业务逻辑后,可以通过JSON或其他格式返回数据,客户端再根据返回的...

    Struts2内置拦截器简介

    Struts2的核心是拦截器(Interceptor)机制,通过一系列可配置的拦截器来处理请求和响应。Struts2提供了丰富的内置拦截器,这些拦截器可以单独使用,也可以组合使用,以满足不同的业务需求。接下来将详细介绍Struts2...

    Struts2+Spring+Hibernate+Ajax框架整合

    例如,Struts2的Action类通常会注入Spring管理的Service,Service再通过Hibernate操作数据库,而Ajax请求则可能直接调用Struts2的Action或通过DWR与服务器交互。这样的设计模式提高了代码的可测试性和可维护性,降低...

    Struts2整合jQuery实现Ajax功能

    同时,Struts2 提供的拦截器、结果类型等机制也能很好地配合 AJAX 请求,处理如权限验证、错误处理等问题。开发者可以根据实际需求选择合适的 AJAX 方法,结合 Struts2 Action 进行灵活的前后端交互。

    使用struts2+JQuery实现的简单的ajax例子

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中...在实际开发中,还可以进一步探索Struts2的拦截器、主题和国际化等功能,以及jQuery的动画效果、事件处理和插件机制,以满足更复杂的业务需求。

    Struts2+Jquery+ajax+Json代码案例

    在Struts2中,开发者可以定义Action类,每个Action对应一个特定的用户请求,处理完成后返回结果到视图层。 **jQuery** 是一个流行的JavaScript库,简化了DOM操作、事件处理、动画和Ajax交互。在本案例中,jQuery...

Global site tag (gtag.js) - Google Analytics