頁面調轉有如下幾種方式1 RequestDispatcher.forward()2 response.sendRedirect()
3 <jsp:forward page="" /> 4 修改HTTP header的Location屬性來重新導向5 pageContext.forward() 我把檢驗使用者是否登入的代碼寫在一個JSP檔案中代碼如下logincheck.jsp<% if (session.getAttribute("flag") == null
|| !"ok".equals(session.getAttribute("flag"))) { //1 跳轉方式1
response.sendRedirect("login.jsp");
return; //2跳轉方式2
//pageContext.forward("login.jsp");
}%>
//success.jsp
<%@ page contentType="text/html;charset=Shift_JIS" session="true"
isErrorPage="false" errorPage="err.jsp" %>
//a 包含方法a
<!-- jsp:include page="logincheck.jsp" flush="true"/---->
//b 包含方法b
<%@ include file="logincheck.jsp"%>
<html>
<head>
<title>Success.jsp</title>
</head>
<body>
This is my JSP page. Success! <br>
Welcome
<%
out.print("SCHOOL : "+request.getAttribute("school")+"<br>");
out.print("AGE : "+session.getAttribute("age")+"<br>");
out.print("CITY : "+application.getAttribute("city")+"<br>");
%>
</body>
<A href="logout.jsp">ログ アウト</A>
</html>
我將檔案的包含方式和檔案的調轉方式作了組合測試。
結果如下
--------------------------------------------------
包含方法 | 跳轉方法 | 結果
-------------------------------------------------
a | 1 | 注1
------------------------------------------------
b | 1 | ok
------------------------------------------------
a | 2 | 注2
------------------------------------------------
b | 2 | ok
------------------------------------------------
注1
不做任何調轉
注2
只有將
<jsp:include page="logincheck.jsp" flush="true"/>
放在代碼的第一行才可以。
否則
java.lang.IllegalStateException: Cannot forward after response has been committed at org.apache.catalina.core.ApplicationDispatcher.doForward
日文環境
java.lang.IllegalStateException: レスポンスをコミットした後でフォワードできません at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:324) at
這個錯誤往往是在forward執行之前,response已經返回了!
不明的原因!有空上網上再找找!