转自:https://www.jianshu.com/p/85feeb30c1ed HttpServletRequest.getInputStream()多次读取问题   背景 使用POST方法发送数据时,我们习惯于把数据包装成json格式.   image.png 有些情况下,我们会在Filter中读取body数据进行数据校验,GET方法获取参数比较简单.对于POST方法,可使用如下方法从request中获取body参数: private String getBody(HttpServletR…
问题:在使用HTTP协议实现应用间接口通信时,服务端读取客户端请求过来的数据,会用到request.getInputStream(),第一次读取的时候可以读取到数据,但是接下来的读取操作都读取不到数据   原因: 1. 一个InputStream对象在被读取完成后,将无法被再次读取,始终返回-1: 2. InputStream并没有实现reset方法(可以重置首次读取的位置),无法实现重置操作:   解决方法(缓存读取到的数据): 1.使用request.session等来缓存读取到的数据,这种…
问题: 一次开发过程中同事在 sptring interceptor 中获取 request body 中值,以对数据的校验和预处理等操作 .导致之后spring 在读取request body 值做数据映射时一直报 request body is null .以此在这通过源码回顾了一下 InputStream read 的方法中的基础知 首先来看看inputStream 中 read() 源码 实现以 ByteArrayInputStream 中源码来查看: 1: inputStream re…
背景 通常对安全性有要求的接口都会对请求参数做一些签名验证,而我们一般会把验签的逻辑统一放到过滤器或拦截器里,这样就不用每个接口都去重复编写验签的逻辑. 在一个项目中会有很多的接口,而不同的接口可能接收不同类型的数据,例如表单数据和json数据,表单数据还好说,调用request的getParameterMap就能全部取出来.而json数据就有些麻烦了,因为json数据放在body中,我们需要通过request的输入流去读取. 但问题在于request的输入流只能读取一次不能重复读取,所以我们在…
业务逻辑,通过filter读取请求的request,获取token,并将token传递后面流程使用 BodyReaderHttpServletRequestWrapper: public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper { private final byte[] body; public BodyReaderHttpServletRequestWrapper(HttpServ…
先吐槽一下UEditor作为一个前端的js类库,非要把4种后端的代码给出来,而实际生产中用的框架不同,其代码并不具有适应性.(通常类似其它项目仅仅是给出数据交互的规范.格式,后端实现就可以自由定制) 接下来还是说各种问题把 1.首先下载其jsp的版本... 然而我并没有用jsp <%@ page language="java" contentType="text/html; charset=UTF-8" import="com.baidu.uedit…
原因:我要收集所有来自前台请求的参数信息,无论在任何地方的.当前请求参数都是json格式,都写在httpservlet的body中.这个只能通过流进行获取.然后问题来了,HttpServletRequest的inputstream只能读取一次.... 解决:重写request的inputstream方法..然后在需要部署应用中加上过滤器,在过滤器中加上这个重写的request的方法,问题解决. 1.读取流信息的工具类:HttpUtil.java /**获取请求Body * * @param re…
问题: 在使用HTTP协议实现应用间接口通信时,服务端读取客户端请求过来的数据,会用到request.getInputStream(),第一次读取的时候可以读取到数据,但是接下来的读取操作都读取不到数据   原因: 1. 一个InputStream对象在被读取完成后,将无法被再次读取,始终返回-1: 2. InputStream并没有实现reset方法(可以重置首次读取的位置),无法实现重置操作: 解决方法(缓存读取到的数据): 1.使用request.session等来缓存读取到的数据,这种方…
摘要: 大家知道, StringMVC中@RequestBody是读取的流的方式, 如果在之前有读取过流后, 发现就没有了. 我们来看一下核心代码: filter中主要做的事情, 就是来校验请求是否合法, 是否有篡改过值. @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {…
问题描述: 在php端用curl post一段json到java springboot.在java端用request.getInputStream()获取到的数据为空. 问题确认: 询问度娘后, 她告诉我: 根据Servlet规范,如果同时满足下列条件,则请求体(Entity)中的表单数据,将被填充到request的parameter集合中(request.getParameter系列方法可以读取相关数据):1 这是一个HTTP/HTTPS请求2 请求方法是POST(querystring无论是…
Java Servlet是与平台无关的服务器端组件,运行于Servlet容器中(如Tomcat),Servlet容器负责Servlet和客户端的通信以及调用Servlet的方法,Servlet和客户端的通信采用“请求/响应”的模式.Servlet可完成以下功能: 1.创建并返回基于客户请求的动态HTML页面. 2.创建可以嵌入到现有HTML页面中的HTML片段. 3.与其它服务器资源(如数据库或基于Java的应用程序)进行通信. 4.接收多个客户端的输入,并将结果广播到多个客户端上,例如,Ser…
1.基于socket的用法 服务器端: 先启动一个服务器端的socket     ServerSocket svr = new ServerSocket(8989); 开始侦听请求 Socket s = svr.accept(); 取得输入和输出 DataInputStream dis = new DataInputStream(s.getInputStream()); DataOutputStream dos = new DataOutputStream(s.getOutputStream()…
当需要通过从浏览器获取一些信息,在许多情况下,最终给到Web服务器后台程序.浏览器使用两种方法将这些信息传递给Web服务器.这些方法是GET方法和POST方法. GET 方法: GET方法将追加到页面请求编码的用户信息.网页和编码信息被分离的?字符如下: http://www . qixoo.com/hello?key1=value1&key2=value2 GET方法是默认的方法,从浏览器的信息传递到Web服务器和它产生出现在浏览器的地址很长的字符串:box.切勿使用GET方法,如果你有密码或…
最近研究了一下IE自带的一些Activex控件,可以比较简单的实现断点续传功能 不过这种方式不推荐,因为安全性较低,而且需要修改客户端注册表,调低ie安全配置 还有就是我比较懒,只打算写个思路和几个关键的api功能 断点续传的基本思路如下: 1.客户端计算文件md5值,发送到服务器端校验: 2.服务器端根据客户端发送过来的md5值来确定文件是否存在,并返回文件大小,这样可以确定断点续传的文件开始位置: 3.客户端根据服务器返回的文件开始位置,开始读取文件块,每读取一块就发送给服务器,发送成功则读…
快来测试测试自己掌握能力吧! 1. class.forname的作用?为什么要用? 1).获取Class对象的方式:类名.class.对象.getClass().Class.forName("类名"); 2).通过Class对象自审 3).动态调用方法 2. 在oracle大数据量下的分页解决方法 页面 DB a:自身特点(limit,rownum,row_num函数) b:ResultSet 数据量少,缓存DB: { r* _2 o: B0 r. V; }9 A 3. mySQl的分…
demo下载地址http://yun.baidu.com/share/link?shareid=4277735898&uk=925574576 1.引用jmeter的jar包 到jmeter的保存目录下lib这个文件夹除了自己加的jar包,全部添加到项目中,并build path…
快来测试测试自己掌握能力吧! 1. class.forname的作用?为什么要用? 1).获取Class对象的方式:类名.class.对象.getClass().Class.forName("类名"); 2).通过Class对象自审 3).动态调用方法 2. 在oracle大数据量下的分页解决方法 页面 DB a:自身特点(limit,rownum,row_num函数) b:ResultSet 数据量少,缓存DB: { r* _2 o: B0 r. V; }9 A 3. mySQl的分…
HttpUrlConnection是java内置的api,在java.net包下,那么,它请求网络同样也有get请求和post请求两种方式.最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内. 在Java中可以使用HttpURLConnection发起这两种请求,了解此类,对于了解soap,和编写servlet的自动测试代码都…
  WEB简介   Web项目 是 B/S结构 浏览器/服务器模式的 浏览器发起请求,服务器作出响应   请求的发起和响应使用HTTP协议进行通讯 所谓协议也就是一种固定格式   而Socket是应用层与传输层的一层编程接口,屏蔽了传输层的细节 所以Web项目也就是通过Socket发送HTTP请求和响应的过程 只不过请求是浏览器发出来的 响应是服务器发出来的   针对于JavaWeb项目,动态响应则是Servlet容器通过调用Servlet进行响应 应用程序员所要做的也就只是编写符合Servle…
jsp基础语法 JSP的组成 静态内容.指令.表达式.小脚本.声明.注释 JSP的生命周期 用户发出index.jsp ,服务端判断是否是第一次请求,若是第一次请求,则tomcat中的JSP引擎中的文件转化成一个servlet,生成字节码文件,并执行jspinit()方法,然后再生成字节码文件,若不是第一次请求,则会直接访问生成字节码文件,解析执行,jspservice()方法就是处理用户请求的. jspservice()方法处理客户端的请求,对于每一个请求,JSP引擎创建新的线程来处理,对于多…
JSP 表单处理 我们在浏览网页的时候,经常需要向服务器提交信息,并让后台程序处理.浏览器中使用 GET 和 POST 方法向服务器提交数据. GET 方法 GET方法将请求的编码信息添加在网址后面,网址与编码信息通过"?"号分隔.如下所示: http://www.w3cschool.cc/hello?key1=value1&key2=value2 GET方法是浏览器默认传递参数的方法,一些敏感信息,如密码等建议不使用GET方法. 用get时,传输数据的大小有限制 (注意不是参…
很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法. 1.GET 方法:GET 方法向页面请求发送已编码的用户信息.页面和已编码的信息中间用 ? 字符分隔,如下所示:http://www.test.com/hello?key1=value1&key2=value2 GET 方法是默认的从浏览器向 Web 服务器传递信息的方法,它会产生一个很长的字符串,出现在浏览器的地址栏中.如果您…
1.zimg的安装部署 最开始的时候是下载zimg的源码安装的,由于zimg依赖项众多,没有安装成功,刚好那期间在学习docker,于是docker search zimg一下,惊奇的发现有zimg镜像. 镜像名:iknow0612/zimg docker pull iknow0612/zimg 运行zimg的方法(开发用,没有该配置,简单的做了图片存储位置的映射,重启后上传的图片还在.docker的实例名称很重要,同一主机的docker容器间通信最好用--link,IP有时候不太稳定) doc…
JSP 表单处理 我们在浏览网页的时候,经常需要向服务器提交信息,并让后台程序处理.浏览器中使用 GET 和 POST 方法向服务器提交数据. GET 方法 GET方法将请求的编码信息添加在网址后面,网址与编码信息通过"?"号分隔.如下所示: //www.w3cschool.cn/hello?key1=value1&key2=value2 GET方法是浏览器默认传递参数的方法,一些敏感信息,如密码等建议不使用GET方法. 用get时,传输数据的大小有限制 (注意不是参数的个数有…
文章大纲 一.JSP 指令二.JSP 动作元素三.JSP 隐式对象四.JSP 客户端请求五.JSP 服务器响应六.JSP HTTP 状态码七.JSP 表单处理八.JSP 过滤器九.JSP Cookie 处理十.JSP Session十一.JSP 日期处理十二.JSP 页面重定向十三.JSP 点击量统计十四.JSP 自动刷新十五.学习资料下载十六.参考文章   一.JSP 指令 JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言.语法格式如下: <%@ directive at…
以下内容引用自http://wiki.jikexueyuan.com/project/jsp/form-processing.html: 当需要从浏览器向Web服务器传递一些信息并最终将信息返回到后端程序时,一定遇到了很多情况.浏览器使用两种方法将此信息传递给Web服务器.这些方法是GET方法和POST方法. 一.GET方法 GET方法发送添加到页面请求的编码用户信息.页面和编码信息是被符号?分开的,如下所示: http://www.test.com/hello?key1=value1&key2…
以下内容引用自http://wiki.jikexueyuan.com/project/jsp/client-request.html: 当浏览器请求一个网页时,它向Web服务器发送大量的信息,信息不能直接阅读,因为这些信息作为HTTP请求标题的一部分行进. 以下是来自浏览器端的重要的标题,在网络编程中将会频繁的使用: 标题 描述 Accept 该标题指定了浏览器或其他客户可以处理的MIME类型.image/png或image/jpeg的值是两种最常见的可能性. Accept-Charset 该标…
ylbtech-JSP-Runoob:JSP 表单处理 1.返回顶部 1. JSP 表单处理 我们在浏览网页的时候,经常需要向服务器提交信息,并让后台程序处理.浏览器中使用 GET 和 POST 方法向服务器提交数据. GET 方法 GET方法将请求的编码信息添加在网址后面,网址与编码信息通过"?"号分隔.如下所示: http://www.runoob.com/hello?key1=value1&key2=value2 GET方法是浏览器默认传递参数的方法,一些敏感信息,如密码…
1.用Microsoft Office Word打开word原件: 2.把需要动态修改的内容替换成***,如果有图片,尽量选择较小的图片几十K左右,并调整好位置: 3.另存为,选择保存类型Word 2003 XML 文档(*.xml)[这里说一下为什么用Microsoft Office Word打开且要保存为Word 2003XML,本人亲测,用WPS找不到Word 2003XML选项,如果保存为Word XML,会有兼容问题,避免出现导出的word文档不能用Word 2003打开的问题]: 4…
Servlet 客户端 HTTP 请求 当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的.您可以查看 HTTP 协议 了解更多相关信息. 以下是来自于浏览器端的重要头信息,您可以在 Web 编程中频繁使用: 头信息 描述 Accept 这个头信息指定浏览器或其他客户端可以处理的 MIME 类型.值 image/png 或 image/jpeg是最常见的两种可能值. Accept-Charset 这个头信息指定…