百万级为单位的参数长度的前端传递及后端解析

        最近遇到了一个问题,前端的一个多选功要往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");

扫描二维码关注公众号,回复: 2408773 查看本文章

        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了。

        老天爷保佑,终于可以开心的玩耍了!!!


猜你喜欢

转载自blog.csdn.net/dd2016124/article/details/80528317
今日推荐