博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
forward与redirect的区别
阅读量:7075 次
发布时间:2019-06-28

本文共 1915 字,大约阅读时间需要 6 分钟。

hot3.png

servlet中常用到的两种转向,之前没注意到这两种转向的区别,现在进行下记录与分享。

1.从地址显示来说

forward是服务器请求资源,比如你转向的地址为2.jsp,这时服务器先自己直接访问2.jsp,把这个地址的内容读出来,然后把这些内容再发给浏览器。所以地址栏还是你访问servlet那个地址栏(如果你用jsp实现地址就不变),它不会变成2.jsp。浏览器不知道这些内容是服务器从地址2.jsp拿过来的。

redirect则相反,是服务端根据逻辑,发送一个状态码高速浏览器重新去请求那个2.jsp地址,所以地址栏显示的是新的URL。

2.从数据共享来说

forward转发页面和转发到的页面可以共享request里面的内容;redirect不能共享数据。

3.从运用地方来说

forward一般用于用户登录时候,根据角色转发到相应的模块(因为这时可能需要共享些数据)。
redirect一般用于用户注销登录时返回主页面和跳转到其他的网站。

4.forward不能跨域访问,redirect可以跨域访问

可能有些读者还不清楚跨域访问的概念。跨域访问就是post/get不是你自己的网站、域名不同的访问。

5.从协议的角度来说

forward的实现与协议无关。从原理上看,forward是container内部在response之前对request的处理。
而redirect方式是利用http协议中的redirect机制让客户发起新的请求,转向新的url。

从这个角度去看两者的区别,自然能很好地解析产生上面四点的不同的原因了。

所以,在处理登录/注销页面的转向时,要注意forward与redirect所带来的不同效果

下面做了一个例子来验证
逻辑如下1.jsp点击登录→servlet①给request写入attribute②进行forward或redirect转向→2.jsp
1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>登录
servlet
public class OutServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		//测试是不是共享request		request.setAttribute("name", "test");		//进行forward转向	//	request.getRequestDispatcher("./2.jsp").forward(request, response);		//进行redirect转向		response.sendRedirect("./2.jsp");					}	public void doPost(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		doGet(request, response);	}}
2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>              My JSP '2.jsp' starting page         

测试是不是共享reques

结果:<%=request.getAttribute("name")%>

转载于:https://my.oschina.net/pacoyang/blog/152053

你可能感兴趣的文章
Android异步加载全解析之引入一级缓存
查看>>
Android 3.1 r1 API中文文档(6)——ImageView
查看>>
C# mouse keyboard monitor
查看>>
局域网内手机播放视频
查看>>
不要做干自己没时间做的事
查看>>
django 添加comments app
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]4.3.5
查看>>
Python操作MySQL数据库
查看>>
IIS 无法识别的属性“targetFramework”---解决之道
查看>>
个人视频发布汇总——教育改变人生
查看>>
Android图表库MPAndroidChart(十一)——多层级的堆叠条形图
查看>>
spring 多数据源一致性事务方案
查看>>
Perceptual Losses for Real-Time Style Transfer and Super-Resolution and Super-Resolution 论文笔记...
查看>>
功能机也不放过,谷歌或为 Chrome 提供非触控模式
查看>>
Changing Vendor on Purchase Order
查看>>
【MySQL】5.7新特性之六
查看>>
一步到位分布式开发Zookeeper实现集群管理
查看>>
如何阅读slow日志
查看>>
Visio中插入公式
查看>>
对于软件生产能解决到痛点的容器技术就是好!Wise2C睿云智合如何运行
查看>>