request和轉發

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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章