Ajax的请求在struts2中怎么实现跳转

我前台用的ext,所有请求都是Ajax的请求,然后我后台用的struts,配置了一个全局的权限拦截器。如果未登录就自动跳转到登陆界面。也配置了全局的跳转。
<global-results>
<result name="login" type="redirect">/login.jsp</result>
</global-results>
但是因为是Ajax的请求,所以界面并不跳转。但是都可以在后台输出跳转
2010-05-13 17:05:49,281 DEBUG (org.apache.struts2.dispatcher.ServletRedirectResult:57) - Redirecting to finalLocation /graduation/login.jsp
用firedebug也有跳转到login.jsp的一个get方法。
后来想在拦截器里面直接用后台的代码跳转。
HttpServletRequest req = (HttpServletRequest) ctx.get(StrutsStatics.HTTP_REQUEST);
HttpServletResponse resp = (HttpServletResponse) ctx.get(StrutsStatics.HTTP_RESPONSE);
resp.sendRedirect(req.getContextPath()+"/login.jsp");

或者是 req.getRequestDispatcher("/login.jsp").forward(req, resp);
但是都会在后台报错:严重: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:770)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:505)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
请教高手啦、、、、、

------------------------------------------------------------------------------------------------------------------
问题补充:


andyjackson 写道
既然你是用ajax请求 那么无论他如何跳转都没有用,他会将数据一大堆返回,还不方便ajax请求,你最好是在ajax的onsucess中手动跳转

我是配置的一个登陆验证逻辑,给所有的action都加了一个,如果在Ajax中跳转当然可以,但是我得把每个请求都加个跳转,很麻烦,有好的办法么?

------------------------------------------------------------------------------------------------------------------
问题补充:
我是这样子做的啊、
xiaolongfeixiang 写道
Java代码
后来想在拦截器里面直接用后台的代码跳转。

后来想在拦截器里面直接用后台的代码跳转。

在Interceptor中不能直接resp.sendRedirect(req.getContextPath()+"/login.jsp");

因为下一个Interceptor无法被调用。所以会报错

你可以这样:

Xml代码
<global-results>
<result name="login">/login.jsp</result>
</global-results>

<global-results>
<result name="login">/login.jsp</result>
</global-results>


采纳的答案
2010-05-13 yy629 (资深程序员)
由于你的请求都是采用Ajax的, 所以每次发起ajax请求, 虽然拦截器判断出未登录跳转到登录页面, 那么, 这次ajax请求的结果就是这个页面(具体的说, 这次请求返回的就是登录页面的源代码), 所以浏览器不会发生跳转. 通过在请求完成事件处理函数中判断返回的文本是不是登录页面的源码(比如检查返回值中是否包含<title>用户登录</title>, 这个和登录页面有关了), 如果包含, 则top.location.href='登录页面的url'

--------------------------------------------------------------------------------
提问者对于答案的评价:
谢谢大家的热心解答,Ajax请求确实不能单纯的用拦截器进行跳转,必须得在Ajax请求中设个回调处理,虽然麻烦,但是好像只能这样,偷懒不成啦。参考fireinjava兄台的处理可以。

问题答案可能在这里 → 寻找更多解答
秀一下我们的Runes v10业务平台,欢迎拍砖。
掌控上传进度的AJAX Upload
如何控制访问页面,filter可以吗?
SSH的项目中有没有判断session是否为空的过滤器之类的东西
如何实现struts2拦截器失败 自动跳转

其他回答
既然你是用ajax请求 那么无论他如何跳转都没有用,他会将数据一大堆返回,还不方便ajax请求,你最好是在ajax的onsucess中手动跳转
andyjackson (初级程序员) 2010-05-13
不方便ajax处理
andyjackson (初级程序员) 2010-05-13
Java代码
后来想在拦截器里面直接用后台的代码跳转。

后来想在拦截器里面直接用后台的代码跳转。

在Interceptor中不能直接resp.sendRedirect(req.getContextPath()+"/login.jsp");

因为下一个Interceptor无法被调用。所以会报错

你可以这样:

Xml代码
<global-results>
<result name="login">/login.jsp</result>
</global-results>

<global-results>
<result name="login">/login.jsp</result>
</global-results>


xiaolongfeixiang (资深架构师) 2010-05-13
讲讲解决思路:

1,使用filter过滤器,直接sendRedirect是完全可以的。(就如你下面的代码是完全正确的)

Java代码
HttpServletRequest req = (HttpServletRequest) ctx.get(StrutsStatics.HTTP_REQUEST);
HttpServletResponse resp = (HttpServletResponse) ctx.get(StrutsStatics.HTTP_RESPONSE);
resp.sendRedirect(req.getContextPath()+"/login.jsp");

