day02(後端實習)重定向和請求
阿新 • • 發佈:2018-12-16
1、簡述重定向和請求轉發的定義
(客戶端行為)重定向的定義:
客戶瀏覽器傳送http請求----》web伺服器接受後傳送302狀態碼響應及對應新的location給客戶瀏覽器–》客戶瀏覽器發現是302響應,則自動再發送一個新的http請求,請求url是新的location地址----》伺服器根據此請求尋找資源併發送給客戶。在這裡location可以重定向到任意URL,既然是瀏覽器重新發出了請求,則就沒有什麼request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑,客戶可以觀察到地址的變化的。重定向行為是瀏覽器做了至少兩次的訪問請求的。
(伺服器行為)請求轉發的定義:
客戶瀏覽器傳送http請求----》web伺服器接受此請求–》呼叫內部的一個方法在容器內部完成請求處理和轉發動作----》將目標資源傳送給客戶;在這裡,轉發的路徑必須是同一個web容器下的url
2、請求抓發和重定義的例子:
前端程式碼:
login_success.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>登入成功33!!!</h1> </body> </html>
login.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="login"> 賬號: <input type="text" name="username"/><br> 密碼: <input type="text" name="password"/><br> <input type="submit" value="登入"/><br> </form> </body> </html>
後端程式碼:
package com.itheima.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String userName = request.getParameter("username");
String password = request.getParameter("password");
if("admin".equals(userName) && "123".equals(password)){
//response.getWriter().write("登入成功");
/*
* 早期的寫法:
* response.setStatus(302);
response.setHeader("Location", "login_success.html");*/
//重定向寫法: 重新定位方向 /根目錄 ,則需要請求至少兩次
response.sendRedirect("login_success.html");
//請求轉發的寫法:只需要請求一次
// request.getRequestDispatcher("login_success.html").forward(request, response);
}else{
response.getWriter().write("登入失敗");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}