response.sendRedirect的IllegalStateException

时间:2014-09-10 21:44:43

标签: java jsp servlets

我有一个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和for else。对于第二个if和for else。但我总是收到第二个if(或其他)的错误,这取决于我传递给jsp的参数。因此,我希望看到一个特定的部门名称作为选择的选项,并在其下面显示所有部门名称,与位置相同,或者只是单词"选择一个部门"以及它下面的所有部门名称,与位置相同。

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

尼尔森

2 个答案:

答案 0 :(得分:0)

如评论中所述,有2次response.sendRedirect(...)是无稽之谈。 通过发出response.sendRedirect(...),您实际上会向客户发送响应,如下所示:

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

客户端的浏览器然后向位于http http标头中传递的url发出新请求。

GET / HTTP/1.1
Host: redirectmehere.com

如果您在一次请求中重定向2次,浏览器就无法选择真正重定向的位置。

但是你可以建立一个重定向链。因此redirectmehere.com会将您重定向到redirectmehere-b.com。因此,您的用户将以redirectmehere-b.com结束。

答案 1 :(得分:0)

我通过这样做解决了我的问题:

response.sendRedirect(deptURL);
return;

调用构建下拉列表并将控制权返回给jsp然后

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

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