首页
学习
活动
专区
工具
TVP
发布

Java ServletRequest 对象的一些必备的实用技巧

1. 前言

是我们搞经常接触的。有些时候我们要经常对其进行一些操作。这里列举一些经常的难点操作。

2. 提取 body 中的数据

前后端交互我们会在中传递数据。我们如何从中提取数据。通常我们会通过操作:

看起来比较凌乱,各种异常处理,开关操作,很不优雅。如果你使用了Java 8你可以这样简化这种操作:

提供了获取 Java 8 Stream 流的方法,我们可以通过以上方法非常方便的获取中的

3. ServletRequest 中的流是一次性的

不要以为上面的读取操作是完美无瑕的,这里有一个坑。如果按照上面的操作 中的 只能读取一次。我们传输的数据都是通过流来传输的。中我们实际上都是通过:

来获取输入流,然后通过系列方法来读取。中的方法内部有一个, **它的作用是标志当前流读取到的位置,每读取一次,位置就会移动一次,如果读到最后,方法会返回,标志已经读取完了,如果想再次读取,可以调用方法,就会移动到上次调用的位置,默认是,所以就能从头再读了。能否是有条件的,它取决于,方法返回是否可以进行。

我们再回头看,其实现并没有重写方法并不支持。所以中的只能读取一次 。

4. 可重复读取 ServletRequest 中的流

如果我们使用了个多个进行链式调用并多次操作中的流应该怎么做?我们可以通过提供的来对其进行包装。步骤必须为

先包装,包装类不能进行IO操作。

然后操作被包装的类进行流操作。

传递 包装类

以下是在一个中的标准范例:

5. 如何对 ServletRequest 进行 setParameter()

从前台传入数据的时候、后台通过中的方法对数据进行获取。如果后台想将数据放进去,下次请求或者其他请求时使用,只能通过放入然后从获取, 无法通过获取。我在 Spring Security 实战干货:玩转自定义登录 就遇到了这个问题

首先说一下是在数据从客户端到服务端之后才有效的,而 则是服务端内部的事情,只有在服务端调用了之后,并且没有重定向(),在没有到客户端之前才有效。

如果希望在服务端中转过程中使用 setParameter() ,我们可以通过委托给来执行。相关实现依然通过来实现。

你也可借鉴思路实现其它你需要的功能。

6. 总结

今天我们对的一些常用的操作进行了讲解。也是我们经常在实际开发中遇到的一些问题。当然你也可以使用一些第三方包来解决这些问题。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191024A0B1W300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券