跟小博老师一起学Servlet ——Servlet之客户端跳转

时间:2021-11-11 17:07:25

上节中我们通过HttpServletRespose向其客户端响应,但有些场景我们要将请求转发到下一资源或其它页面,那就要借助于跳转技术。

概念

所谓跳转给我们最直观的感受请求与响答并不一致,比喻我们访问A的网址而出来的却是B网址的内容。很多Web程序出于业务需要,常常使用到跳转技术。Servlet中可以实现ServletServlet、Servletjsp等之间的跳转,而且实现起来并不复杂。

 

跳转方式

Servlet提供了二种跳转方式,一种为客户端跳转(又称为重定向),另一种为服务端跳转。客户端跳转从字面理解需借助客户端(一般为浏览器)完成,服务端跳转则在Web服务器内部完成,二者有质的区别。

 

客户端跳转原理

比如我们从A页面上向某个Servlet发起请求,servlet处理完成后返回B页面。

请看客户跳转流程图

跟小博老师一起学Servlet ——Servlet之客户端跳转

 

可以看到浏览器向Web服务器请求了二次,最终显示的是页面B内容。第一次请求处理完成后,Servlet向浏览器做出响应。在响应的内容中包含了指示浏览器发起第二次请求的指令,浏览器收到响应后再次向指定URL发送请求。此过程有点像对战游戏中的迂回策略,巧妙化简不能直到达目地的问题:)

客户端跳转过程稍显复杂,同学们可以观察浏览器地址栏中最终的URL就好区分是哪种跳转。客户端跳转最终是目标资源URL,也就是页面B资源地址;服务端跳显示的还是servlet对应的地址。

 

实现代码

HttpServletResponse提供了sendRedirect方法专用于客户端跳转,注意的是提供其跳转的URL最好是全路径,否则对于不是同一站点的资源会跳转失败。

跟小博老师一起学Servlet ——Servlet之客户端跳转

应用场景

客户端跳的目标可以是同一站点下的资源,但更适合跨域跳转(比如从百度跳到搜狐)。对于以禁用了cookie的浏览器,采用客户端跳会丢失会话(session)。应用时要确认运行环境,或通过重写URL解决,以免造成bug。