Eclipse设置server的编码

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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值