jsp中几种跳转方式和参数共享

整理了一下jsp入门中的跳转和数据共享问题,写成这篇博文希望对大家有帮助,参考文章列在后面:

常用的跳转方式有以下几种:

(1)href超链接标记,属于客户端跳转

(2)使用javascript完成,属于客户端跳转

(3)提交表单完成跳转,属于客户端跳转

(4)使用response对象,属于客户端跳转

(5)使用requestDispatcher类,属于服务器跳转

下面一一来看

(1)href超链接标记

这个比较简单,通常写到a标签里即可,来完成指定位置的动态跳转比较方便

代码:<a href=”new.jsp”>跳转</a>

(2)使用javascript完成

(i)可以在JavaScript代码里写提交表单的写法

代码:

[javascript] view
plain
copy

  1. <scripttype="text/javascript">
  2. function submit() {
  3. with(document.getElementById("queryFunction")) {
  4. action="new.jsp";
  5. method="post";
  6. submit();
  7. }
  8. }
  9. </script >

(ii)也可以直接定位, 给window.location属性赋值,而不提交表单

代码:

[javascript] view
plain
copy

  1. <script  type="text/javascript">
  2. function  go {
  3. window.self.location = "new.jsp”;
  4. }
  5. </script >

此外还可以写成

[javascript] view
plain
copy

  1. <script  type="text/javascript">
  2. window.location.replace("http://www.baidu.com");
  3. </script>

replace这种方法与定位window.location差别是他没有历史记录.

(iii)使用history对象的forward(),back(),go()方法

其中go()方法需要一个整形入口参数

代码:<a   href="javascript:history.go(-1)">返回上一步</a> 等价于<a  href="javascript:history.back()">返回上一步</a>

(3)提交表单完成跳转

将整个form表单数据提交的方式.

代码:

[html] view
plain
copy

  1. <form name="form1"method="POST" action="new.jsp">
  2. <input type="text" name="name">
  3. <input type="text" name="psd">
  4. <input type="submit" value="提交">
  5. <input type="reset" value="重置">
  6. </from>

(4)使用response对象,为Jsp的内置对象

(i)直接使用sendRedirect()重定向, 重定向后在浏览器地址栏上会出现重定向页面的URL.代码:

<%

response.sendRedirect("http://www.baidu.com");

return;

%>

说明: sendredirect()中的URL是可以带参数的,例如sendredirect("url?name="+name);我们可以在跳转的时候传入参数.

此外,一般response.sendRedirect()之后紧跟一句 return;我们已经知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然已经要做转向了,那么后的输出就已经没有意义了,而且有可能会因为后面的输出导致转向失败。

(ii)使用setHeader()方法,直接修改地址栏来实现页面的重定向

<%

response.setHeader("Refresh","1;url=http://www.baidu.com");

%>

标准格式: response.setHeader("Refresh","等待的秒数;url=绝对路径或者相对路径");上例是等待1秒之后跳转.

(5)使用requestDispatcher类

基本方法

[java] view
plain
copy

  1. RequestDispatcher  rd = request.getRequestDispatcher("目标页面");
  2. rd.forward(response,request);

Servlet可通过两种方式得到RequestDispatcher对象:

ServletContext的getRequestDispatcher()

ServletRequest的getRequestDispatcher()

调用ServletContext的getRequestDispatcher(String path)方法,path参数指定目标组件的路径。

调用ServletRequest的getRequestDispatcher(String path)方法与上一个方式的区别在于,前者的path参数必须是绝对路径,而后者的path参数可以是绝对路径,也可以是相对路径。所谓绝对路径,就是指以符号"/"开头的路径,"/"表示当前web应用的URL入口。

 最后比较一下response重定向和forward跳转的区别

response:    1执行完所有的代码再跳转到目标页

------------------2跳转到目标页后浏览器的URL会改变

------------------3在浏览器中重定向

------------------4可以跳转到其他服务器上的页面,例如”百度”。

forward跳转 : 1直接跳转到目标网页 其后的代码不再执行

------------------2跳转到目标页后URL不变

------------------3在服务器端重定向

------------------4无法跳转到其他服务器上的页面

在jsp的跳转过程中,经常会传递一些参数值,这些值通常我们放到request中.但是哪些jsp的跳转方式是可以共享request,哪些又是不共享,即跳转后拿不到值的呢?

一、首先来看可以共享request的情况:

(1)<jsp:include page="...">

页面间有包含关系的,包含进来的页面中的request中的属性和原页面共享属性数据以及请求参数,

(2)属于服务器端进行跳转的方式

(i)<jsp:forward page="...">用于从一个页面跳转到另一个页面,要跳转的页面也可进行共享原页面中request中设置的属性以及请求参数。这种jsp界面使用forward的方式与Servlet中forward()是相同的道理

(ii)forward()方法

使用到javax.servlet.RequestDispatcher类

RequestDispatcher rd =getServletContext().getRequestDispatcher("url");

rd.forward(requestVar,requestVar); //传递servlet的入口参数

forward函数已经把原页面的request,response对象传入新的页面,因此这新旧页面拥有相同的request,response对象。

request.getparameter("var")就可以得到相应的值.

forward()是直接在server做的,浏览器并不知道,也不和浏览器打交道,这也是浏览器的地址不变化的原因。

二、不能共享request的jsp跳转方式

(1)JavaScript跳转

