博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跟小博老师一起学Servlet ——Servlet之客户端跳转
阅读量:6081 次
发布时间:2019-06-20

本文共 828 字,大约阅读时间需要 2 分钟。

hot3.png

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

概念

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

 

跳转方式

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

 

客户端跳转原理

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

请看客户跳转流程图

 

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

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

 

实现代码

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

006zipb5zy78PESBfGy82&690 

应用场景

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

转载于:https://my.oschina.net/u/2971691/blog/840356

你可能感兴趣的文章
分享几篇文章(PDF版)
查看>>
Node.js 全局对象
查看>>
你真的懂使用Runtime进行swizzle的最佳写法?
查看>>
Java JDBC
查看>>
实现multibandblend
查看>>
机器学习 vs 深度学习到底有啥区别,为什么更多人选择机器学习
查看>>
MongoDB安装(Mac版)
查看>>
25.Android Studio下Ndk开发(参数加密解决方案)
查看>>
小程序中使用百度地图
查看>>
Kubeless —— Kubernetes 原生 Serverless 框架
查看>>
我所理解的Android组件化之通信机制
查看>>
以太坊系列之六: p2p模块--以太坊源码学习
查看>>
Confluence 6 用户目录图例 - Confluence 内部目录
查看>>
iOS算法小记
查看>>
5行代码秀碾压,比Keras还好用的fastai来了,尝鲜PyTorch 1.0必备伴侣
查看>>
(4)Python列表list
查看>>
Gradient Descend 梯度下降法公式推导
查看>>
Go 装饰器模式在 API 服务程序中的使用
查看>>
基于 React 中文社区, 对开源社区最近的思考(2015.04)
查看>>
MySQL安全管理
查看>>