现在的位置: 首页 > 综合 > 正文

JSP页面跳转中的问题

2013年09月14日 ⁄ 综合 ⁄ 共 1899字 ⁄ 字号 评论关闭

 

页面调转有如下几种方式
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已经返回了!

不明的原因!有空上网上再找找!

 

 

抱歉!评论已关闭.