請求轉發與重定向的區別
阿新 • • 發佈:2022-04-04
請求轉發
請求轉發是服務端的一種請求方式,相當於在服務端中直接請求某個資源。
RequestDispatcher rd=request.getRequestDispatcher("/demo1.jsp");
rd.forward(request,response);
//簡寫方式
request.getRequestDispatcher("/demo1.jsp").forward(request,response);
請求轉發與重定向的區別
- 請求轉發對於客戶端瀏覽器而言是在一次請求與響應中完成,而重定向是在兩次請求兩次響應中完成。
- 請求轉發並不會改變客戶端瀏覽器的位址列中的內容(不會改變URL)。而重定向會改變客戶端瀏覽器位址列中的內容(會改變URL)。
- 請求轉發可以使用request物件傳遞資料,而重定向不能使用request物件傳遞資料。
- 如果是處理的DML(查詢)操作,建議使用重定向方式為客戶端瀏覽器產生響應,可以解決表單重複提交現象。
在Servlet中獲取客戶端瀏覽器所支援的語言,並通過JSP頁面將客戶端瀏覽器所支援的語言響應給客戶端瀏覽器
servlet編寫:
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;
/**
* 在Servlet中獲取客戶端瀏覽器所支援的語言,
* 並通過JSP頁面將客戶端瀏覽器所支援的語言響應給客戶端瀏覽器
*/
@WebServlet("/language")
public class LanguageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//獲取請求頭中所支援的語言
String header=req.getHeader("Accept-Language");
//將資料存放到request物件中
req.setAttribute("header",header);
//請求轉發,跳轉到showMsg.jsp頁面
req.getRequestDispatcher("showMsg.jsp").forward(req,resp);
}
}
JSP編寫:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
String header=(String) request.getAttribute("header");
%>
<font color="#663399">
<%=header%>
</font>
</body>
</html>
/**
* 在Servlet中獲取客戶端瀏覽器所支援的語言,
* 並通過JSP頁面將客戶端瀏覽器所支援的語言響應給客戶端瀏覽器
*/