servlet中两种资源跳转的方式:

一、请求转发

这是一种在服务器内部的资源跳转方式,过程为:

        当客户端(就是浏览器)把请求发送到服务器中以后,假设原本该由资源a来接收,那么此时资源a可以将请求转发(forword)给另一个资源b,然后由资源b来响应请求的结果。

实现方式:只需在资源a中获取forword方法,为服务器提供资源b的路径即可。

req.getRequestDispatcher("资源b路径").forward(req,resp);

        在这个过程中,本来由资源a从客户端获取的数据可以使用Reauest对象来传送共享给资源b。

// 存储数据到 request域中。
void setAttribute(String name,Object o);

// 根据 key,获取值。
Object getAttribute(String name);

// 根据 key,删除该键值对。
void removeAttribute(String name);

注意:进行请求转发时,是在服务器内的资源之间进行跳转,浏览器始终只发一次请求,所以可以看到浏览器的地址栏路径是不变的,同样的,因为是在服务器内进行跳转,所以只能转发到当前服务器内的内部资源,而不能与互联网上其他地方的资源连接。

例如:

将req与req2连接。

在req2里将请求转发给req1,并设置相应输出语句。

设置req1的输出语句。

在访问req.html过后,在服务器控制台上可以看到req1先于req2响应。

且搜索栏里的路径没变过。

二、重定向

这是另一种资源跳转的方式:

资源a内可以设置重定向的资源b路径,当客户端将请求发送给资源a后,资源a会给予跳转响应,使得浏览器重新向资源b发送请求。

实现方式:

在资源a中先设置状态码302,然后调用response对象的setHeader方法,为客户端提供资源b的路径。

需要注意的是,这里的路径需要加上虚拟路径,因为浏览器重新发送的响应可以是任何地方,包括互联网上的其他资源,而不是仅限于服务器内的资源。

​

resp.setStatus(302);    //先设置状态码。
resp.setHeader(“location”,“资源B的路径");   
 //告诉客户端b路径,使得客户端向资源b重新发送请求。

/*或者,(因为状态码的设置是必须的),所以调用sendRedirect方法省
略设置状态码的代码,只需填写资源b的路径即可。*/
resp.sendRedirect("资源B的路径");

而且,在重定向完成后,浏览器搜索栏的路径也会发生变化。

例如:

在req2中设置重定向至我的主页的语句。

 

结果输入req.html后直接就跳转到我的主页了。(#^_^#)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值