我有一个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的调用似乎都没有发生。
尼尔森
答案 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。