最近遇到了一个问题,前端的一个多选功要往java后台传递的参数字符串长度相当大,每个选项的参数字符串长度都有200多万,不说多了,就算只选5条数据进行处理,所要传递的参数长度已然超过1000万了。
对于IE浏览器(现在用的是IE11)而言,用普通的请求方式所支持的最大参数长度只有2038个字节,这么长的参数IE很定会报错的。没办法,所以只能用ajax的post方式传递了。
但随之而来的问题是,后台已然接收不到参数,为什么?百思后得解,post虽然对参数长度没有限制,但是tomcat却对参数长度有限制,默认情况下,长度为209万多,具体记不清了。
没办法,只能对tomcat中的配置文件(tomcat下conf文件夹中的server.xml文件)进行修改,按照网上说的,将文件中的maxPostSize属性值改为0。
于是便很开心的进行测试了,却测的一脸懵逼。因为重启服务器后,发现系统竟然登录不了了。懵逼了一会后才发现,我擦,post不能用了,这是为何?
没办法,只好去查了Tomcat8的API,才发现我被网上的某某某给误导了,将tomcat的maxPostSize属性值改为0,确切地说也不算错,但是那是对于tomcat7而言的,将tomcat8的maxPostSize改为0后,我的系统可就歇菜了。
于是乎,按照API上的指示,将tomcat8配置文件中的maxPostSize属性改为小于0的值(我用的是-1),至此,参数终于可以传到后台了,阿弥陀佛,老天爷保佑!
接着,我便开心的去后台处理参数了,因为参数里有不少逗号(,),这里的参数是用星号(*)分隔的,String xx = request.getParameter("xxx"); String[] xxxx = xx.split("*");
我又懵逼了!参数长度太长了,用split方法根本分隔不了上千万长度的字符串,苦思冥想,写了一段逻辑代码,分享给大佬们:
注:这里的x1是个正常的小长度参数字符串,其分隔出的数组长度与s的长度相同。
String x1 = request.getParameter("x");
String x2 = x1.split(",");
String s = request.getParameter("xxx"); //长字符串参数
String[ ] x4= new String[x2.length] ;for(int w = 0;w<x2.length;w++){
if(x2.length!=1){
if(s.indexOf("*") != -1){
x4[w] = s.substring(0, s.indexOf("*"));
s = s.substring(s.indexOf("*")+1, s.length());
}else{
x4[w] = s;
}
}else{
x4[w] = s;
}
}
至此,就可以遍历x4l了。
老天爷保佑,终于可以开心的玩耍了!!!