Javax.servlet.RequestDispatcher.forward(ServletRequest request, ServletResponse response)
Javax.servlet.http.HttpServletResponse.sendRedirect(String location)
forward
作用于服務(wù)器端,重定向后客戶端瀏覽器地址欄的URL不變,無法通過get方式傳遞參數(shù),不過可以通過HttpServletResponse. setAttribute(key, values)來做:
JDK的DOC中的描述:
Forwards a request from a servlet to another resource (servlet, JSP file, or HTML file) on the server. This method allows one servlet to do preliminary processing of a request and another resource to generate the response.
forward should be called before the response has been committed to the client (before response body output has been flushed). If the response already has been committed, this method throws an IllegalStateException. Uncommitted output in the response buffer is automatically cleared before the forward.
這個(gè)方法允許一個(gè)servlet對一個(gè)請求作完處理后,并使用另一個(gè)資源作響應(yīng)。
forward應(yīng)該在向客戶端發(fā)出響應(yīng)之前被調(diào)用(response的輸出流被刷新之前),如果已經(jīng)向客戶端發(fā)出了響應(yīng),這個(gè)方法將拋出一個(gè) “IllegalStateException”的異常。未發(fā)出響應(yīng)response的輸出緩沖區(qū)在調(diào)用forward會(huì)被自動(dòng)的清空。
得到RequestDispatcher引用的方法:
1、 javax.servlet.ServletContext.getRequestDispatcher(String path)
JDK的DOC中的描述:
The pathname must begin with a "/" and is interpreted as relative to the current context root. Use getContext to obtain a RequestDispatcher for resources in foreign contexts. This method returns null if the ServletContext cannot return a RequestDispatcher.
用的最多,最容易理解的方法,path必須是以“/”開頭,路徑是相對于全局上下文路徑,對應(yīng)于web應(yīng)用的根目錄
2、javax.servlet.ServletRequest.getRequestDispatcher(String path)
JDK的DOC中的描述:
The pathname specified may be relative, although it cannot extend outside the current servlet context. If the path begins with a "/" it is interpreted as relative to the current context root. This method returns null if the servlet container cannot return a RequestDispatcher.
可以是相對地址,以當(dāng)前資源的根目錄,但不能超出當(dāng)前資源根目錄。
可以是以“/”開頭的地址,當(dāng)前root作為根目錄環(huán)境。
2、 javax.servlet.ServletContext.getNamedDispatcher(String name)
JDK的DOC中的描述:
Servlets (and JSP pages also) may be given names via server administration or via a web application deployment descriptor.
得到名為name的資源。
Servlets(也可是JSP 頁面)可能會(huì)有個(gè)給定的名字,該名字是服務(wù)器或者web應(yīng)用的部署描述web.xml提供的。
sendRedirect
工作在客戶端,重定向后客戶端瀏覽器地址欄的URL變?yōu)樾碌馁Y源URL,可以通過get方式傳遞參數(shù)。
JDK的DOC的描述:
Sends a temporary redirect response to the client using the specified redirect location URL. This method can accept relative URLs; the servlet container must convert the relative URL to an absolute URL before sending the response to the client. If the location is relative without a leading '/' the container interprets it as relative to the current request URI. If the location is relative with a leading '/' the container interprets it as relative to the servlet container root.
If the response has already been committed, this method throws an IllegalStateException. After using this method, the response should be considered to be committed and should not be written to.
這個(gè)方法可以接受相對的URL,在發(fā)送響應(yīng)之前servlet容器會(huì)將其轉(zhuǎn)化為絕對的URL。如果相對的URL不以“/”開頭,容器將解釋為是相對當(dāng)前請求的路徑URI,如果是以“/”開頭,則解釋為是相對于servlet容器的更目錄環(huán)境。
注意:如果已經(jīng)向客戶端響應(yīng)了請求,這個(gè)方法將拋出一個(gè)“IllegalStateException”的異常。調(diào)用了這個(gè)方法后,這個(gè)響應(yīng)是否被提交或是否提交完畢。
sendRedirect比較簡單,參數(shù)location就是代表重定向目標(biāo)新資源。
localtion可以有以下幾種情況:
可以是絕對地址,如:http://localhost:8080/servlet/a.jsp
可以是相對地址,相對于當(dāng)前訪問資源的根目錄,如:a.jsp
可以是以“/”開頭的地址,則認(rèn)為是先對該web應(yīng)用的根目錄,如:/a.jsp