SSM框架本地测试没有问题,线上报错问题解决方案

来源:互联网 发布:vb取整函数函数 编辑:程序博客网 时间:2024/06/08 05:21

前两天在使用SMM框架做接口时,在本地使用Postman测试完全没有问题,于是就把工程打包到了服务器上,结果在调用接口时发现想要的数据一直没有返回:经过检查,我发现最大的问题有可能是因为传入的参数中含有中文的缘故,经过修改验证后成功返回数据;
我们在使用中不可避免的要使用中文字符传递参数,于是查阅资料发现,这是因为服务器乱码问题,修改tomcat下的conf/server.xml文件,找到Connector标签,添加useBodyEncodingForURI=”true”,如下代码

<Connector port="8080" useBodyEncodingForURI="true" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />

对于 URL 提交的数据和表单中 GET 方式提交的数据,在接收数据的 JSP 中设置 request.setCharacterEncoding 参数是不行的,因为在Tomcat5.0 中,默认情况下使用ISO-8859-1 对 URL 提交的数据和表单中 GET 方式提交的数据进行重新编码(解码),而不使用该参数对 URL 提交的数据和表单中 GET 方式提交的数据进行重新编码(解码)。
要解决该问题,应该在 Tomcat 的配置文件的 Connector 标签中设置useBodyEncodingForURI 或者 URIEncoding 属性,其中 useBodyEncodingForURI 参数表示是否用request.setCharacterEncoding 参数对 URL 提交的数据和表单中 GET 方式提交的数据进行重新编码,在默认情况下,该参数为 false (Tomcat4.0 中该参数默认为true );
URIEncoding 参数指定对所有 GET 方式请求(包括 URL 提交的数据和表单中 GET 方式提交的数据)进行统一的重新编码(解码)的编码。URIEncoding 和 useBodyEncodingForURI 区别是,URIEncoding 是对所有 GET 方式的请求的数据进行统一的重新编码(解码),而 useBodyEncodingForURI 则是根据响应该请求的页面的request.setCharacterEncoding 参数对数据进行的重新编码(解码),不同的页面可以有不同的重新编码(解码)的编码。
所以对于 URL 提交的数据和表单中 GET 方式提交的数据,可以修改 URIEncoding 参数为浏览器编码或者修改 useBodyEncodingForURI 为true ,并且在获得数据的 JSP 页面中 request.setCharacterEncoding参数设置成浏览器编码。

0 0