JSP三种页面跳转方式

  • Post author:
  • Post category:其他


JSP三种页面跳转方式

<http://blog.163.com/huyuxi0228@126/blog/static/325285332008566935493/>

昨天在研究jsp页面跳转,费了好大的劲才完成在电视上的使用。在网上找了一些资料,加上自己的心得,跟大家分享一下。

使用JSP大约有下列三种跳转方式:

1. response.sendRedirect(跳转地址);

2. response.setHeader(“Location”,””);

3. <jsp:forward page=”” />

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

一. response.sendRedirect()

此语句前不允许有out.flush(),如果有,会有异常:

java.lang.IllegalStateException: Can&apos;t sendRedirect() after data has

committed to the client.

at

com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)



跳转后浏览器地址栏变化

如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了;

如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;

二. response.setHeader(“Location”,””)

此语句前不允许有out.flush(),如果有,页面不会跳转。

正在装载数据……

跳转后浏览器地址栏变化

此语句后面的语句执行完成后才会跳转

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

此语句前不允许有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)



跳转后浏览器地址栏不变,但是只能跳到当前主机下

此语句后面的语句执行完成后才会跳转

跳转后得路径变为当前路径,图片不是绝对路径将无法显示

JSP跳转页面详解

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

语法:

<jsp:forward page=”{relativeURL|<%= exdivssion %>}”/> 或

<jsp:forward page=”{relativeURL|<%= exdivssion %>}”>

<jsp:param name=”parameterName”

value=”{parameterValue|<%= exdivssion %>}”/>+</jsp:forward>

这个action使您可以将request向前到另外一个页面。它只有一个属性,page。Page应有一个相对的URL组成。这可以是一个静态的

值或者是能够在被请求的时候计算得到的值,就如下面两个例子一般:

<jsp:forward page=”/utils/errorReporter.jsp”/>

<jsp:forward page=”<%= someJavaExdivssion %>”/>

!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页面产生出的输出

姓名:huyuxi

地址:郑州市未来大道499号”

的输出信息