加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

groovy:groovyservlet 乱码问题,解决

发布时间:2020-12-14 17:05:35 所属栏目:大数据 来源:网络整理
导读:配置好groovyservlet就可以开始用groovy脚本写网站程序了. 真的很方便, 边写边调试,性能也挺好 ,比PHP强多了. 不足的就是 java比较消耗内存. ? 可是有一个问题不爽,好在我已经解决了: groovy脚本里写了中文,就会出现乱码.(容器是Tomcat 6.1.6) 如果把文件保

配置好groovyservlet就可以开始用groovy脚本写网站程序了. 真的很方便,边写边调试,性能也挺好 ,比PHP强多了. 不足的就是 java比较消耗内存.

?

可是有一个问题不爽,好在我已经解决了:

groovy脚本里写了中文,就会出现乱码.(容器是Tomcat 6.1.6)

如果把文件保存为UTF-8不代BOT 貌似有时可以正常;

如果把文件保存为UTF-8带BOT,直接就不能运行了;

如果把文件保存为GBK,首次访问时会乱码,修改一次后被scriptEngine发现后,居然就不乱码了!

?

(另外,如果把容器换成resin 4,UTF-8带BOT是可以正常运行的,看来问题与tomcat还是有些关系;不过,resin不熟悉,貌似必须安装成系统服务,而且控制台也不知道在哪里)

?

几经调试,我已经解决了这个问题:

修改这个文件

D:repogroovygroovy-1.7.2srcmaingroovyutilGroovyScriptEngine .java

(D:repogroovygroovy-1.7.2是groovy 1.7.2的源代码)

的如下部分:

    public Class loadScriptByName(String scriptName) throws ResourceException,ScriptException {
		URLConnection conn = rc.getResourceConnection(scriptName);
        String path = conn.getURL().getPath();
        ScriptCacheEntry entry = scriptCache.get(path);
        Class clazz = null;
        if (entry!=null) clazz=entry.scriptClass;
        if (isSourceNewer(entry)) {
            try {
                String encoding = conn.getContentEncoding() != null ? conn.getContentEncoding() : "UTF-8";
                //clazz = groovyLoader.parseClass(DefaultGroovyMethods.getText(conn.getInputStream(),encoding),conn.getURL().getPath());
				clazz = groovyLoader.parseClass(DefaultGroovyMethods.getText(conn.getInputStream()),conn.getURL().getPath());
				System.out.println(String.format("GroovyScriptEngine:(%s)脚本有更新,重新装载...",scriptName));
            } catch (IOException e) {
                throw new ResourceException(e);
            }
        }
        return clazz;
    }

System.out.println(String.format("GroovyScriptEngine:(%s)脚本有更新,重新装载..." ,scriptName));?

这一行,是我加进去的,起个调试的作用.

上一行就是修改过的;

再上一行就是原来的.

?

很简单,就是把encoding参数去掉就行了. 因为getText默认就是按系统本地编码来做的.

?

外国佬本来是想把它做成兼容双字节的,可惜估计他们自己也没去测试,或者根本不知道怎么输入汉字来测试,结果反而不能很好地支持汉字. 我这一改,省事了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读