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

У меня есть два JSP. Один 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>

person Vaandu    schedule 04.04.2012    source источник
comment
Знаете ли вы, что скриптлеты устарели?   -  person adarshr    schedule 04.04.2012
comment
@adarshr да, но я пытаюсь выполнить одно срочное требование.   -  person Vaandu    schedule 04.04.2012
comment
Конечно. Но вы могли бы просто вызвать main.jsp в атрибуте действия формы. Почему вы делаете перенаправление отправки, чтобы перейти туда?   -  person adarshr    schedule 04.04.2012
comment
У меня есть некоторые другие функции в том же jsp. Я не могу коснуться действия.   -  person Vaandu    schedule 04.04.2012


Ответы (4)


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

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

person maximdim    schedule 04.04.2012
comment
На первый вопрос: работает нормально. Что касается второго вопроса, я хочу выйти из системы. поэтому никаких данных отправлять не нужно. - person Vaandu; 04.04.2012

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

person nobeh    schedule 04.04.2012
comment
Но тот же sendRedirect работает из first_login.jsp. С main.jsp на login_first.jsp не работает. - person Vaandu; 04.04.2012
comment
Тогда я полагаю, что ответ от @maximdim более вероятен. - person nobeh; 04.04.2012

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

person Vaandu    schedule 04.04.2012
comment
Если это правильное решение, отметьте свой ответ для справки других. - person nobeh; 05.04.2012
comment
конечно, но я могу принять свой ответ только через 2 дня. еще 6 часов впереди. - person Vaandu; 06.04.2012

Но тот же sendRedirect работает из first_login.jsp. С main.jsp на login_first.jsp не работает.

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

person Vyoma    schedule 04.04.2012