response.sendRedirect не работает

105
7

У меня два 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 width="50%" 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" width="0" height="0" style="visibility:hidden"></iframe>
</form>
</body>
<%
} catch (Exception e) {
e.printStackTrace();
response.sendRedirect("login_first.jsp");
return;
}
%>
</html>

спросил(а) 2012-04-04T14:48:00+04:00 8 лет, 6 месяцев назад
1
Решение
102

Я только что обнаружил, что target="formresponse" в main.jsp дает проблему. Поэтому я переместил этот выход в отдельную форму и добавил действие.

ответил(а) 2012-04-04T16:09:00+04:00 8 лет, 6 месяцев назад
41

Но тот же sendRedirect работает с first_login.jsp. От main.jsp до login_first.jsp не работает.

Одна из причин может заключаться в том, что ваш main.jsp находится в некоторой подпапке.

ответил(а) 2012-04-04T20:51:00+04:00 8 лет, 6 месяцев назад
42

Хотя скриптлеты устарели, я считаю, что вам следует проверить документацию о том, где находятся ваши JSP файлы, и если вам нужно использовать листинг / URL-адреса переадресации; например, /first_login.jsp вместо first_login.jsp.

ответил(а) 2012-04-04T15:21:00+04:00 8 лет, 6 месяцев назад
41

Во-первых, обе страницы имеют "session = false", но вы пытаетесь получить/установить атрибуты в сеансе. Вы уверены, что он работает вообще, как предполагалось?

Во-вторых, вы можете вызвать response.sendRedirect(), прежде чем какие-либо данные будут отправлены обратно клиенту (до сброса буфера). Вы уверены, что это происходит в вашем случае?

ответил(а) 2012-04-04T15:09:00+04:00 8 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема