程序部署到window上可以成功运行,但是部署到linux上报错。显示异常如下图:
根据研究,最终得出结果是因为跳转时的地址有问题。
所以如果遇到此异常,应该先研究即将跳转的地址是否有问题。
应该是window系统兼容这些错误,但是linux中对地址要求更为严格。
比如我目前遇到此异常的几种情况及相关解决方式。
1.上传时使用button和onclick
function upload(){
var f=document.getElementById("file").value;
var filepath=document.getElementById("file");
var last=f.substr(f.length-4);
if(last==".xls"){
var form=document.getElementById("form");
form.action="../ser/mastp.jsp?file="+filepath;
form.submit();
}else{
alert('上传文件格式不正确');
}
}
之前错误的地方是
form.action=”../ser/mastp.jsp?file=”+f;
传参数值是上传文件的地址,而传的参数值的正确形式应该是像代码段中所示,是file元素
2.地址中传参带有中文
地址中传递的参数含有中文也遇到了此异常。
将地址中的中文转码的方式:
进行url跳转时可以整体使用encodeURI
例如:Location.href=encodeURI(“http://cang.baidu.com/do/s?word=百度&ct=21”);
一开始遇到中文参数的时候,使用encodeURI()进行了一遍编码,传过去后,发现解码出现问题,解码后中文乱码。通过网上收索得出,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面。因此,需要使用两次encodeURI方法,。
例如encodeURI(encodeURI(“中文”));
第一次是把中文编码成%XY的格式,
第二次是对%XY中的%进行编码,%编码成%25。
整个传参过程基本应该是:encodeURI(encodeURI(“中文”))编码后提交,把最后的编码结果%25XY在传递给处理页面的过程中,浏览器先将URL地址后解码成%XY,然后再把%XY传递给处理页面。
处理页面使用URLDecoder.decode(request.getParameter(“参数名”),”UTF-8”);完成解码。
总的来说就是:
1、汉字出现在URL路径部分的时候不需要编码解码;
2、传递中文参数需要先使用encodeURI进行2次编码;
3、处理参数时需要通过解码才能正确获取参数;
参考资料:https://zhidao.baidu.com/question/135227677105363645.html