request.getRequestDispatcher(url).forward(request,response)是採用請求轉發方式,在跳轉頁面的時候是帶着原來頁面的request和response跳轉的,request對象始終存在,不會重新創建。
【詳細過程:forward 發生在服務器內部, 是在瀏覽器完全不知情的情況下發給了瀏覽器另外一個頁面的response. 這時頁面收到的request不是從瀏覽器直接發來的,可能是在轉頁時己經用request.setAttribute在request裏放了數據,在轉到的頁面就可以直接用request.getAttribute獲得數據了。】
例如:
index.jsp
<body>
<form action="UserServlet">
<input type="text" name="name" /> <input type="submit" value="提交" />
</form>
</body>
UserServlet.java
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
System.out.println(name);
request.setAttribute("age", 20);
request.getRequestDispatcher("/testServlet").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("doPost");
doGet(request, response);
}
}
TestServlet.java
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
System.out.println(name);
request.setAttribute("age", 20);
request.getRequestDispatcher("/testServlet").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("doPost");
doGet(request, response);
}
}
在瀏覽器輸入:
運行結果:
zhangsan
zhangsan
20
doGet