友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

JSP入门教程(DOC格式)-第6章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






                                                       



好的,这里我们会看到四个页面:  



    1。  index。jsp 中选择颜色,点击按钮后提交到 test。jsp。  

    2。  test。jsp 取得用户选择的颜色,根据颜色值显示对应的页面。  

    3。  如果选择了红色,就显示 red。jsp。  

    4。  如果选择了绿色,就显示 green。jsp。  



在这里例子里,index。jsp,red。jsp,green。jsp 中的内容都是一样的,所有的 

玄机都在 test。jsp 中。  



                                         25 / 148  


…………………………………………………………Page 26……………………………………………………………

                                             



现在面临的问题是如何在 test。jsp 决定实现 red。jsp 或者 green。jsp,我们可 

以在forward 和 redirect 中任选其一。  



3。2。 如果用 forward  



test。jsp 中需要这样写:  



  

  

          



略过取得参数与比较参数值不提,只关注 forward 的部分:  



request。getRequestDispatcher(〃red。jsp〃)。forward(request; response);  



首先调用 request 的 getRequestDispatcher()方法,获得对应 red。jsp 的转发 

器,然后调用 forward()方法执行请求转发。结果用户看到的就是 red。jsp 中的 

结果了,一个红色的页面。  



这里请大家注意一下浏览器的 url 地址:  



选择红色页面时:  



                                                                 



选择绿色页面时:  



                                                                 



                                         26 / 148  


…………………………………………………………Page 27……………………………………………………………

                                                              



于是,无论转发至 red。jsp 还是 green。jsp,地址栏上显示的都是 test。jsp。  



这是为什么呢?通过下面的流程图会让我们容易理解:  



     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……………………………………………………………

                                    
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!