泰仔在線

          java學(xué)習(xí),心情日記,繽紛時刻
          posts - 100, comments - 34, trackbacks - 0, articles - 0
          java  jsp學(xué)了幾年了,今天突然發(fā)現(xiàn)這些最基礎(chǔ)的東西都還沒有弄清楚,趕緊抽點(diǎn)時間把它記下來,以便以后復(fù)習(xí)!
          1、請求轉(zhuǎn)發(fā)
             請求轉(zhuǎn)發(fā)允許把請求轉(zhuǎn)發(fā)給同一應(yīng)用程序中的其他Web組件。這種技術(shù)通常用于Web應(yīng)用控制層的Servlet流程控制器,它檢查HTTP請求數(shù)據(jù),并將請求轉(zhuǎn)發(fā)到合適的目標(biāo)組件,目標(biāo)組件執(zhí)行具體的請求處理具體的請求處理操作,并生成響應(yīng)結(jié)果。
          o_1.JPG

             Servlet類使用javax.servlet.RequestDispatcher.forward()方法來轉(zhuǎn)發(fā)它所收到的HTTP請求。轉(zhuǎn)發(fā)目標(biāo)組件將處理該請求并生成響應(yīng)結(jié)果,或者將請求繼續(xù)轉(zhuǎn)發(fā)到另一個組件。最初請求的ServletRequest和ServletResponse對象被傳遞給轉(zhuǎn)發(fā)目標(biāo)組件,這使得目標(biāo)組件可以訪問整個請求上下文。值得注意的是,只能把請求轉(zhuǎn)發(fā)給同一Web應(yīng)用中的組件,而不能轉(zhuǎn)發(fā)給其他Web應(yīng)用的組件。
             如果當(dāng)前的Servlet組件要把請求轉(zhuǎn)發(fā)給一個JSP組件,如hello.jsp,可以在Servlet的service()方法中執(zhí)行以下代碼:
                   RequestDispatcher rd = request.getRequestDispatcher("hello.jsp");
                   //Forward to requested URL
                   rd.forward(request, response);
             在JSP頁面中,可以使用<jsp:forward>標(biāo)簽來轉(zhuǎn)發(fā)請求,例如:
                   <jsp:forward page="hello.jsp">
             對于請求轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)的源組件和目標(biāo)組件共享request范圍內(nèi)的共享數(shù)據(jù)。
          2、URL重定向
             請求重定向類似于請求轉(zhuǎn)發(fā),但也有一些重要區(qū)別:
          Web組件可以將請求重定向到任一URL,而不僅僅是同一應(yīng)用中的URL。
          重定向的源組件和目標(biāo)組件之間不共用同一個HttpServletRequest對象,因此不能共享request范圍內(nèi)的共享數(shù)據(jù)。
          o_2.JPG

             
             如果當(dāng)前應(yīng)用的Servlet組件要把請求轉(zhuǎn)發(fā)給URL"
          response.sendRedirect("http://jakarta.apache.org/struts");
             HttpServletResponse的sendRedirect()方法向瀏覽器返回包含重定向的信息,瀏覽器根據(jù)這一信息迅速發(fā)出一個新HTTP請求,請求訪問重定向目標(biāo)組件。
          3、包含
             包含關(guān)系允許一個Web組件聚集來自同一個應(yīng)用中其他Web組件的輸出數(shù)據(jù),并使用被聚集的數(shù)據(jù)來創(chuàng)建響應(yīng)結(jié)果。這種技術(shù)通常用于模板處理器,它可以控制網(wǎng)頁的布局。模板中每個頁面區(qū)域的內(nèi)容來自不同的URL,從而組成單個頁面。這種技術(shù)能夠為應(yīng)用程序提供一致的外觀和感覺。包含關(guān)系的源組件和目標(biāo)組件共用同一個HttpServletRequest對象,因此它們共享request范圍內(nèi)的共享數(shù)據(jù)。
          o_3.JPG

             Servlet類使用javax.servlet.RequestDispatcher.include()方法包含其他的Web組件。例如,如果當(dāng)前的Servlet組件包含了三個JSP文件:header.jsp、main.jsp和footer.jsp,則可以在Servlet的service()方法中執(zhí)行以下代碼:
          RequestDispatcher rd;
          rd 
          = req.getRequestDispatcher("/header.jsp"
          )
          rd.include(req,res);
          rd 
          = req.getRequestDispatcher("/main.jsp"
          )
          rd.include(req,res);
          rd 
          = req.getRequestDispatcher("/footer.jsp"
          )
          rd.include(req,res);
             在JSP文件中,可以通過<include>指令來包含其他的Web資源,例如:
          <%@ include file="header.jsp"%>
          <%@ include file="main.jsp"%>
          <%@ include file="footer.jsp"%>
             <來自孫衛(wèi)琴----精通 Struts :基于 MVC 的 JavaWeb 設(shè)計與開發(fā)>
          主站蜘蛛池模板: 江源县| 修水县| 平江县| 华亭县| 双城市| 惠水县| 抚州市| 广河县| 宝山区| 荣昌县| 太原市| 沁源县| 冀州市| 嘉定区| 临桂县| 社旗县| 济南市| 恩平市| 砀山县| 柳河县| 洛南县| 云安县| 辽宁省| 花莲县| 九台市| 青海省| 肥城市| 泰和县| 迭部县| 巢湖市| 江川县| 方山县| 桂阳县| 绵阳市| 门头沟区| 农安县| 武夷山市| 合川市| 民乐县| 黄龙县| 民勤县|