Eclipse设置server的编码

来源:互联网 发布:网络市场调研的步骤 编辑:程序博客网 时间:2024/06/16 03:01

Eclipse设置server的编码

最近在开发一些HTML5的界面,H5中界面的数据都是从服务器接口获取,而且我们从服务器获取数据时就涉及到跨域的问题,这样我们就不得不使用了JQuery中的jsonp get请求。http请求如果包含有中文参数,一般我们是通过post请求替代get请求来解决编码问题,但是很抱歉,jsonp 由于其原理的原因只能是get请求。所以对于包含有中文参数的get请求,就得对参数进行url编码,以解决中文编码的问题。如下:

var fullUrl = 'http://127.0.0.1:8080/getUserInfo'var reqData ='{"userName":"中国"}';//有中文的参数reqData = encodeURIComponent(reqData);//url encode utf-8//封装完整的请求的url地址,str参数放请求的json数据fullUrl = fullUrl + '?str=' + reqData + '&r=' + new Date().getTime();console.log('jsonp get请求fullUrl:' + fullUrl);//以下发出js请求            $.ajax({                type: "get",                url: 'http://xxxx:8080/getUserI',                timeout: 10000,                dataType: "jsonp",                jsonp: "jsoncallback",                //jsonpCallback: "success_jsonpCallback",                success: function(data) {                    console.log("result: " + APP.json2Str(data));                    if (data && data.result) {                        if (data.result == '0') { //获取数据成功                            callback_success(data);                        } else {                            var errerTips = '网络请求发生错误,请稍后再试';                            //token异常                            if (data.result == "002" || data.result == "003") {                                APP.refreshAppToken(); //刷新token                                errerTips = data.reason;                            }                            //                            APP.showHttpErrer(errerTips);                        }                    }                },                complete: function(XMLHttpRequest, status) { //请求完成后最终执行参数                    if (showLoadingDialog) {                        APP.dismissLoadingDialog();                    }                    if (status == 'timeout') { //超时,status还有success,error等值的情况                        APP.showHttpErrer('网络请求超时,请稍后再试');                    } else if (status == 'error') {                        APP.showHttpErrer('网络请求发生错误,请稍后再试');                    } else if (status == 'success') {}                  }            });

很明显,上述get请求,我们已经使用encodeURIComponent对参数进行了编码,这样我们服务端servlet接收请求并解析参数时,无需额外的工作就能自动将参数解码。如下:

String  reqStr = req.getParameter("str");//可能str是中文,但是无需额外工作既会自己解码

以下说的就是我踩到的坑。我们的项目打包到阿里云的服务器或者我把项目打包放到本地的tomcat容器发布之后,从H5发出的get请求,就算有中文参数,服务端解析都不会乱码;但是我在eclipse中配置使用的tomcat运行项目,却总是乱码,这让我陷入了沉思,多次检查本地的tomcat已确认编码设置为UTF-8编码。按道理说,eclipse中运行的server依赖了本地tomcat,本地tomcat的编码已经已经在server.xml设置,为何不生效。经过多番折腾,原来才明白eclipse的server虽然依赖了本地tomcat环境,但是只是当做了一个运行的容器,而运行的server却引用了eclipse中server中配置的server.xml文件,并不是本地tomcat中的server.xml文件。
所以,我们找到eclipse中servers下面的server,修改里面的server.xml文件,最终编码问题得以解决:

这里写图片描述

记录一下这个坑,以免以后会重踩!

1 0
原创粉丝点击