转发和重定向的区别
转发(Forward)和重定向(Redirect)区别
转发是服务器行为,而重定向是客户端(浏览器)行为
转发(Forward)
转发是通过(Forward)是通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现。RequestDispatcher可以通过HttpServletRequest的getRequestDispatcher()方法获得。
例如:
request.getRequestDispatcher("xxx.jsp").forward(request,response);
重定向(Redirect)
重定向(Redirect)是利用服务器返回的状态码来实现的,客户端浏览器在请求服务器的时候,服务器会返回一个状态码。服务器会通过HttpServletResponse的setStatus(int status)方法设置状态码,如果服务器返回的是301/302,浏览器会重新到新的网址来请求该资源。
细节区别
1. 从地址状态来讲
转发(Forward)是服务器请求资源,服务器直接访问目标地址的URL,获取该URL下的资源将其返回给浏览器进行显示,但是浏览器根本不知道这个资源是从哪里来的,所以url路径将不会发生改变。
重定向(Redirect)是浏览器通过服务器返回的状态字,去新的目标地址中访问该资源,所以浏览器本身是知道该资源的位置,故而URL路径会发生改变,是该资源的路径。
2. 从共享数据来讲
转发(Forward)进行转发和转发到的页面都可以共享该Request中的数据;
重定向(Redirect)不能实现数据的共享。
3. 从应用场景来讲
forward一般用于用户登录时根据角色转发到相应的模块;
redirect一般用于用户注销登录时重定向到主页或者其他网站。
4. 从运行速度来讲
forward效率较高,redirect效率较低。
还没有评论,来说两句吧...