zoukankan      html  css  js  c++  java
  • 【转】JSP三种页面跳转方式

    使用JSP大约有下列三种跳转方式:
    1. response.sendRedirect();
    2. response.setHeader("Location","");
    3. <jsp:forward page="" />

    经过试验得到下面的一些规则:

    一. response.sendRedirect()

    1. 此语句前不允许有out.flush(),如果有,会有异常:
      java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client.
       at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)
      ...
    2. 跳转后浏览器地址栏变化
    3. 如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了;
    4. 如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;

    二. response.setHeader("Location","")

    1. 此语句前不允许有out.flush(),如果有,页面不会跳转。
    2. 跳转后浏览器地址栏变化
    3. 此语句后面的语句执行完成后才会跳转

    三. <jsp:forward page="" />

    1. 此语句前不允许有out.flush(),如果有,会有异常:
      java.lang.IllegalStateException: forward() not allowed after buffer has committed.
       at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134)
       at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:101)
       at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:836)
       ...
    2. 跳转后浏览器地址栏不变,但是只能跳到当前主机下
    3. 此语句后面的语句执行完成后才会跳转 
    4. 跳转后得路径变为当前路径,图片不是绝对路径将无法显示

    JSP跳转页面详解
    在JSP中使用jsp forward Action来实现页面的跳转功能。

       语法:
    <jsp:forward page="{relativeURL|<%= expression %>}"/> 或
    <jsp:forward page="{relativeURL|<%= expression %>}">
    <jsp:param name="parameterName"
    value="{parameterValue|<%= expression %>}"/>+</jsp:forward>
      这个action使您可以将request向前到另外一个页面。它只有一个属性,page。Page应有一个相对的URL组成。这可以是一个静态的值或者是能够在被请求的时候计算得到的值,就如下面两个例子一般:
    <jsp:forward page="/utils/errorReporter.jsp"/>
    <jsp:forward page="<%= someJavaExpression %>"/>
    !supportEmptyParas]>
      现在以一个具体例子来说明:在test1.jsp中使用forward使其跳转到test2.jsp页面中。
    Test1.jsp
    <HTML>
    <HEAD>
    <TITLE>forward test</TITLE>
    !supportEmptyParas]>
    </HEAD>
    !supportEmptyParas]>
    <BODY BGCOLOR="#FFFFFF">
    <!--跳转到test2.jsp--!>
    <jsp:forward page="/test2.jsp"/>
    </BODY>
    </HTML>
    !supportEmptyParas]>
    test2.jsp
    <HTML>
    <HEAD>
    <TITLE> forward test </TITLE>
    !supportEmptyParas]>
    </HEAD>
    !supportEmptyParas]>
    <BODY BGCOLOR="#FFFFFF">
    <%out.println("这是jsp2.jsp页面产生出的输出");%>
    </BODY>
    </HTML>
    !supportEmptyParas]>
      运行test1.jsp,可在浏览器中看见:"这是jsp2.jsp页面产生出的输出"的输出信息。但是如果你在test1.jsp和test2.jsp这两个页面中有参数传递怎么办呢?用get方式吧,不但总的长度有限制,使用现在十分不方便,而且有时候还不安全。其实我们完全可以使用jsp1.1中给forward里提供的para属性就可以解决。现以test3.jsp和test4.jsp来说明。
    !supportEmptyParas]>
    Test1.jsp
    <HTML>
    <HEAD>
    <TITLE> forward test </TITLE>
    !supportEmptyParas]>
    </HEAD>
    !supportEmptyParas]>
    <BODY BGCOLOR="#FFFFFF">
    <jsp:forward page="/test4.jsp">
    <jsp:param name="name" value="powerman"/>
    <jsp:param name="address" value=" 北京西大街188号"/>
    </jsp:forward>
    </BODY>
    </HTML>
    !supportEmptyParas]>
    test2.jsp
    <HTML>
    <HEAD>
    <TITLE>forward test</TITLE>
    !supportEmptyParas]>
    </HEAD>
    !supportEmptyParas]>
    <BODY BGCOLOR="#FFFFFF">
    <%
    out.println("这是jsp4.jsp页面产生出的输出"+"<br>");
    out.println("姓名:"+request.getParameter("name")+"<br>");
    out.println("地址:"+request.getParameter("address")+"<br>");
    !supportEmptyParas]>
    %>
    </BODY>
    </HTML>
       运行test3.jsp,可在浏览器中看见:
       "这是jsp4.jsp页面产生出的输出
       姓名:powerman
       地址:北京西大街188号"
    的输出信息
  • 相关阅读:
    Axis,axis2,Xfire以及cxf对比 (转)
    客户端调用服务器端三种方式
    webservice发送数据,取数据的方式
    强制关闭myeclipse出现的问题
    取当前系统的上月时间
    oracle 报Ora-01008错误:oracle 并非所有变量都已绑定的原因.TO_number();动态执行select..into..语句时
    ResultSetMetaData rsmd = rs.getMetaData()是什么意思?
    概率质量函数:怀孕周期的PMF
    Python 正则表达式
    TF-IDF
  • 原文地址:https://www.cnblogs.com/mogu/p/store.html
Copyright © 2011-2022 走看看