response.sendRedirect 不起作用
Posted
技术标签:
【中文标题】response.sendRedirect 不起作用【英文标题】:response.sendRedirect is not working 【发布时间】:2012-04-04 11:48:32 【问题描述】:我有两个 jsps。一个是login_first.jsp
,另一个是main.jsp
。在login_first.jsp
提交后,我打电话给main.jsp
。它工作正常。
我在main.jsp
中有注销按钮,它将控制权发送回login_first.jsp
。它执行login_first.jsp
,但页面未加载。
请帮忙。
login_first.jsp
<%@ page session="false" %>
<%
try
HttpSession session = request.getSession(true);
if ("Submit".equals(request.getParameter("SubmitButton")))
session.setAttribute("userLoggedIn", "true");
response.sendRedirect("main.jsp");
return;
else
session.setAttribute("userLoggedIn", "false");
session.invalidate();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body>
<form name="loginForm" method="post">
<table>
<tr>
<td><input type="submit" name="SubmitButton" value="Submit" class=button/></td>
</tr>
</table>
</form>
</body>
<%
catch (Exception e)
e.printStackTrace();
response.sendRedirect("login_first.jsp");
return;
%>
</html>
main.jsp
<%@ page session="false" %>
<%
try
HttpSession session = request.getSession(false);
if (session != null && "true".equals(session.getAttribute("userLoggedIn"))
&& !"Logout".equalsIgnoreCase(request.getParameter("logout")))
// do work
else
if (session != null)
session.setAttribute("userLoggedIn", "false");
response.sendRedirect("login_first.jsp");
return;
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body>
<form name="creditCardForm" target="formresponse" autocomplete="off" method="post">
<table border=0 cellpadding=3 cellspacing=1>
<tr>
<td>
<div align="right">
<input name="logout" type="submit" class=button value="Logout">
</div>
</td>
</tr>
</table>
<iframe name="formresponse" style="visibility:hidden"></iframe>
</form>
</body>
<%
catch (Exception e)
e.printStackTrace();
response.sendRedirect("login_first.jsp");
return;
%>
</html>
【问题讨论】:
你知道scriptlet已经过时了吗? @adarshr 是的,但我正在尝试一项紧急要求。 当然。但是您可以在表单的 action 属性中调用 main.jsp。你为什么要做一个发送重定向去那里? 我在同一个jsp中有一些其他的功能。我无法触摸动作。 【参考方案1】:首先,两个页面都设置了“session=false”,但您正在尝试获取/设置 Session 中的属性。您确定它完全按预期工作吗?
其次,您只能在任何数据发送回客户端之前(在缓冲区刷新之前)调用 response.sendRedirect()。你确定你的情况是这样吗?
【讨论】:
第一个问题:工作正常。对于第二个问题,我想注销。所以不需要发送数据。【参考方案2】:虽然 scriptlet 已经过时,但我认为您应该检查 documentation 以了解您的 JSP 文件所在的位置,以及是否需要在重定向 URL 上使用前导 /
;例如/first_login.jsp
而不是 first_login.jsp
。
【讨论】:
但是相同的 sendRedirect 正在 first_login.jsp 中工作。从 main.jsp 到 login_first.jsp 不工作。 那么我想@maximdim 的答案更有可能。【参考方案3】:我刚刚发现 main.jsp 中的 target="formresponse"
有问题。因此,我已将此注销移至单独的表单并添加了操作。
【讨论】:
如果这是正确的解决方案,请标记您的答案以供他人参考。 当然,但我只能在 2 天后接受我自己的答案。还有 6 个小时。【参考方案4】:但同样的 sendRedirect 正在 first_login.jsp 中工作。从 main.jsp 到 login_first.jsp 不工作。
一个原因可能是您的 main.jsp 位于某个子文件夹中。
【讨论】:
以上是关于response.sendRedirect 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥servlet中的response.sendRedirect()在收到JQuery的post请求后不起作用?
response.sendRedirect 在 Servlet 过滤器中不起作用