JSP页面跳转中的问题 [ 总结 ]

本文探讨了JSP中不同的页面跳转方法(如redirect与forward)及包含方式,并通过实例展示了不同组合的效果,特别关注了非法状态异常的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

页面调转有如下几种方式
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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值