1. 程式人生 > >servlet 重定向(八)

servlet 重定向(八)

except string 瀏覽器 set rri 應用 javax 對象 意思

1.重定向是什麽?

  這裏說的重定向是由http協議規定的一種機制。其工作流程如下所述。

  (1)客戶端發起http請求,訪問服務器端組件。

  (2)服務器端返回一個狀態代碼為302的響應結果。該代碼的意思是讓瀏覽器再訪問另一個組件,響應結果中包含著訪問新組件的url地址。新的訪問組件可能在同一個應用中也可能不在同一個應用中。

  (3)當瀏覽器接受到這種結果,會自動訪問新的url.

  (4)瀏覽器端接受新的url返回結果。

2.實現

  重定向通過Servlet API 中HttpServletReponse接口提供的 sendRedirect(String location)方法完成。

3.重定向特點

  3.1 servlet源組件的響應結果不會返回到客戶端。

  3.2 servlet源組件和目標組件不會共享同一個ServletRequest對象。

  3.3 如果源組件在進行重定向前提前提交響應結果,會報異常。

3.4 重定向的地址不必是同一個服務器的應用。

4.案例

Check1Servlet 第一次請求的類
package com.learn;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * Created by Administrator on 2017/09/28. */ public class Check1Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException { String userName = req.getParameter("name"); String message = ""; if(userName == null){ message = "please input your name"; } else { message = userName; } req.setAttribute("mess",message); PrintWriter out = resp.getWriter(); out.print("before redirect "); System.out.println("before redirect"); resp.sendRedirect("out1?mess="+message); out.print("after redirect"); System.out.println("after redirect"); out.close(); } }
Out1Servlet 重定向的類
package com.learn;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Created by Administrator on 2017/09/28.
 */
public class Out1Servlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String mess = (String) req.getAttribute("mess");
        System.out.println("請求範圍內的數據:"+mess);

        mess = req.getParameter("mess");
        System.out.println("請求參數中的:"+mess);

        PrintWriter out = resp.getWriter();
        out.write(mess);
        out.close();



    }
}

頁面輸出結果:

技術分享

控制臺輸出結果:

技術分享

 

  

servlet 重定向(八)