两者比较如下:

跳转类型  客户端请求次数 服务端响应次数 URL变化 站外跳转            作用域
服务器跳转     1     1    无   否 pageContext、request、session、application
客户端跳转     2     2    有   能 session、application

请求次数与响应次数

服务端跳转:客户端发起一次请求,服务端接收请求后,将结果跳转到另一个页面,作为此次请求结果返回给客户端
客户端跳转:客户端发起一次请求,服务端返回此次请求的结果,结果内容是一个URL地址,客户端拿到此URL,再次发送一次请求,服务端再次响应最终结果给客户端

所以,对于服务器跳转,请求次数和响应次数均是1次,对于 客户端跳转,请求次数和响应次数均是2次

 

URL是否变化

服务端跳转:只是服务端内部不断进行forward,不管进行多少次forward,客户端是不知情的,服务端将最后的结果返回给客户端,即完成此次请求。客户端的URL没有变化。
客户端跳转:客户端发起两次请求,URL发生变化(PS:除非闲得蛋疼,两次请求的URL地址是一样的)

能否进行站外跳转

服务端跳转:不能进行站外跳转。服务端请求只能在服务内,将请求响应的结果不断的跳转, 使用的都是服务内部的资源。不能跳到其他服务上去。
客户端跳转:可以。直接跳转到其他服务的URL即可

作用域

以jsp的四大作用域,关于作用域详见地址  http://www.cnblogs.com/mengzhen123/p/5968831.html

pageContext:当前页面

request:当前请求

session:当前会话

application:整个应用。狭义的理解为application的生命周期为 服务的开启到关闭

从上面我们说请求次数和响应次数就可以知道,对于客户端跳转,pageContext、request发生了改变。因为客户端URL发生了变化,pageContext即发生了变化,客户端是发送了是两次请求,request即发生了变化。所以如果使用客户端跳转的时候,共享数据建议存放在session中。

服务端为什么没有发生变化,我们从selvet实现服务端跳转方法forward不难看出, forward方法调用时,带着request、response参数,即不论服务端进行多少次forward,都是使用同一个request、response。所以pageContext、request作用域并没有变化。共享数据放在这两个作用域的对象中,依然可以取到。

PS:selvet、Struts2、SpringMVC  实现请求跳转的方式有差异,但是其本质是一样的。

Web开发中的服务器跳转与客户端跳转的更多相关文章

  1. Web开发中的相对路径和绝对路径

    在学习HTML的时候一定会遇到引入文件和链接跳转页面,比如:JS文件.CSS文件.Image图片.我们就会考虑是相对路径和绝对路径的问题.下面PHP程序员雷雪松就详细讲解下Web开发中的相对路径和绝对 ...

  2. 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践

    提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...

  3. Redis在WEB开发中的应用与实践

    Redis在WEB开发中的应用与实践 一.Redis概述: Redis是一个功能强大.性能高效的开源数据结构服务器,Redis最典型的应用是NoSQL.但事实上Redis除了作为NoSQL数据库使用之 ...

  4. Web开发中的主要概念

    一.Web开发中的主要概念1.静态资源:一成不变的.html.js.css2.动态资源:JavaWeb.输出或产生静态资源.(用户用浏览器看到的页面永远都是静态资源) 3.JavaEE:十三种技术的集 ...

  5. web开发中目录路径问题的解决

    web开发当中,目录路径的书写是再常用不过了,一般情况下不会出什么问题,但是有些时候出现了问题却一直感到奇怪,所以这里记录一下,彻底解决web开发中路径的问题,开发分为前端和服务端,那么就从这两个方面 ...

  6. [译]如何在Web开发中使用Python

    [译]如何在Web开发中使用Python 原文:HOWTO Use Python in the Web 摘要 这篇文档展示了Python如何融入到web中.它介绍了几种Python结合web服务器的方 ...

  7. SpringBoot学习(七)-->SpringBoot在web开发中的配置

    SpringBoot在web开发中的配置 Web开发的自动配置类:在Maven Dependencies-->spring-boot-1.5.2.RELEASE.jar-->org.spr ...

  8. 下面哪项技术可以用在WEB开发中实现会话跟踪实现?

    下面哪项技术可以用在WEB开发中实现会话跟踪实现? A:session B:Cookie C:地址重写 D:隐藏域 答案:ABCD 会话跟踪是一种灵活.轻便的机制,它使Web上的状态编程变为可能. H ...

  9. Web开发中的18个关键性错误

    前几年,我有机会能参与一些有趣的项目,并且独立完成开发.升级.重构以及新功能的开发等工作. 本文总结了一些PHP程序员在Web开发中经常 忽略的关键错误,尤其是在处理中大型的项目上问题更为突出.典型的 ...

随机推荐

  1. Exchanger 源码分析

    Exchanger 此类提供对外的操作是同步的: 用于成对出现的线程之间交换数据[主场景]: 可以视作双向的同步队列: 可应用于基因算法.流水线设计.数据校对等场景 创建实例 /** * arena ...

  2. 用流的方式来操作hdfs上的文件

    import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...

  3. day47—JavaScript事件基础应用

    转行学开发,代码100天——2018-05-02 1.事件对象 JavaScript中事件对象通常用定义变量ev或event表示.为了兼顾浏览器兼容问题,定义事件对象为 var oEvent = ev ...

  4. delphi 遍历窗口

    http://blog.163.com/t_form/blog/static/12348523220115132155814/ function EnumWindowsProc_2(hwnd: HWN ...

  5. IDE(Pycharm&&IDEA)配置文件模版

    Pycharm ====> 修改Python Script : 修改位置:Edito >> File and CodeTemplates >> Python Script ...

  6. C#打印单据

    HTML: <form id="form1">        <div id="t_border">            <!- ...

  7. docker--docker架构

    4 docker 架构 Docker uses a client-server architecture. The Docker client talks to the Docker daemon, ...

  8. [Python3 练习] 002 温度转换2

    题目:温度转换 II (1) 描述 温度的刻画有两个不同体系:摄氏度 (Celsius) 和华氏度 (Fabrenheit) 请编写程序将用户输入的华氏度转换为摄氏度,或将输入的摄氏度转换为华氏度 转 ...

  9. maven build失败 (Failure to find io.renren:renren-security:pom:3.2.0 in http://maven.aliyun.com/nexus/content/groups/public/ was cached in the local repository...)

      今天mvn clean package一个子工程(renren-admin)时报错: Failed to execute goal on project renren-admin: Could n ...

  10. Acwing‘803. 区间合并

    (https://www.acwing.com/problem/content/805/) 给定 nn 个区间 [li,ri][li,ri],要求合并所有有交集的区间. 注意如果在端点处相交,也算有交 ...