1.請求轉發是什么?
答:請求轉發是RequestDispatcher.forword方法;作用是:在服務器端內部將請求轉發給另一個資源,瀏覽器只知道發出請求並得到響應結果,但不知道在服務器程序內部發生了轉發行為。
舉例:別名為“瀏覽器”的人寫信找張三100塊,張三只有50塊,於是張三找李四借了50塊,然后將錢轉給“瀏覽器”。可知,“瀏覽器”只發出一封信和收到一次回復,他只知道錢是張三借給他的,並不知道有一部分是李四的。
2.重定向是什么?
答:重定向是HttpServletResponse.sendRedirect方法;作用:是對瀏覽器的請求直接作出響應,響應的結果就是告訴瀏覽器去重新發出對另外一個URL的訪問請求。
舉例:別名為“瀏覽器”寫信給張三借錢,張三回信說沒錢,讓“瀏覽器”找李四借錢,並將李四的通訊地址告訴“瀏覽器”;於是“瀏覽器”按張三提供的信息給李四寫信借錢,李四收到信后轉錢給“瀏覽器”。可知,“瀏覽器”一共發了兩封信和受到兩次回復,“瀏覽器”也知道借錢給他的是李四。
3.請求轉發和重定向的區別?
答:可分為五大區別:
3.1 目標應用和目錄
請求轉發方法只能將請求轉發給同一個WEB應用中的組件;而重定向方法不僅可以重定向到當前應用程序中的其他資源,還可以重定向到同一個站點上的其他應用程序中的資源,甚至是使用絕對URL重定向到其他站點的資源。
如果傳遞給重定向方法的相對URL以“/”開頭,它是相對整個WEB站點的根目錄;如果創建請求轉發對象是指定的相對URL以“/”開頭,它是相對當前WEB應用程序的根目錄。
3.2 瀏覽器地址
調用請求轉發方法進行請求轉發的訪問過程結束后,瀏覽器地址欄保持初始的URL地址不變;而調用重定向方法進行重定向的訪問過程結束后,瀏覽器地址欄的URL會發生改變,由初始的URL變成重定向的目標URL。
3.3 請求響應過程
請求轉發方法的調用者和被調用者之間共享相同的request對象和response對象,它們屬於同一個請求和響應的過程。而重定向方法的調用者和被調用者使用的是各自的request對象和response對象,它們屬於兩個獨立的訪問請求和響應過程。
3.4 使用場景
對於同一個WEN應用程序的內部資源之間的跳轉,特別是跳轉之前要對請求進行一些前期的預處理,並要使用HttpServletRequest.setAttribute方法傳遞預處理結果,則用請求轉發方法;對於不同WEB應用程序之間的重定向,特別是要重定向到另外一個WEB站點上的資源的時候,都應該用重定向方法。
3.5 客戶端
無論是請求轉發還是重定向,在調用它們之前,都不能有內容已經被實際輸出到了客戶端。如果緩存區中已經有了一些內容,則這些內容將被從緩存區中清除。
3.6 實現方式
3.6.1 在servlet中調用請求轉發,重定向的語句如下:
request.getRequestDispatcher("new.jsp").forword(request,response);//請求轉發到new.jsp
response.sendRedirect("new.jsp");//重定向到new.jsp
3.6.2 在jsp頁面中調用請求轉發,重定向的語句如下;
<jsp:forword page="new.jsp"/>//請求轉發到new.jsp
<%response.sendRedirect("new.jsp");%>//重定向到new.jsp
