servlet 重新導向(八),servlet重新導向

來源:互聯網
上載者:User

servlet 重新導向(八),servlet重新導向

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();    }}

頁面輸出結果:

控制台輸出結果:

 

 

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.