工作上遇到的,由于项目比较老,接口入参都是需要从request中拿,所以遇到两个问题:
1)所以当from表单有文件上传又有参数的时候,后台直接request.getparameter();是拿不到form表单里的参数的,所以采用如图方式拿参数:
2)但是把参数放在url里的话,由于项目是要求gbk环境下的(tomcat的url编码设置成gbk了),所以把入参放在url里的话,会产生乱码,而且这个乱码是改不了的,原因是,url链接在游览器传入tomcat的时候,中文会进行url编码(前端页面是utf-8的),编码成有%的那种形式,然后tomcat解码时,由于tomcat设置成gbk,所以tomcat会直接吧url解码成gbk的,所以接口里接收中文参数时是gbk乱码形式的,而且是转不过来的:
// 模拟前端浏览器编码
String url = URLEncoder.encode("中通快递", "UTF-8");
// 模拟tomcat解码
String tomcat = URLDecoder.decode(url, "GBK");
// 模拟接口转码,这样是转不过来的
String name = URLDecoder.decode(tomcat, "utf-8");
转不过来的原因是tomcat直接吧url编码转成gbk,已经丢失字节了,所以接口里怎么转也转不过来UTF-8的,字节已经丢失