《JSP入门教程(DOC格式)》第8章


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
小说推荐
返回首页返回目录