HttpServletRequest req = (HttpServletRequest) ctx.get(StrutsStatics.HTTP_REQUEST);
HttpServletResponse resp = (HttpServletResponse) ctx.get(StrutsStatics.HTTP_RESPONSE);
resp.sendRedirect(req.getContextPath()+"/login.jsp");

为什么不能使用拦截器和上面同样的代码,这跟拦截器的实现机制有关系的,我们知道在struts中一个重要的机制是AOP编程,拦截器就是用AOP思想来实现的。所以同样的代码在filter中可以使用,而在拦截器中不可使用。
2,使用拦截器实现,但是逻辑稍微有点复杂。
===========================================
大体思路是这样的:在拦截器中设置一个标识(表示是否登录),在login action中获取该标志,根据该标志的值进行跳转。(上面的代码依然可以用)
可以参考这个实现:http://www.blogjava.net/max/archive/2006/12/06/85925.html


Anddy (架构师) 2010-05-13
引用
我是这样子做的啊、


你设置的是 redirect , 改为默认的 dispatcher就好了
xiaolongfeixiang (资深架构师) 2010-05-13
AJAX请求是不可能在服务端完成跳转的,它只能将文本信息传回到客户端。你可以这么做,如果验证失败的话让拦截器将失败信息以一定的json格式写入输出流中,然后在js里为
Ext.ajax添加requestcomplete事件监听,对返的XMLHttpRequest 进行解析,如果responseText属性是验证失败的json串则在客户端通过window.location进行跳转;因为Ext.ajax是个单例对象,所以一个页面只需配置一次即可,多个页面的话你就得每个页面都复制了
chemzqm (资深程序员) 2010-05-13
我弄过
请看:http://fireinjava.iteye.com/blog/483931(同步异步皆可)

你也可以在interceptor里面getRootWin().location="http://....";
MFC+Modbus-Tcp协议实现温湿度传感器采集 本文简单介绍MFC使用-Tcp通信实现系列MODBUSTCP型温湿度传感器采集数据。 阅读详情

相关推荐

维纳(Wiener)复原滤波器的三种推导形式及其在图像处理中的应用

本文深入解析了维纳(Wiener)复原滤波器的三种核心推导形式:卷积形式、矩阵向量形式和频域形式,并重点阐述了其基于线性最小均方误差(LMMSE)估计的核心思想。通过Python实战演示,展示了频域形式如何高效地在图像去模糊与噪声抑制之间取得平衡,是图像复原领域的经典且实用的工具。

net55的博客 578

【叨、校长】Extjs通过Ajax请求后台Struts2返回一个json对象

首先:新建一个java web项目,添加struts2的支持,配置好相关的xml文件:如下 web.xml文件配置:   &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http:/

叨、校长灬 224

SAP 批量处理分包事后调整:BAPI_GOODSMVT_CREATE 关键参数与避坑指南

本文详细解析了SAP系统中使用BAPI_GOODSMVT_CREATE进行分包事后批量调整的关键参数配置与常见错误排查。重点介绍了GOODSMVT_CODE设置为'07'的必要性、GOODSMVT_ITEM结构体的正确配置方法,以及如何避免M7384、M7386等常见错误,帮助用户高效处理分包业务中的数量调整问题。

weixin_29276847的博客 568

利用Struts2发起ajax请求,实现数据交互

