在web开发中,我们经常会遇到网页跳转,除了html的a标签、表单提交等跳转方法外,在一般的jsp开发中,这种网页跳转被称作重定向,此次主要记录jsp开发中的两种重定向方式
|1. 利用response对象进行重定向,方法如下:
response.sendRedirect(目标网页路径)
目标网页路径既可以填相对路径,也可以填绝对路径(但是要填完整哦)
|2. 使用jsp动作指令实现重定向,方法如下:
<jsp:forward page="目标网页路径">
//<jsp:param value="" name=""> 可以对跳转到指定页面,并传值
</jsp:forward>
|3. 使用这两种方法跳转, 具有很大的不同, 主要有以下几个方面:
|3.1 从浏览器的地址显示来看
forward方法属于服务器端去请求资源,服务器直接访问目标地址,并对该地址的相应内容进行读取,再把读取的内容发给浏览器,因此客户端浏览器的地址不变。
redirect是告诉客户端,使浏览器知道去请求哪一个地址,相当于客户端重新请求一遍。所以地址显示栏会变。
简单来讲, 使用forward跳转某一页面,但地址栏不变仍是服务器地址,但使用redirect则是直接去访问某一页面地址,所以地址栏会变。
|3.2 从数据共享来看
forward转发的页,以及转发到的目标页面能够共享request里面的数据,而redirect转发的页以及转发到的目标页面不能共享request里面的数据。
|3.3 从功能来看
redirect能够重定向到当前应用程序的其它资源,而且还能够重定向到同一个站点的其他应用程序中的资源,甚至是使用绝对url重定向到其它站点的资源。比如,可以通过该方法跳转到百度页面。
<%
response.sendRedirect("https://www.baidu.com");
%>
forward方法只能在同一个web应用程序内的资源之间转发请求,可以理解为服务器内部的一种操作。以下代码运行时会报错。
<jsp:forward page="https://baidu.com"></jsp:forward>
|3.4 从效率来看
forward效率较高,因为跳转仅发生在服务器端。
redirect效率较低,因为类似于再进行了一次请求。
*特别提醒*: response.sendError()也是进行跳转,他的作用是向客户端发送http状态码的出错信息。
常见错误代码如下:
400 Bad Request, 请求出现语法错误
401 Unauthorized, 客户试图未经授权访问受密码保护的页面
403 Forbidden, 资源不可用
404 Not Found, 无法找到指定位置的资源
500 Internal Server Error, 服务器遇到了无法预料的情况,不能完成客户的请求。