程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> jsp response.sendRedirect不跳轉的原因分析及解決

jsp response.sendRedirect不跳轉的原因分析及解決

編輯:關於JSP

    最近做項目時遇到一個問題,明明加了response.sendRedirect() ,系統也執行了,但是它就是不跳轉;最後在網上找到原因如下:

    首先我們要明白用response.sendRedirect做轉向的原理,它其實是向浏覽器發送一個特殊的Header,然後由浏覽器來做轉向,轉到指定的頁面,所以用sendRedirect時,浏覽器的地址欄上可以看到地址的變化。
    用<jsp:forward page=""/>則不同,它是直接在server做的,浏覽器並不知道,也不和浏覽器打交道,這從浏覽器的地址並不變化可以看出。

    所以使用response.sendRedirect時就需要注意以下兩點:

    1、在使用response.sendRedirect時,前面不能有HTML輸出。

    這 並不是絕對的,不能有HTML輸出其實是指不能有HTML被送到了浏覽器。事實上現在的server都有cache機制,一般在8K(我是說JSP  SERVER),這就意味著,除非你關閉了cache,或者你使用了out.flush()強制刷新,那麼在使用sendRedirect之前,有少量的 HTML輸出也是允許的。
    如果報錯說,“一些信息已經被submitted”(原文忘了),那麼,你就要注意看了,前面是不是有過多的HTML輸出了。

    2、在response.sendRedirect之後,應該緊跟一句return;

    我們已經知道response.sendRedirect是通過浏覽器來做轉向的,所以只有在頁面處理完成後,才會有實際的動作。既然你已經要做轉向了,那麼後的輸出還有什麼意義呢?而且有可能會因為後面的輸出導致轉向失敗。

    <%@ include file="/page/checkLogin.jsp" %>這個放在要驗證的頁面的第一句。

    checkLogin.jsp 內容是通過看session 裡面有沒登陸用戶的內容來判斷是否登錄, 如果沒有,那麼跳轉到登陸頁面:

    復制代碼 代碼如下:
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%
    if (session.getAttribute("userinfo") == null) {

    response.sendRedirect(url);

    return;
    }
    %>  
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved