Java中实现"请求转发"和"重定向",有什么区别...

本文深入探讨了HTTP中的重定向与请求转发的区别,包括它们在服务器端与客户端的行为差异,以及如何在Servlet与JSP中实现这两种操作。
 

“转发” 和“重定向”的区别 。
    我之前只知道有 重定向 (通过javascript实现,发生在浏览器端,浏览器在得知真正的URL后,跳转了过去, 从后台看,就是又多做了一次 Get请求)

    转发的概念是 服务器端内部完成的, 服务器相当于是一个代理, 来了 客户端的 Get 请求, 他发现要移到别处处理的, 自己内部给自己发起了一个 Get 请求, 然后把那个Get请求的返回值,直接返回了给(外面的) 客户端浏览器

    从 浏览器的角度看, 我只用了一个 Get 请求, 但是请求回来的,已经是完全不同页面的内容了 , 你服务器丫的换了个页面(透明), 怎么不告诉我 ?  

 

在servlet中调用“转发”的语句如下:
request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jsp

在servlet中调用“重定向”的语句
response.sendRedirect("new.jsp");   //重定向到new.jsp

================================
在jsp页面中实现“转发”的语句:
<jsp:forward page="new.jsp" />      //转发到new.jsp

在jsp页面中实现“重定向”的语句:
<%response.sendRedirect("new.jsp"); //重定向到new.jsp%>





    无论是 转发, 还是 重定向, 对于页面内容来说, 都是全部换成新的, 是都是属于全局刷新(非局部刷新)。







 [参考内容:]
    http://blog.youkuaiyun.com/meiyalei/article/details/2129120  
          《HTTP中的重定向和请求转发的区别》


    http://blog.sina.com.cn/s/blog_7ba68f520100rqkh.html
          《ActionForward详细介绍》

`

Java请求转发重定向存在多方面的区别: ### 行为主体 请求转发是服务器端的行为,服务器端代替客户端发送请求,并将结果返回给客户端;而请求重定向是客户端的行为,当客户端收到服务器的重定向响应后,会重新向新的URL发送请求[^1]。 ### 地址栏显示 请求转发时,客户端浏览器的地址栏不会发生变化,用户看到的仍然是最初请求的URL;重定向时,地址栏会显示重定向后的新URL。例如,使用请求转发实现代码如下: ```java public class ServletDemo2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context = this.getServletContext(); System.out.println("进入了请求转发"); RequestDispatcher requestDispatcher = context.getRequestDispatcher("/GP"); requestDispatcher.forward(req, resp); } } ``` 在这个例子中,请求转发后地址栏不会改变。而重定向代码如下: ```java public class RedirectServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.sendRedirect("/newUrl"); } } ``` 重定向后地址栏会显示`/newUrl`。 ### 交互流程 请求转发仅发生在服务端程序内部,当服务器收到客户端请求,先将请求转发给目标地址,再将目标地址返回的结果转发给客户端,客户端并不清楚服务端发生的情况,在页面客户端只会看到一个展示结果以及一次的访问;重定向则是客户端先向服务器发送请求,服务器返回重定向响应(状态码302等),客户端再根据响应中的新URL重新发送请求,客户端能感知到请求的跳转[^3]。 ### 数据共享 请求转发过程中,请求对象`HttpServletRequest`响应对象`HttpServletResponse`会被传递给目标资源,所以在转发前后可以通过`request.setAttribute()``request.getAttribute()`方法共享数据;重定向是客户端重新发起请求,原来的请求对象会丢失,不能直接通过请求对象共享数据,若要共享数据可以通过URL参数、会话等方式。 ### 请求次数 请求转发是一次请求,服务器内部进行处理;重定向是两次请求,客户端先请求原URL,再请求重定向后的URL。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值