jsp跳转 和 serlvet跳转

本文详细解释了服务器端转发(forward)与客户端重定向(redirect)的区别,包括它们的工作原理、URL变化情况以及如何在JSP和Servlet中实现这两种跳转方式。

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

都有客户端跳转,服务器端跳转
客户端跳转之后,request属范围不可以在使用,url发生变换
服务器端跳转,request属性范围的变量还可以使用,url不变
首先看jsp
1.客户端跳转用response.sendRedirect(“index.html”);
2.服务器端跳转用

<jsp:forward>
    <jsp:param name="xx" value="xx"/>
</jsp:forward>

再来看servlet跳转
resp和req是doGet的接受参数
1.客户端跳转也是用resp.sendRedirect(“index.html”);
2.服务器端跳转

RequestDispatcher rd = req.getRequestDispatcher("index.html");
rd.forward(req,resp);

客户端跳转使用的都是response对象的sendRedirect方法
服务端跳转使用的是request对象的getRequestDispatcher的forward方法

如何记忆呢?forward是服务器内部转发
服务器端跳转是由客户端发送一个请求,请求一个服务器资源——如JSP和Servlet——,这个资源又将请求转到另一个服务器资源,然后再给客户端发送一个响应,也就是说服务器端跳转是客户端发送一次请求,服务器端给出一次响应,比如说我访问1.jsp,在这个1.jsp里面用jsp:forward跳转2.jsp了,这就是访问资源1.jsp,1.jsp又将请求转到2.jsp,最后是2.jsp给用户响应,所以是一次请求,一次响应,要注意的是从始至终,用户是无法获得1.jsp页面的响应的,也就是说对用户来说1.jsp是不存在的,他直接就被内部转发到了2.jsp,但是url还是1.jsp

客户端跳转:服务器会通过response返回响应(参数、状态等)给客户端,然后客户端再根据这些信息跳转到相应的uil中,使用地址重写传递参数response.sendRedirect(“URL?参数名=参数值”),比如用户请求登录页面login.jsp,这时候用户当然可以访问到登录页面,所以login.jsp给了用户的第一次响应,用户输入自己的登录信息之后,跳转到登录页面,登录页面又给用户一次响应,所以是2次响应。
还有一次非常让人困扰的情况,就是1.jsp里面,不需要用户提交参数,直接写上<%=response.sedRedirect(“index.html”)%> 那么就从1.jsp直接跳转到index.html里面了,这样看来,好像和前面的一样啊,一次请求,一次响应,但是实际上,还是有2次响应的,一次是1.jsp的响应,一次是index.html的响应,只是由于这个页面太简单,执行的太快,你感觉不到1.jsp给你的响应,你要知道1.jsp的响应就是那个response对象,把代码改一改,改成response.sendRedirect(“index.html?a=1”),这样我们就设置了1.jsp的响应,而这响应就会传给index.html

客户端跳转,从loging.jsp到index.html,有2个request,2个response
而服务器端跳转,从1.jsp到2.jsp都只有一个request对象,一个response对象

总结:
1.forward跳转:
a.服务器端跳转,地址栏不改变;
b.执行到跳转语句后马上无条件跳转,之后的代码不再执行(跳转之前一定要释放全部资源,尤其是数据库连接资源);
c.request设置的属性在跳转后的页面仍可以使用;
d.使用传递参数。

2.response跳转:
a.客户端跳转,地址栏改变;
b.所有代码执行完毕后跳转;
c.跳转后的页面不能使用上一个页面的request属性;
d.使用地址重写传递参数(response.sendRedirect(“URL?参数名=参数值”))。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值