繁体   English   中英

IllegalStateException用于response.sendRedirect

[英]IllegalStateException for response.sendRedirect

我有一个jsp,它将产生一个表作为其输出。 在输出的每一行中,每个输出记录将有两个下拉列表。 我有两个构建这两个下拉列表的servlet。 我的问题如下。 如果我在jsp中这样做:

response.sendRedirect(deptURL);

return;

response.sendRedirect(locURL);

return;

然后,投诉当然是第一次返回会导致代码“将永远无法到达”。 但是,如果我将其删除,则会留下:

[9/10/14 17:24:39:372 EDT] 00000023 SystemErr     R java.lang.IllegalStateException
[9/10/14 17:24:39:372 EDT] 00000023 SystemErr     R     at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendRedirectWithStatusCode(WebAppDispatcherContext.java:571)

作为我的错误信息。 虽然以上内容是从我的初始代码中淡化的。 问题是一样的。 我的代码的现实是有两个if语句,以及条件是否为真,我将通过response.sendRedirect(url)调用servlet,然后返回。 因此,此组合确实在代码中出现了4次。 对于如果,对于其他。 第二,如果是,则为其他。 但是我总是收到第二个if(或其其他)错误,具体取决于我传递给jsp的参数。 因此,我希望看到一个特定的部门名称作为所选选项,并在其下方看到所有部门名称,与“位置”相同,或者只是看到“选择部门”一词及其下方的所有部门名称,与“位置”相同。

但是第二个response.sendRedirect只是杀死了我。 我认为这些东西需要提交才能返回。 任何帮助表示赞赏。 我在jsp的结尾尝试了一次返回,但是似乎没有发生对第一个servlet的调用。

纳尔逊

如评论中所述,具有2次response.sendRedirect(...)是胡说八道。 通过发出response.sendRedirect(...)您实际上是在向客户端发送响应,如下所示:

HTTP/1.1 302 Found
Location: http://redirectmehere.com

然后,客户端的浏览器会对位置HTTP标头中传递的网址提出新请求。

GET / HTTP/1.1
Host: redirectmehere.com

如果您在单个请求中重定向两次,浏览器将无法选择真正重定向的位置。

但是,您可以制作一个重定向链。 这样redirectmehere.com会将您进一步重定向到redirectmehere-b.com。 因此,您的用户将以redirectmehere-b.com结尾。

我通过这种方式解决了我的问题:

response.sendRedirect(deptURL);
return;

哪个调用了servlet,该servlet构建了下拉列表并将控制权返回给jsp,然后

<script language="JavaScript">
 window.location.replace("<%=locURL%>");
</script>

它调用了另一个servlet,该servlet构建了另一个下拉列表,并将控制权返回给jsp。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM