两者比较如下:

跳转类型  客户端请求次数 服务端响应次数 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. SQL Server中数据去重单列数据合并

    sql中我们偶尔会用到对数据进行合并,但其中的某一列数据要进行合并的操作: 如下图,一个用户有多个角色ID,如果我们想要统计一个用户有哪些角色,并且以单列的展现形式,单纯的用DISTINCT去掉肯定是 ...

  2. VMware 虚拟机的虚拟磁盘编程知识点扫盲之一

    目录 目录 前言 VMware 虚拟机文件类型 VMware 虚拟机的快照 Quiseced Snapshot Quiseced Snapshot 的创建过程 创建快照 创建快照的执行过程及原理 删除 ...

  3. Shell脚本中单引号(‘)和双引号(“)的使用区别

    在Linux操作系统上编写Shell脚本时候,我们是在变量的前面使用$符号来获取该变量的值,通常在脚本中使用”$param”这种带双引号的格式,但也有出现使用'$param'这种带引号的使用的场景,首 ...

  4. 应用安全 - 代码审计 - PHP

    RCE RCE函数 eval.preg_replace + /e模式.assertJavascript:evalVbscript: Execute.EvalPython:exec <?php i ...

  5. vue打包详情

    说明 本文代码中的配置基于vue-cli2 需求 在实际开发中我们可能有测试环境一套请求API 和 正式环境一套API,尤其是两个环境的域名不同时,就需要我们分环境打不同配置的包 了解 webpack ...

  6. mybatis如何把session托管给spring

    原生mybatis创建SqlSession的流程: SqlSession sqlSession = null; try { sqlSession = sqlSessionFactory.openSes ...

  7. Educational Codeforces Round 60 (Rated for Div. 2) D. Magic Gems(矩阵快速幂)

    题目传送门 题意: 一个魔法水晶可以分裂成m个水晶,求放满n个水晶的方案数(mol1e9+7) 思路: 线性dp,dp[i]=dp[i]+dp[i-m]; 由于n到1e18,所以要用到矩阵快速幂优化 ...

  8. 5105 pa1 MapReduce

    Programming Assignment 1: A simple MapReduce-like compute framework Yuanli Wang  wang8662            ...

  9. wxpython中单选框的两种创建方式源码展示

    #coding=utf-8 import wx class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1, ...

  10. Ubuntu14 vsftp 的安装和虚拟用户配置

    一.介绍 FTP 是 File Transfer Protocol (文件传输协议)的缩写 ,在 Unix/Linux 系统中常用的免费 FTP 服务器软件主要是 VSFTP,vsftp的官方地址:h ...