servlet的请求转发与重定向

servlet可以将发送给自己的某个请求转发给另外一个URL地址,这个地址可以是html、jsp、servlet或是其他的http地址。servlet的请求转发有三种方式:
1.inclue方法,应用代码为request.getRequestDispatcher("/url").include (request, response),其中URL地址是某个http地址。include转发时,地址栏没有改变,是原来的地址,这个过程是在服务器端完成,Servlet和被包含的页面同时被输出。
2.forward方法,request.getRequestDispatcher("/url").forward(request, response),地址栏也不会改变,同样是在服务器端完成,[color=red]但仅输出被转发的URL中的内容[/color]。
3.sendRedirect,只是客户重新发起一个请求,第二个请求指向其参数url。一般称做重定向,[color=red]客户端的地址栏将改变为url值[/color],是由客户端发起的第二次请求。参数中要写明具体的url地址,因为当客户端再次发送请求时,会直接请求web服务器根目录。要是要转发的一个html地址,它在WEB-INF文件夹下,那么要从servlet转发到这个
html地址,必须加上当前的web路劲名,这个路劲名可以通过request.getContextPath()获得,那么该转发代码可以为response.sendRedirect(request.getContextPath()+"/login.html");


注意:重定向是浏览器向服务器重新发出请求,但转发相当于把request的范围扩大,例如:
在a界面有个连接<a href="b.jsp?id=1">,在b界面可以通过request.getAttribute("id")获得,
在b界面也有个连接<a href="c.jsp?name="123">,则在界面用request.getAttribute("id")就取不到值。这是每个连接就像一个重定向,相当于重新创建了一个request,当b->c时,a->b的request已经结束了。
接下来,在c的界面前加<jsp:forward page="d.jsp"/> ,那么变量name在c、d都有效,所以在d想取到参数name的值,不必要把参数值放到session里来扩大他的范围。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值