請求轉發
目的:将頁面請求轉發到其他頁面
實作:
第一步:
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位址會改變