天天看點

請求轉發和響應重定向

請求轉發

目的:将頁面請求轉發到其他頁面

實作:

第一步:

RequestDispatcher rd = request.getRequestDispatcher(String path)

第二步:

rd.forward(request,response)

說明:path可以是絕對路徑即以

/

開頭 它被解釋為 相當于目前應用程式的文檔根目錄

也可以是相對路徑不以

/

開頭 它被解釋為相對于目前資源所在目錄

示例:

package com.cq;

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

@WebServlet(name = "LoginServlet",urlPatterns="/LoginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        response.setContentType("text/html;charset = UTF-8");
        PrintWriter out = response.getWriter();

        out.println("<!DOCTYPE html>");
        out.println("<html><body>");
        if("admin".equals(username)&&"admin".equals(password)){
            //out.println("登入成功!歡迎您"+username);
            request.setAttribute("username",username);//存資料
            RequestDispatcher rd = request.getRequestDispatcher("index.jsp");//建立對象
            rd.forward(request,response);//請求轉發
        }else{
            //out.print("對不起!您的使用者名或密碼不正确.");
            RequestDispatcher rd = request.getRequestDispatcher("/login.html");
            rd.forward(request,response);
        }
        out.println("</html></body>");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

           

響應重定向

Servlet接受請求後 不直接向浏覽器發送響應 而是像浏覽器發送一個Location響應頭 告訴浏覽器再次請求别的資源 這稱為響應重定向

實作方式:

sendRedirect(String location)

比如

response.sendRedirect("http://www.baidu.com");

請求轉發與響應重定向差別:

1.請求轉發隻是一次請求 伺服器幫你通路轉發位址(隻能在伺服器内部) 然後響應,而響應重定向是 伺服器告訴浏覽器再次通路别的資源 是以浏覽器會請求兩次 是以請求轉發位址不會變 重定向 url位址會改變

繼續閱讀