1. 程式人生 > >java servlet 幾種頁面跳轉的方法

java servlet 幾種頁面跳轉的方法

在訪問網頁的過程中,頁面自動重新整理、跳轉和重定向是經常用到的,這裡就說說在Java中是如何實現這些功能的!

一、頁面自動重新整理

頁面自動重新整理在股票網站中是經常可以看到的,網頁上顯示股票資料都是時時重新整理的。頁面自動重新整理的實現主要是通過HTTP響應頭告訴瀏覽器多長時間重新整理一次。在JavaWeb中的實現就有兩種方式:一是傳送HTTP響應頭;二是使用<meta>標籤來告訴瀏覽器。實現程式碼如下:

// 方法一:設定HTTP響應頭
response.setHeader("refresh","5");
// 方法二:傳送<meta>標籤
response.getWriter().write(
"<meta http-equiv=\"refresh\" content=\"5\">");

在實現這個方法的同時,我們還可以告訴瀏覽器告訴使用者重新重新整理後開啟一個新的頁面!也就是在瀏覽器端實現頁面跳轉,程式碼如下:

response.setHeader("refresh","5;/RefreshProject/index.jsp");

同時,既然方法二可以在瀏覽器端實現,我們也可以直接在網頁中使用<meta>標籤,內容就是上面方法二的內容一樣的。

二、頁面跳轉和帶值跳轉

頁面跳轉這個必須是在伺服器端實現的。比如說使用者登陸時,根據使用者選擇的登陸型別不同來交給不同的Servlet處理。主要是通過RequestDispatcher

介面物件的forward()方法來實現的,RequestDispatcher介面物件可以通過request物件獲取,需要的Path引數是相對於當前Context的。程式碼如下:

// 傳遞引數
request.setAttribute("myname","Xcoder Studio");
// 頁面跳轉
request.getRequestDispatcher("/index.jsp")
.forward(request, response);

這裡可以看到,通過這個物件我們可以實現帶request、response傳遞,並且可以在傳遞前設定修改request請求。給新的頁面處理。

傳參頁面跳轉:

// 使用response物件的sendRedirect實現客戶端跳轉 // servlet的doGet方法publicvoid doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException { PrintWriter out = res.getWriter(); out.println("Hello world!"); res.sendRedirect("test.do"); // servlet實現跳轉(客戶端跳轉)} 客戶端跳轉不能像目標頁面傳遞引數(如果使用該方法非要向目標頁面傳遞引數的話,可以可以使用session物件將引數值記錄,在此不詳細記錄) 伺服器端跳轉   // 使用RequestDispatcher介面實現伺服器端跳轉,且向目標頁面傳遞引數 publicvoid doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ PrintWriter out = resp.getWriter(); /* * 在servlet中實現伺服器端跳轉,並向跳轉頁面傳遞引數 */ req.setAttribute("name", "haiyun"); // 為request物件新增引數 RequestDispatcher dispatcher = req.getRequestDispatcher("test-04.jsp"); // 使用req物件獲取RequestDispatcher物件 dispatcher.forward(req, resp); // 使用RequestDispatcher物件在伺服器端向目的路徑跳轉

三、頁面重定向實現

頁面重定向就是告訴瀏覽器改訪問目標,類似於傳送一個302響應,告訴瀏覽器去訪問一個新的地址。這個地址是對於瀏覽器的,所以如果是以”/”開頭的話是對於整個域名而言!程式碼如下:

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

 四、重定向與跳轉區別

重定向與跳轉比較直觀的區別就是跳轉在瀏覽器端地址不會改變,而重定向瀏覽器端的地址會改變。

另外就是跳轉的時候我們是可以將客戶端傳送的請求一併傳送給跳轉目標,但是這點對於重定向就不能了!