属于脚本语言的直接定位,不经过服务器传参,所以不能共享request数据

(2)、HTML语言的自动跳转

<html>

<head>

<meta http-equiv="refresh"content="0;url="http://www.baidu.com">

0是等待时间,如果设置为5表示等待5s后开始跳转

</head>

…………

(3) response跳转

Response跳转方式其实是向浏览器发送一个特殊的Header,然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上可以看到地址的变化。新页面不能处理旧页面的pagecontext(request,response,...)对象.

(4)还有的情况是HTML的特征,用src作为页面链入时也是不能进行request属性数据以及参数共享,

(i)如<a></a>标签中的href=”…”,

(ii)还有例如常用的frameset

<frameset   id="set" title="set">

<frame  src="left.jsp"  name="leftFrame"  scrolling="auto"/>

<frame  src="right.jsp"  name="main"   scrolling="auto"/>

</frameset>

其中当前主页面和left.jsp和right.jsp不共享request对象.

(iii)然后就是直接定位的window.open(),window.location()等函数都不能进行request对象属性数据共享,以及请求参数共享的情况中,request对象在跳转到新页面时被清空了.并没有经过服务器的传递.

虽然通过客户端进行跳转的方式很简单方便,但在共用request内容对象时就不方便了,但是这时候可以考虑使用session来存储对象数据.session是以浏览器级别的环境,上面所有情况都可以共享,当然在相同系统环境, 且不关闭浏览器为前提下。但是session使用会对服务器造成压力,所以如果不是必要还是建议用request,response来传递数据。

参考文章:http://www.xuebuyuan.com/1010600.html

http://blog.csdn.net/wanghuan203/article/details/8836326

时间: 2024-10-24 19:08:01

jsp中几种跳转方式和参数共享的相关文章

JSP的几种跳转方式的异同

1 <jsp:foward page="url" /> 服务端跳转,立即跳转,后续语句不会执行: 2 <% response.sendRedirect("url"); %> 客户端跳转,重定向301方式,返回的response header中会有Location项.跳转前后续代码会继续执行,相当于把跳转动作委托设置于response header中. 3 在Servlet中:RequestDispatcher view = request.g

Vue中两种跳转方式

第一种:通过标签跳转,<router-link></router-link> 第二种:通过js跳转,定义点击事件进行跳转 原文地址:https://www.cnblogs.com/zlwei23/p/10981215.html

Jsp 四种跳转方式

四种跳转方式 request.getRequestDispacher().forward()跳转: (1)服务器端跳转. (2)执行后立即跳转. <jsp:forward>跳转: (1)实际上是对上面 forward 方法的封装,属于服务器端跳转,跳转之后地址栏不改变. (2)执行到后立刻跳转.跳转之前的语句会执行,跳转之后的语句将不会执行.如果在 JSP 中使用了 JDBC 的话,必须在跳转之前进行数据库的关闭,否则数据库将无法关闭. response.sendRedirect()跳转: (

jsp中四种范围的使用

///////////////////////////jsp中四种范围中的值的获取////////////////////////////////在pageContext,request,session,application四种范围中设置setAttribute()时:1.pageContext:pageContext.setAttribute(),只能在其本页面中取得值,pageContext.getAttribute() 2.request:request.setAttribute(),在

Android之Activity的几种跳转方式

 1.显示调用方法 Intent intent=new Intent(this,OtherActivity.class);  //方法1 Intent intent2=new Intent(); intent2.setClass(this, OtherActivity.class);//方法2 intent2.setClassName(this, "com.zy.MutiActivity.OtherActivity");  //方法3 此方式可用于打开其它的应用 intent2.set

JSP中四种传递参数的方法

jsp中四种传递参数的方法,我觉得总结一下,挺好的,以备后用! 1.form表单 2.request.setAttribute();和request.getAttribute(); 3.超链接:<a herf="index.jsp"?a=a&b=b&c=c>name</a> 1.form表单 form.jsp: <%@page contentType="text/html; charset=GB2312"%> &l

Servlet 两种跳转方式

response.sendRedirect , // 重定向,服务器端将uri返回到客户端,客户端再次发送请求. RequestDispatcher  rd  =  getServletContext().getRequestDispatcher("/login.jsp"); rd.forward(request,response);  //跳转,直接从服务器端访问 uri Servlet 两种跳转方式

微笑小程序的几种跳转方式

微信小程序页面跳转 的几种方式 最近在做微信小程序,碰到页面跳转的问题,总结一下页面之间跳转的方式 一.wx.navigateTo(OBJECT) 这是最普遍的一种跳转方式,其官方解释为:"保留当前页面,跳转到应用内的某个页面" 类似于html中的 window.location.href=" "eg: wx.navigateTo({ url: 'test?id=1' })实际效果如下: 小程序中左上角有一个返回箭头,可返回上一个页面 也可以通过方法  wx.nav

jsp中的两种跳转方式分别是?有什么区别?

在JSP中跳转有两种方式 forward跳转:<jsp:forward page ="跳转页面地址"> response跳转:response.sendRedirect("跳转页面地址"); 两种跳转的区别如下 forward跳转: 服务器端跳转,地址栏不改变. 执行到跳转语句后马上执行跳转,之后的代码不再执行(跳转之前一定要释放全部资源). request设置的属性在跳转后的页面仍然可以使用. response跳转: 客户端跳转,地址栏改变. 所有代码