极易混淆,究极辨析:1) get请求与post请求 及 2) 转发与重定向

一、GET & POST

相同

都是HTTP请求方式

差异

1、安全性

get 请求数据会以键值对的形式被 “?” 或 “&” 符号键隔开,且直接追加URL显示在地址栏,安全性差,还有可能造成Cross-site request frogery攻击,同时URL编码格式采用ASCII码,而非uniclde,即所有的非ASCII字符都要编码之后再传输;

post 请求数据不直接展示在地址栏,会把请求的数据放置在HTTP请求包的包体中,但也不是绝对安全,在浏览器调试工具 - 网络 仍可以看见解析度请求数据

2、传输大小

在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。

但是在实际开发过程中,对于 get 请求,特定的浏览器和服务器对URL的长度有限制

post 请求由于不是URL传值,理论上不会受限,但实际各服务器会规定对其提交的数据大小进行限制,Apache、IIS都有各自的配置。

补充

1) 设置编码格式

get:1、String s=new String(变量名.getBytes("ISO-8859-1"),"UTF-8");( 不常用 )
2、在 tomcat8.0 后自动设置 \conf\server.xml 的 <Connection / > 标签 URIEncoding 属性

post:在接收数据前,设置req.setCharacterEncoding("utf-8");

tips】 后续通过过滤器(Filter)设置所有请求的编码格式,在servlet执行前后都会进行过滤

2) 数据提交方式

get:表单提交 / <a>标签 / 地址栏直接拼接 / JS

post:表单提交


二、转发 (getRequestDispatcher) & 重定向 (setRedirect)

转发

  • 由request 请求对象调用
  • 一次请求,一次响应,数据会保存
  • 可以获取到 request.setAttribute() 的数据
  • 地址栏不会改变,仍是发生请求的地址(若是表单提交,会变成action属性值)

重定向

  • 由response 响应调用
  • 两次请求,两次响应,所以数据会丢失,即重定向的页面不会接收到原先页面传递的数据。采用JS的 location.href 强制跳转页面的方式传输数据,同样会丢失数据
  • 无法获取到 request.setAttribute() 的数据
  • 地址栏改变,为跳转到的页面地址

三、补充

参考:getParameter和getAttribute区别(超详细分析)

两者都是 request 对象关于数据获取的方法,区别在于:

getParameter()

  1. 得到的是浏览器请求给服务器端的数据,像表单提交,按钮点击等
  2. 不能获取 req.setAttribute() 数据(且没有setParameter() 方法)
  3. 数据类型永远为字符串

getAttribute()

  1. 得到的是服务器内部传输的数据,像跳转页面等
  2. 可获取 req.setAttribute() 的数据
  3. 数据类型可以是任意类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值