Servlet的请求转发和请求重定向
请求转发
服务器行为,转发过程在服务器内部执行,客户端不可见,地址栏不会改变。整个过程只涉及到一次客户端与服务器的交互,也就是只涉及到一次请求----响应。在转发的过程中,各组件共享一组请求和响应对象,所以转发之后可以直接获取到之前的相关属性和参数,亦可以通过session或者URL中显式地放入参数来传递属性和参数。

请求重定向
客户端行为,相当于两次请求,客户端地址栏会改变。具体为:客户端向服务器发送请求,服务器servlet处理完成之后会给客户端一个响应,这个响应中只包含重定向的地址,没有包含其他信息。客户端接收到响应返回的location后便向服务器请求location指向的地址,然后服务器再做出响应返回请求地址的数据。所以前后涉及到两个完整的 “请求<---->响应” 过程,由于两次响应并没有携带最初的属性和参数,所以重定向完成之后无法直接获取到最初的属性和参数,非要传值的话只能通过session或者显式地在URL中放入参数,而不能通过request.setAttribute传递。而地址栏改变后显示的地址便是location指向的地址。请求重定向一般在Java Servlet中一般发生在doPost/doGet等方法中。
***请求转发只能在同一应用的组件之间进行(因为转发过程在服务器内部),不能转发给其他应用的组件。而请求重定向可以跳转到任何页面,比如一个外部url ***

比如与下面类似的代码:
protected void xx...xx(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	    
	... ...
	    
	//请求转发
	String forward = "http://www.baidu.com";
	RequestDispatcher rd = req.getRequestDispatcher(forward);
	rd.forward(req, resp);   //404错误
			
	//请求重定向
	//resp.sendRedirect("http://www.baidu.com");    //可以正确跳转
	
	... ...
		
}
It's
欢迎访问本站,欢迎留言、分享、点赞。愿您阅读愉快!
*转载请注明出处,严禁非法转载。
https://www.devsong.org
QQ留言 邮箱留言
头像
引用:
取消回复
提交
涂鸦
涂鸦
热门