按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
1。 浏览器向 test。jsp 发送请求。
2。 test。jsp 计算客户选择的颜色,将请求转发至 red。jsp。
3。 red。jsp 返回响应给浏览器。
27 / 148
…………………………………………………………Page 28……………………………………………………………
这下知道为什么浏览器的地址没有变化了吧?因为浏览器只是执行了对
test。jsp 的请求,test。jsp 到 red。jsp 的部分是在服务器内执行的,浏览器并
不知道服务器里到底发生了什么,它只知道自己获得的响应是 test。jsp 发回来
的,甚至不知道服务器还有个red。jsp。
这就是请求转发 forward 了。例子见 lingo…sample/03…01/。
3。3。 如果用 redirect
test。jsp 中需要这样写:
略过取得参数与比较参数值不提,只关注 redirect 的部分:
response。sendRedirect(〃red。jsp〃);
response 翻译过来就是响应,代表着 http 响应。调用 response 的
sendRedirect(〃red。jsp〃)方法,将页面重定向到 red。jsp。
再请大家注意一下浏览器的 url 地址:
选择红色页面时:
28 / 148
…………………………………………………………Page 29……………………………………………………………
选择绿色页面时:
与 forward 不同,url 地址一直在变化,红色的时候显示 red。jsp,绿色的时候
显示 green。jsp。
再看一下流程图吧:
1。 浏览器向 test。jsp 发送请求。
2。 test。jsp 计算客户选择的颜色,向浏览器发送一个页面重定向
(redirect)的响应,响应中包含red。jsp 的url 地址。
29 / 148
…………………………………………………………Page 30……………………………………………………………
3。 浏览器根据页面重定向(redirect)响应中的red。jsp 地址,再次向服务
器发送请求,这次请求的就是 red。jsp 了。
4。 red。jsp 执行,返回响应。
30 / 148
…………………………………………………………Page 31……………………………………………………………
redirect 会触发另一个请求响应流程,第二次请求的时候是由浏览器发起对
red。jsp 的请求,所以url 地址改变了。
这就是页面重定向 redirect 了。例子见 lingo…sample/03…02/。
3。4。 forward 和 redirect 的问题
3。4。1。 绝对路径与相对路径
1。 如果咱们使用的 URL 网址是以“/”开头的,那么这个网址就叫做绝对路
径。
2。 如果咱们使用的 URL 网址不是“/”开头的,那么这个网址就叫做相对路
径。
3。4。1。1。 相对路径
在相对路径上,两者的表现是相同的。
看看 lingo…sample/03…03/这个例子,如果我们去请求 relative/forward。jsp
或 redirect。jsp,然后从这里再跳转向它下面的result/result。jsp 会怎样呢?
1。 forward 的例子:
这里的相对路径就是 result/result。jsp。
31 / 148
…………………………………………………………Page 32……………………………………………………………
因为刚刚请求的 test。jsp 是在/03…03/relative/下,所以我们的当前路
径就是/03…03/relative/,执行 forward 的时候会寻找当前路径下的
result/result。jsp,找到之后便转发请求。
2。 redirect 的例子:
这里的相对路径也是 result/result。jsp。
因为刚刚请求的 test。jsp 是在/03…03/relative/下,所以我们的当前路
径就是/03…03/relative/,执行 redirect 的时候会把当前路径加上
result/result。jsp,把结果作为重定向的地址发送给浏览器,浏览器再
去请求/03…03/relative/result/result。jsp,从而得到响应。
3。4。1。2。 绝对路径
问题出现了,绝对路径在forward 和 redirect 中出现了差别,还是刚才的情况,
但使用绝对路径的时候写法便不同了。
1。 forward 的例子:
这里的绝对路径就是/relative/result/result。jsp。
在本地测试时,forward 把 http://localhost:8080/03…03/当作根路径,
在它的基础上计算绝对路径。
这是由 jsp 的部署方式决定的,webapp 里可以放好多项目,为了让这些
项目可以互不影响、独立运行,不能让请求从一个项目直接在服务器内部
转移到另一个项目。为了防止出现这种情况,在执行 forward 的时候干脆
把项目的路径当作根目录,开发者看不到其他项目,也就不会出现问题了。
2。 redirect 的例子:
这里的绝对路径却是/03…03/absolute/result/result。jsp。
32 / 148
…………………………………………………………Page 33……………………………………………………………
在本地测试时,redirect 把 h