<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    如何學(xué)好java

    如何學(xué)好java,其實(shí)很簡(jiǎn)單,只要用心體會(huì),慢慢積累!
    posts - 106, comments - 7, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    重定向和轉(zhuǎn)發(fā)的區(qū)別

    Posted on 2011-04-26 23:13 哈希 閱讀(184) 評(píng)論(0)  編輯  收藏 所屬分類: java面試題


    區(qū)別一:

      重定向時(shí)瀏覽器上的網(wǎng)址改變

      轉(zhuǎn)發(fā)是瀏覽器上的網(wǎng)址不變

    區(qū)別二:

      重定向?qū)嶋H上產(chǎn)生了兩次請(qǐng)求

    轉(zhuǎn)發(fā)只有一次請(qǐng)求 

    重定向: 

      發(fā)送請(qǐng)求 -->服務(wù)器運(yùn)行-->響應(yīng)請(qǐng)求,返回給瀏覽器一個(gè)新的地址與響應(yīng)碼-->瀏覽器根據(jù)響應(yīng)碼,判定該響應(yīng)為重定向,自動(dòng)發(fā)送一個(gè)新的請(qǐng)求給服務(wù)器,請(qǐng)求地址為之前返回的地址-->服務(wù)器運(yùn)行-->響應(yīng)請(qǐng)求給瀏覽器 

    轉(zhuǎn)發(fā): 

      發(fā)送請(qǐng)求 -->服務(wù)器運(yùn)行-->進(jìn)行請(qǐng)求的重新設(shè)置,例如通過request.setAttribute(name,value)-->根據(jù)轉(zhuǎn)發(fā)的地址,獲取該地址的網(wǎng)頁-->響應(yīng)請(qǐng)求給瀏覽器 

    區(qū)別三:

      重定向時(shí)的網(wǎng)址可以是任何網(wǎng)址

      轉(zhuǎn)發(fā)的網(wǎng)址必須是本站點(diǎn)的網(wǎng)址

    詳解:

      重定向:以前的request中存放的變量全部失效,并進(jìn)入一個(gè)新的request作用域。
    轉(zhuǎn)發(fā):以前的request中存放的變量不會(huì)失效,就像把兩個(gè)頁面拼到了一起。

    正文開始: 

      先是看上去不同,他們的調(diào)用分別如下:
    request.getRequestDispatcher("apage.jsp").forward(request, response);//轉(zhuǎn)發(fā)到apage.jsp
    response.sendRedirect("apage.jsp");//重定向到apage.jsp
    在jsp頁面中你也會(huì)看到通過下面的方式實(shí)現(xiàn)轉(zhuǎn)發(fā):
    <jsp:forward page="apage.jsp" />
    我在初學(xué)jsp的時(shí)候,對(duì)這兩個(gè)概念非常模糊,看別人的例子的時(shí)候,也是一頭霧水,不知道什么時(shí)候該用哪個(gè)。希望下面的解說能對(duì)你有所幫助。
    提到轉(zhuǎn)發(fā)和重定向就不得不提到request作用域。很多初學(xué)者都知道當(dāng)我們提交一個(gè)表單時(shí),就創(chuàng)建了一個(gè)新的請(qǐng)求。實(shí)際上,當(dāng)我們點(diǎn)擊一個(gè)鏈接時(shí),也創(chuàng)建了一個(gè)新的請(qǐng)求。那么一個(gè)請(qǐng)求的作用于到底有多大呢?例如:
    在頁面a.jsp中有一個(gè)鏈接<a href="b.jsp?id=1">這是指向b的一個(gè)鏈接,而且還帶了一個(gè)參數(shù)</a>。當(dāng)我們點(diǎn)擊這個(gè)連接的時(shí)候,就產(chǎn)生了一個(gè)請(qǐng)求,為了明確起見,我們把它叫做requestA->B。現(xiàn)在,在b.jsp頁面中我們就可以從這個(gè)請(qǐng)求中獲取信息了。在b.jsp中你可以寫入out.println(request.getParameter("id"))進(jìn)行測(cè)試。下面更復(fù)雜一點(diǎn),我們?cè)赽.jsp頁面中增加下面的語句:
    request.setAttribute("name","funcreal");
    out.println(request.getAttriblute("name"));//成功顯示了name變量的值。
    現(xiàn)在在b.jsp中再增加一個(gè)鏈接:<a href="c.jsp?age=23">這是指向c的一個(gè)鏈接,而且還帶了一個(gè)參數(shù)</a>,當(dāng)我們點(diǎn)擊這個(gè)連接的時(shí)候,將產(chǎn)生一個(gè)新的請(qǐng)求,這時(shí)requestA-B也就安息了,新的請(qǐng)求叫做requestB-C。同樣的道理,在c.jsp中,我們可以訪問到的變量只有age,因?yàn)閕d,name這兩個(gè)變量都屬于requestA-B,此時(shí)他已經(jīng)不存在了。下面是源代碼:
    a.jsp
    <%@ page contentType="text/html; charset=GBK" %>
    <html>
    <body bgcolor="#ffffff">
    <a href="b.jsp?id=1">指向b.jsp,而且還帶了一個(gè)參數(shù)id=1。requestA-B現(xiàn)在誕生了</a>
    </body>
    </html> 

    b.jsp
    <%@ page contentType="text/html; charset=GBK" %>
    <html>
    <body bgcolor="#ffffff">
    <%
    out.println("id=" + request.getParameter("id"));
    request.setAttribute("name","Func Real");
    out.println("name=" + request.getAttribute("name"));
    %>
    <a href="c.jsp?age=23">requestA-B已經(jīng)結(jié)束了。指向c.jsp,而且還帶了一個(gè)參數(shù)age=23</a>
    </body>
    </html> 

    c.jsp
    <%@ page contentType="text/html; charset=GBK" %>
    <html>
    <body bgcolor="#ffffff">
    <%
    out.println("id=" + request.getParameter("id"));
    out.println("name=" + request.getAttribute("name"));
    out.println("age=" + request.getParameter("age"));
    %>
    </body>
    </html> 

      那么轉(zhuǎn)發(fā)又是怎么回事呢?現(xiàn)在增加一個(gè)頁面叫做d.jsp,并且在c.jsp中</body>前面增加一句<jsp:forward page="d.jsp"/>
    d.jsp
    <%@ page contentType="text/html; charset=GBK" %>
    <html>
    <body bgcolor="#ffffff">
    requestB-C的魔爪已經(jīng)伸到了d.jsp頁面
    <%
    out.println("age=" + request.getParameter("age"));
    %>
    </body>
    </html>
    運(yùn)行程序,你會(huì)發(fā)現(xiàn)c頁面中的內(nèi)容沒有顯示出來,因?yàn)閒orward是自動(dòng)執(zhí)行的,地址欄中雖然是c.jsp但實(shí)際上,但瀏覽器中顯示的已經(jīng)是d.jsp的內(nèi)容了,而且看到了從b.jsp傳過來的參數(shù)。你可以簡(jiǎn)單得這樣理解:轉(zhuǎn)發(fā),就是延長(zhǎng)了requestB-C的作用域,<jsp:forward page="d.jsp"/>,這一句話實(shí)際上是把c.jsp和d.jsp粘到了一起,他們就像是在一個(gè)頁面中。
    如果你用過struts,那么你就知道為什么在Action中,最后一句幾乎總是mapping.findForward("xxx");了。因?yàn)槲覀冊(cè)谶@個(gè)Action中設(shè)置的請(qǐng)求作用域的變量都將會(huì)在下一個(gè)頁面(也許是另一個(gè)Action)中用到,所以要用轉(zhuǎn)發(fā)。 

    總結(jié):
    用重定向和轉(zhuǎn)發(fā)不是一個(gè)習(xí)慣問題。而是什么情況下必須用什么的問題。

    主站蜘蛛池模板: 免费在线精品视频| 免费v片在线观看视频网站| 国产美女无遮挡免费视频| 亚洲一级高清在线中文字幕| 久久aⅴ免费观看| 亚洲AV无码一区二区乱孑伦AS| 足恋玩丝袜脚视频免费网站| 中文字幕亚洲图片| 在线观看免费黄网站| 国产亚洲精品一品区99热| 特级av毛片免费观看| 亚洲黄黄黄网站在线观看| 免费的黄网站男人的天堂| 亚洲欧洲一区二区三区| 岛国精品一区免费视频在线观看| 免费视频一区二区| 国内精品久久久久久久亚洲| 国产亚洲精品美女久久久久久下载| 日本道免费精品一区二区| 亚洲av午夜福利精品一区人妖| 亚洲精品456人成在线| 成年女人免费视频播放77777| 亚洲av综合av一区| **实干一级毛片aa免费| 亚洲看片无码在线视频| 免费A级毛片无码A∨男男| 成av免费大片黄在线观看| 亚洲激情在线视频| 国产va免费精品观看精品| 亚洲av无码一区二区三区人妖| 日韩精品无码专区免费播放| 亚洲日日做天天做日日谢| 午夜亚洲国产成人不卡在线| 免费看搞黄视频网站| 亚洲日韩乱码中文无码蜜桃| 国产成人无码a区在线观看视频免费| 国产精品亚洲四区在线观看| 亚洲第一页综合图片自拍| 1000部夫妻午夜免费| 色婷婷六月亚洲综合香蕉| 亚洲av不卡一区二区三区|