久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

jsp中forword和sendRedirect的區(qū)別

 whiskey1122 2009-03-25
jsp中forword和sendRedirect的區(qū)別
 
2007-12-15 17:02

RequestDispatcher是一個Web資源的包裝器,可以用來把當(dāng)前request傳遞到該資源,,或者把新的資源包括到當(dāng)前響應(yīng)中,。RequestDispatcher接口中定義了兩個方法:include/forward

由于<jsp:include>只能指定固定的jsp文件名,不能動態(tài)指定jsp文件名,。我們需要把<jsp:include>翻譯為Java code – RequestDispatcher.include();

用法:
<% request.getRequestDispatcher(filename).include(request, response); />

服務(wù)器端的重定向可以有兩種方式,,一是使用HttpServletResponse的sendRedirect()方法,一是使用RequestDispatcher的forward()方法.

HttpServletResponse.sendRedirect()方法將響應(yīng)定向到參數(shù)location指定的,、新的URL,。location可以是一個絕對的URL,,如response.sendRedirect("http://java.")也可以使用相對的URL,。如果location以“/”開頭,則容器認(rèn)為相對于當(dāng)前Web應(yīng)用的根,,否則,,容器將解析為相對于當(dāng)前請求的URL,。這種重定向的方法,將導(dǎo)致客戶端瀏覽器的請求URL跳轉(zhuǎn),。從瀏覽器中的地址欄中可以看到新的URL地址,,作用類似于上面設(shè)置HTTP響應(yīng)頭信息的實現(xiàn),。

RequestDispatcher.forward()方法將當(dāng)前的request和response重定向到該RequestDispacher指定的資源。這在實際項目中大量使用,,因為完成一個業(yè)務(wù)操作往往需要跨越多個步驟,,每一步驟完成相應(yīng)的處理后,轉(zhuǎn)向到下一個步驟,。比如,通常業(yè)務(wù)處理在Servlet中處理,,處理的結(jié)果轉(zhuǎn)向到一個JSP頁面進(jìn)行顯示,。這樣看起來類似于Servlet鏈的功能,但是還有一些區(qū)別,。一個RequestDispatcher對象可以把請求發(fā)送到任意一個服務(wù)器資源,,而不僅僅是另外一個Servlet。 include()方法將把Request Dispatcher資源的輸出包含到當(dāng)前輸出中,。

注意,,只有在尚未向客戶端輸出響應(yīng)時才可以調(diào)用forward()方法,,如果頁面緩存不為空,,在重定向前將自動清除緩存。否則將拋出一個IllegalStateException異常,。

 

 

RequestDispatcher接口所定義的forward()方法可以將HTTP請求轉(zhuǎn)送給其他Web資源(例如Servlet,、JSP或HTML)進(jìn)行處理,并產(chǎn)生HTTP回應(yīng),。

調(diào)用forward()方法時必須注意下列兩點(diǎn):

1.       在HTTP回應(yīng)被“確認(rèn)”(committed)以前才能調(diào)用forward()方法(這里的“確認(rèn)”是指將HTTP回應(yīng)的內(nèi)容主體送回用戶端),,否則將拋出IllegalStateException異常。

2.       調(diào)用forward()方法后,,原先存放在HttpResponse對象中的內(nèi)容將會自動被清除.


RequestDispatcher接口的include()方法與forward()方法非常類似,,惟一的不同在于:利用include()方法將HTTP請求轉(zhuǎn)送給其他Servlet后,,被調(diào)用的Servlet雖然可以處理這個HTTP請求,,但是最后的主導(dǎo)權(quán)仍然是在原來的Servlet。換言之,,被調(diào)用的Servlet如果產(chǎn)生任何HTTP回應(yīng),,將會并入原來的HttpResponse對象,。

RequestDisPatcher dispatcher=requset.getRequestDisPatcher("/uservlet2)"
這句代碼就是說將當(dāng)前servlet的數(shù)據(jù)轉(zhuǎn)發(fā)到uservlet2這個servlet里
它是服務(wù)器端轉(zhuǎn)發(fā)
一般還要把request和response傳過去
完整用法:
RequestDisPatcher dispatcher=requset.getRequestDisPatcher(""/uservlet2)";
dispatcher.forward(request, response);

還有一個response.sendRedirect("a.jsp")是不傳送數(shù)據(jù)的瀏覽器端轉(zhuǎn)發(fā)

1.RequestDispatcher.forward()

是在服務(wù)器端起作用,當(dāng)使用forward()時,Servlet engine傳遞HTTP請求從當(dāng)前的Servlet or JSP到另外一個Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此時form提交的所有信息在 b.jsp都可以獲得,參數(shù)自動傳遞.

但forward ()無法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同時forward()無法在后面帶參數(shù)傳遞,比如 servlet?name=frank,這樣不行,可以程序內(nèi)通過response.setAttribute("name",name)來傳至下一個頁面.

重定向后瀏覽器地址欄URL不變.

例:servlet文件中重定向
CODE

public void doPost(HttpServletRequest request,HttpServletResponse response)

        throws ServletException,IOException

{

        response.setContentType("text/html; charset=gb2312");

        ServletContext sc = getServletContext();

        RequestDispatcher rd = null;

        rd = sc.getRequestDispatcher("/index.jsp");

        rd.forward(request, response);
}


2.response.sendRedirect()

是在用戶的瀏覽器端工作,sendRedirect()可以帶參數(shù)傳遞,比如servlet?name=frank傳至下個頁面,同時它可以重定向至不同的主機(jī)上,且在瀏覽器地址欄上會出現(xiàn)重定向頁面的URL.

sendRedirect()可以重定向有frame的jsp文件.

例:servlet文件中重定向
CODE

public void doPost(HttpServletRequest request,HttpServletResponse response)

        throws ServletException,IOException

{

        response.setContentType("text/html; charset=gb2312");

        response.sendRedirect("/index.jsp");
}

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多