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 过滤器中不起作用

无法使用 response.sendRedirect 重定向

response.sendRedirect() 有啥用?

提交响应后无法调用 sendRedirect() [重复]

我遇到的response.sendRedirect跳转不了问题