韩美针对朝鲜进行“先发制人”、“斩首行动”的联合军演;那边朝鲜刚刚搞完导弹试验,特朗普又新任不久。在局势不明朗的情况下,突然出现了金正男遇刺这样的死亡方式——如果真是如新闻所报那样的话,这种暗杀的方式真是非常“老套”。金正男遇刺身亡是国际舞台的博弈还是朝鲜本土的政治阴谋?这就不得不让我们从Web2.0的随波逐流,Ajax的大放异彩说起,Struts2框架自己整合了对Ajax的原生支持(struts

Hello_Error 9634

光谱数据计算CIE值(三刺激值、CIE1931、CIE1976、CCT)软件

软件界面如下,免安装,拷贝即可使用 导入光谱数据即可计算三刺激值、CIE1931、CIE1976、CCT CIE1931、CIE1976色坐标图形只管显示 导入的光谱数据格式如下,txt文本 波长380到780,间隔1nm 注意:缺省的数据默认写0即可 下面为一些CIE相关介绍: CIE(国际发光照明委员会):原文为Commission Internationale de L’Eclairage(法)或International Commission on Illumination(英)。这个委员会创

业余程序员小徐的博客 2万+

Excel转LaTeX表格神器:excel2latex.xla插件使用全攻略(含下载链接与配置教程)

本文详细介绍了Excel转LaTeX表格神器excel2latex.xla插件的完整使用攻略。从下载安装、基础转换到高级配置,深入讲解了如何利用该插件高效生成LaTeX代码,特别针对IEEE双栏等复杂排版需求提供了专业解决方案,帮助用户彻底告别手动编码,提升学术与专业文档的排版效率。

app77的博客 295

struts2和ajax登录页面跳转,struts2 配置 jquery ajax 调用 action 跳转页面

1,先收集齐jar包 2,配置struts2.xml文件sysmanage/default/MainPage.jsp3,web.xml文件配置Struts Blankstruts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterstruts2/*sysmanage/default/login.jsp4,jav...

weixin_28900463的博客 263

CVAT自动标注避坑指南:从nuctl安装到YOLOv5模型部署的完整流程

本文详细介绍了在CVAT中部署YOLOv5自动标注功能的完整流程与避坑指南。重点解决了从nuctl工具安装、项目创建时因网络问题导致的镜像拉取失败,到最终模型函数部署与CVAT集成的关键步骤。针对国内网络环境,提供了实用的镜像替换方案,帮助用户顺利完成基于CPU的自动化标注环境搭建。

pytorch8learner的博客 229

Struts2的action跳转方法以及对应jsp写法

第一种:action多方法 通配符 * struts.xml中 &lt;action name="User_*" class="action.User" method="{1}"&gt; &lt;result name="success"&gt;/success.jsp&lt;/result&gt; &lt;result name="error"

goodfake 512

从音频录制到智能手表:Sigma-Delta ADC是如何在低功耗场景下‘欺骗’噪声的?

本文深入解析Sigma-Delta ADC在智能穿戴设备中的低功耗高精度实现原理,重点介绍其通过过采样和噪声整形技术‘欺骗’噪声的独特方法。以TWS耳机和医疗级健康监测为例,展示该技术如何在有限功耗预算下实现专业级信号采集,为消费电子设计提供关键解决方案。

weixin_30825581的博客 389

别再瞎猜了!三角形接法PMSM的相电流到底怎么算?实测线电流转换公式与避坑指南

本文深入解析三角形接法永磁同步电机(PMSM)在FOC控制中的相电流计算误区,提供实测线电流转换公式与避坑指南。针对矢量控制系统中常见的√3换算错误,详细阐述正确的电流重构算法、硬件采样要点及软件优化技巧,帮助工程师实现精确控制并避免电机损坏。

weixin_30367873的博客 467

struts2 配置 jquery ajax 调用 action 跳转页面

1,先收集齐jar包

luoyeyeyu的专栏 4096

数据分析:蛋白质组的GO term的富集分析详解

在获取差异表达蛋白质的数据之后,依据蛋白质与基因的对应映射关系,开展GO(Gene Ontology)term的富集分析。通过这一分析流程,能够精准地识别出不同实验组中过表达基因所关联的显著富集的GO term通路。这些富集的GO term通路为后续的生物学研究提供了关键线索,有助于深入探究基因功能、揭示潜在的生物学机制,从而推动生物学发现的进程。

专注生信领域 1368

Struts2 + jQuery 实现完成请求,不做页面跳转的ajax效果

需求要求实现用弹出层发送邮件。提交后层关闭,程序再服务器端响应。   JSON插件提供了一种名为json的ResultType,一旦为某个Action指定了一个类型为json的Result,则该Result无需映射到任何视图资源。因为JSON插件会负责将Action里的状态信息序列化成JSON格式的数据,并将该数据返回给客户端页面的JavaScript 。   简单地说,JSON插件允许我们在Ja...

liuqin_g的博客 156

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java struts2 ajax_java struts2实现ajax调用action实现页面跳转 问题

表单提交可以,不使用ajax想做异步跳转登陆页面,ajax 可以找到action动作 在执行完方法后 return SUCCESS ,struts 不能返回数据回前端。 这个要怎么解决这个问题啊 本人菜鸟一个前端代码:function btnLogin() {$("#btnLogin").click(function() {var username = $("input[name=username...

weixin_39880632的博客 253

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ajax 发送请求 后端重定向后跳转失败

权限拦截很常用,但是遇到了一个问题,使用ajax发送请求时,后端跳转不成功。 struts2 老项目。 后来研究了下,因为ajax是异步请求,所以返回的数据当做了普通的文本进行解析了。, 并没有进行真正的页面跳转。 解决办法就是后端重定向后设置http状态码位非200.比如302 然后前端的ajax设置一个全局的error处理方式 $.ajaxSetUp 可以设置全局的配置项。 ...

业精于勤荒于嬉;行成于思,毁于随。 2105

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Struts2页面跳转的方式

1. 转发2. 重定向&lt;action name="helloAction" class="cn.hd.hello.HelloAction" method="hello"&gt; &lt;!--resul name:对应的是action类中的 method的返回值名字可以 随便写,只要和action类中的返回值结果一样就可以, ...

岚猫的博客 896

使用Struts2和jQuery EasyUI实现简单CRUD系统(二)——ajax与struts2的交互

写博客的时候,我在想,是不是以后也有人来问我我向别人提过的问题。认识了一些人之后,在技术还有其他的一些问题上的疑问,在有经验的人身上得到一些启示。然后将自己的东西写出来之后,又有人来问我,这是一件很奇妙的事情。我曾经受过别人帮助,当别人有求的时候,我也希望能把自己会的说给他人听。继上篇:《使用Struts2和jQuery EasyUI实现简单CRUD系统(一)——从零开始,ajax与Servlet

iaiti的专栏 4474

struts2拦截器判断用户是否为ajax请求

现在的网站,应该绝大多数用jquery作为基础类库了。假设有这样的需求,在用struts2做权限管理的时候,我们可以拦截用户请求的资源,然后判断该用户是否有相应资源的权限。如果没有就返回一个字符串,让其跳转相应的页面,问题来了。如果是ajax请求呢,用户是不会跳转的,虽然用户的操作被拦截,但是用户却不知道。所以我们可以在拦截成功的时候,响应一个字符,但是必须先判断出,用户的当前请求是否ajax请求

zb0567的专栏 2194

Struts2 json请求中拦截session是否合法的情况

前台和后台交互主要有两种方式。 一种是form表单提交,一种是模拟form进行ajax封装json格式提交。form表单提交可以直接设置strsuts2拦截器拦截session中对象进行用户是否登录进行合法性判断,网上大多数都是这样一种方式的教程。 现在要说的是第二种方式,也就是ajax表单请求如何拦截以及如何跳转: form表单html代码如下:

Primary_wind的专栏 1275

ajax struts登录验证码,struts2+jquery实现ajax登陆实例详解

文本仪一个实例讲述了struts2+jquery实现ajax登陆的实现方法,具体步骤如下:一、新建一个web项目,取名test。配置好struts2的环境,并导入Jquery的js文件到该项目。二、在com.action包下,新建一个loginAction.javaloginAction.java的代码如下package com.action;import org.apache.struts2.c...

weixin_33289151的博客 288

Struts2----页面Response已经接收到内容,而页面无法显示

这种情况: 我这里只是想做一个页面跳转而已,然后页面前端已经有响应了,而页面A就是不显示页面页面B贴一下相关代码: 我jsp代码://发送ajax请求给服务器 $.post("aa/aa.action",{"aa" : aa},function(data){ },"json");Java大致相关代码: /** * 转向登录后的主页

Tomorrow 1563

ssh框架怎么写ajax,SSH+Jquery+Ajax框架整合

近期学习了SSH2(Struts2+Spring+Hibernate)的整合后,开始尝试的写一个登陆界面,结果发现:若是单单使用struts2来进行页面跳转的话页面的效果不怎么样,同时也无法进行局部刷新(即异步提交验证)。于是,我开始在网上搜索解决的办法,有些说通过一个隐藏的iframe来达到效果,当我总觉得麻烦和不实用。后来问了下老师,告诉了我使用ajax可以达到想要的效果,我又发现网上有很多例...

weixin_42303955的博客 347

[ExtJS5学习笔记]第三十二节 sencha extjs 5与struts2的ajax交互配置

本文地址:http://blog.youkuaiyun.com/sushengmiyan/article/details/43487751本文作者:sushengmiyan----------------------------------------------------------------------------------------------------------------------...

weixin_30840573的博客 89

struts2中使用ajax so easy!!!

在struts2中使用ajax是非常简单的,并且借助ajax就更加简单了,废话不多说,直接上代码吧: 一般我们在操作删除,修改等操作时,一般需要进行两次操作,一次是具体的操作,另一次是页面的加载,一次一般都是要传入两个action的 //删除试题: 批量删除 function deleteSub(delTagAction,listTagAction){ //得到当前的页码 v...

weixin_30885111的博客 78

页面加载时候就请求action和struts2通配符过滤(未迁入)

一、A页面加载就请求action,可以在A之前定义一个B.jsp 比如login.jsp登陆页面action成功跳转到main.jsp首页可采用下面间接 Login成功后跳转到index.jsp,在index.jsp中写,然后再跳到main.jsp 在使用action通配符时候,要进行过滤器,得在web.xml中加入

ryan1214的专栏 938
上一篇: jsp 验证码错误 循环
下一篇: ajax action 不跳转
master3003
博客等级 码龄18年 22粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值