`

EXT 开发的项目 struts 拦截器问题

    博客分类:
  • J2EE
阅读更多
关于配置项目中应用ExtJs开发的拦截器,针对session过期后,点击任何操作都让页面跳转到登录界面。



编写好一个拦截器,先按常规配置好(那些配置拦截器的细节就不用说了吧,不会的请看下关于struts2的拦截器定义及其在struts.xml文件中的配置)。

先在拦截器里面判断session中是否存在’用户信息’,如果不存在则跳转到登录界面:

public String intercept(ActionInvocation arg0) throws Exception {

       HttpSession session = ServletActionContext.getRequest().getSession();

       if(session.getAttribute("user") == null){       

           log.info("用户没登录或登录过期,不能访问");           

           return "relogin";

       }else{

           log.info("用户已经登录,继续访问");

       }     

       return arg0.invoke();

    }

 

下面就开始对Ext部分进行拦截了,因为Ext中提交的方法最终都是属于Ajax异步提交,普通拦截器不做特殊处理,所以就还得在上面的代码里面做处理,如下所示:

public String intercept(ActionInvocation arg0) throws Exception {

       HttpSession session = ServletActionContext.getRequest().getSession();

       HttpServletResponse response = ServletActionContext.getResponse();

       HttpServletRequest request = ServletActionContext.getRequest();

       PrintWriter pw = response.getWriter();

       if(session.getAttribute("user") == null){       

           String flag = "";

           if(request.getHeader("X-Requested-With") != null && request.getHeader("X-Requested-With").equalsIgnoreCase("XMLHttpRequest")){

                  log.info("用户没登录或登录过期,不能访问");            response.setCharacterEncoding("text/html;charset=utf-8");

              response.setContentType("text/html;charset=utf-8");

              flag = "9999";

              pw.write(flag);

              return null;

           }else{

              log.info("用户没登录或登录过期,不能访问");

              return "relogin";

           }

       }else{

           log.info("用户已经登录,继续访问");

       }

       return arg0.invoke();

    }

解释一下 上面的if判断:

    if(request.getHeader("X-Requested-With") != null && request.getHeader("X-Requested-With").equalsIgnoreCase("XMLHttpRequest"))

该判断就是针对Ext提交进行判断的,其中我设置了一个flag,该标志就是Ajax请求后回调方法中的内容;只有是Ext的Ajax请求时,那么才会输出这个标志。

最后在jsp页面上加上下面的js代码,当然,直接加在写Ext的js文件头部也行。

Ext.Ajax.on('requestcomplete',checkUserSessionStatus, this);  

function checkUserSessionStatus(conn,response,options){

    var str = response.responseText;

    if(str == '9999'){

       alert('连接已超时,请重新登录!');

       window.parent.location = 'index.jsp';

    }

}

上面这段js的意思就是,注册Ajax的requestcomplete方法;

用过Ajax的人都会知道,Ajax提交之后有几个方法,个success,failure,还有一个就是complete ,complete的执行是这样的,不管该Ajax请求成功与否,到最后都是执行complete方法,所以我们可以在complete方法里面做些扫尾工作;

那上面的requestcomplete是Ext中的Ajax请求的complete方法,不管Ext中的Ajax请求是否正确执行与否,它都会执行,所以我们就可以用该方法做文章,然后通过

var str = response.responseText;拿到在拦截器中的那个flag标识,判断是否存在自己设定的那个特定值,如果存在就进行跳转,

window.parent.location = 'index.jsp'; 我这里采用这句是因为我这个系统界面才用了frame框架,得先找到父框架然后才将index.jsp页面进行location;

这里基本上就完成了拦截器对Ext进行拦截跳转了;

更好的方法当然有,只是我没找到,最后通过这样的尝试,发现能成功拦截,也能算是可行,就将就着用了。

最后在说一点:有很多采用了frame框架的,进行登录界面跳转后,登录界面却出现在main框架中,而原先的top,和menu 还是在界面上显示,这个时候怎么办呢,解决办法还是有的,那就是在登录界面,如我上面是index.jsp,加个js方法,

function init(){

    if (top.location != self.location){  

       top.location=self.location;  

    }

}

然后在index.jsp 的body的onload设置该js方法就OK了

<body  onload="init()">

这样跳转后,整个界面就会是完完整整的’登录界面’了.



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Zsyzk/archive/2010/07/15/5737214.aspx
分享到:
评论

相关推荐

    Ext+struts+ibatis 完整项目

    Struts可以通过拦截器或者自定义Action支持JSON响应,方便ExtJS前端组件进行渲染和操作。 总的来说,"Ext+struts+ibatis 完整项目"是一个全面展示Java Web开发流程的实例,涵盖了前端、后端以及数据库操作的各个...

    struts与ext集成

    Struts2和EXT的集成是Java Web开发中的一个重要主题,特别是在构建用户界面时追求美观、交互性强的应用。这篇教程将深入探讨如何将这两者结合,为开发者提供一个更高效的开发环境。 **Struts2框架** Struts2是...

    ext+struts2的学生信息管理系统

    STRUTS2通过拦截器和配置文件实现了灵活的请求处理,支持多种视图技术,与EXT的集成尤为顺畅,能为前端提供强大的数据展示和交互支持。 学生信息管理系统是一个典型的业务管理系统,其主要功能包括班级管理、学生...

    ext整合struts2

    2. **Interceptor(拦截器)**:拦截器是Struts2的核心特性之一,它们是处理请求和响应之间的一个个中间层,可以实现如日志、权限检查等功能。 3. **配置文件**:通常为struts.xml,用来配置Action、结果类型、拦截...

    搭建EXTJS和STRUTS2框架(ext和struts2简单实例)

    - `&lt;filter&gt;`和`&lt;filter-mapping&gt;`:定义了STRUTS2的过滤器,用于拦截所有的`.ph`和`.jsp`请求。 - `&lt;jsp-config&gt;`:定义了STRUTS2的标签库位置。 - `&lt;welcome-file-list&gt;`:定义了默认打开的欢迎页面。 #### 三...

    Ext Desktop+struts2 实例

    Struts2 提供了安全相关的拦截器,可以帮助开发者保护应用。同时,为了优化性能,可能需要对 Struts2 的配置进行调整,如减少不必要的视图渲染,或使用缓存策略。 通过结合 Ext JS 的桌面应用和 Struts2 的后端控制...

    ext3+struts2+hibernate+spring的CRUD+分页

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它简化了控制器层的开发,提供了一系列的拦截器和插件来处理用户请求,进行业务逻辑验证和结果转发。在CRUD操作中,Struts2可以很好地协调...

    ext struts2 swfupload 跨域文件上传

    在Struts2中,可以通过配置Action或全局拦截器来开启CORS支持。 在EXTJS和SwfUpload结合的文件上传实现中,用户在前端选择文件后,SwfUpload会使用Flash技术将文件数据封装成POST请求发送到服务器。EXTJS则负责展示...

    Ext 存储过程 struts

    XML在Struts中主要用来配置应用程序的行为,比如定义Action的映射、拦截器、结果类型等。在EXTJS中,XML可以作为数据源,EXTJS的Store组件可以解析XML数据并加载到组件中。同时,XML也可以用来配置存储过程的调用,...

    struts2与Ext4.0的json交互

    同时,还可以使用Struts2的拦截器(interceptors)来处理权限控制、日志记录等通用逻辑。 关于压缩包文件“teststruts3”,虽然名字中包含“struts3”,但这里讨论的是Struts2与Ext4.0的交互。文件名可能是误写,...

    Ext_struts2

    5. 错误处理和验证:利用Struts2的拦截器实现全局错误处理和数据验证,将错误信息反馈给Ext JS的界面组件。 总的来说,Ext_struts2结合了Struts2的高效后端控制和Ext JS的强大前端展现,为开发者提供了一种构建现代...

    EXT+STRUTS2 经典例子

    3. **Struts2 拦截器**:Struts2 的拦截器允许在 ACTION 执行前后插入自定义逻辑,例如验证请求参数、记录日志等。在与 EXT 配合时,可能有专门的 JSON 拦截器来处理 JSON 格式的请求和响应。 4. **ACTION 类设计**...

    Ext+Struts2的学生成绩管理系统

    这通常涉及到复杂的计算逻辑,可能需要用到Struts2的拦截器来处理,而数据显示则可能利用Ext的图表组件。 5. **权限管理**:根据角色(如教师、管理员)设定不同的操作权限。Struts2的拦截器机制可以实现这一点,...

    ext + struts2 例子

    4. 文件上传:EXT也提供了文件上传组件,通常与后端服务(如Struts2的FileUpload拦截器)配合使用,实现用户友好的文件上传功能。在EXT中,可以自定义上传按钮样式,同时处理上传进度和错误反馈。 5. Struts2:...

    ext2.0+struts2.1+spring2.0+jdbc框架

    Struts2.1版本引入了许多改进,包括更强大的拦截器(Interceptor)机制,提供更好的异常处理,以及增强的插件支持。它简化了视图和控制器的分离,提高了代码的可维护性和可测试性。 3. **Spring2.0**: Spring是一...

    Ext + Gwt + Struts2.0开发1

    Struts2提供了一系列的拦截器、结果类型和插件机制,以支持动作处理、验证、国际化等功能,增强了应用的可维护性和可扩展性。 在整合这三种技术时,通常会利用GWT的强大客户端能力,通过Ext提供更丰富的用户界面,...

    SSI+EXT (Struts2+Spring+Ibatis+Ext)

    Struts2还支持拦截器,允许自定义拦截规则,实现如权限控制、日志记录等功能。 **2. Spring** Spring是Java企业级应用的核心框架,提供了一系列丰富的功能,包括依赖注入(DI)、面向切面编程(AOP)、事务管理等。...

    EXT-desktop+struts2

    Struts2 提供了一种基于拦截器的 MVC 模式,使得业务逻辑与视图、控制器解耦,增强了可扩展性和灵活性。关键组件包括: - **Action**:负责处理用户请求,执行业务逻辑。 - **Interceptor**:拦截器是 Struts2 的...

    Ext+Struts2多文件上传

    在文件上传场景中,Struts2提供了Action类和拦截器来接收并处理文件。 实现多文件上传的关键步骤如下: 1. **前端准备**:在ExtJS中,使用`Ext.form.FileField`或`Ext.form.Basic`来创建一个文件选择输入框。用户...

    Ext2.0+struts2+spring2.5+ibatis2

    它整合了多种拦截器(Interceptor)和结果类型(Result),实现了模型、视图和控制器之间的解耦。Struts2还支持多种视图技术,包括JSP、FreeMarker和Velocity等,为开发者提供了极大的灵活性。 **Spring2.5** 是...

Global site tag (gtag.js) - Google Analytics