问题:
今天小明在生产中碰到了一个问题让他百思不得其解.
具体操作如下:小明照常在公司划水,结果一大领导说你功能有问题.轮播图后台配置的跳转链接点击跳转不了..然后小明心里就慌得一比,赶紧查找问题的根源所在.
众所周知大家查找问题通常是从日志中查找,但是大领导催的急,于是乎 小明直接从数据库入手查看一下大领导配置的那条数据,一看吓了小明一跳,数据已经保存上了,但是有一个字段没有保存.这让小明不得其解.
然后小明就对这种问题一通查找.
最终确定问题所在是,保存的参数因为长度过长其中里面还有多种的不规范字符.再进行保存的时候被后台的数据校验过滤器给校验住
然后这个字段的数据被当成了sql脚本注入信息处理了,是保存不上的.然后被啪啪的打脸.
解决:
问题终于找到了,那就加把劲来解决吧!!解决方案跟经理聊了下.最终经理坚定不让修改后台代码,让我在jsp中进行修改..定下方案后心中有一万头路过.
最终还得找程序员的"百度爸爸"帮忙,于是乎网上个种少操作.
这些少操作被小明还一一实现了,最终结果是全军覆没.
例如:ajax中的传入参数全部修改为json进行传输,但是新的问题又来了,这个json也会被这filter校验住.
还有什么讲ajax中提交添加fromdata什么的,也同样不好使..
最终没办法了于是乎小明去看有关于ajax中类型的定义跟后台request接收方法的对应
总结:request方法
request中获取请求中的参数的方法,
获取所有参数key
request.getParameterNames(); get和post都可用
获取参数value
request.getParameter("test"); get和post都可用
获取请求参数集合
request.getParameterMap(); get和post都可用:
上述的这几种方法都不适用ajax中 contentType为multipart/form-data
这也就是小明所困扰的:明明在ajax中已经传递的参数,但是为什么后台接受不到的问题,是因为公司系统的规则:jsp中的数据都是文件形式和二进制流的方式进行传输到后台.所以ajax中contentypt属性必须设置为multipart/form-data.
知道这个就好修改了..
然后就是查询request的API找到了在ajax中contentype为multipart/form-data类型的请求包体都需要通过流的的方式进行读取
获取文本流
request.getInputStream() 适用于如:application/json,xml,multipart/form-data文本流或者大文件形式提交的请求
于是乎小明就在后台写了一个最基础的读取流信息,然后将参数进行保存到后台,,
然后运行测试一遍通过,,完美的跟大领导交差了..
小明心里想又可以快乐的混日子了.....