resin出现:illegal utf8 encoding at (190)问题的分析

栏目:Web开发 作者:admin 日期:2015-04-12 评论:0 点击: 4,676 次

最近在项目开发中,出现了编码异常,内容如下:
- illegal utf8 encoding at (190)
com.caucho.jsp.JspParseException: illegal utf8 encoding at (190)
at com.caucho.jsp.JspCompilerInstance.compile(JspCompilerInstance.java:434)
at com.caucho.jsp.JspManager.compile(JspManager.java:242)
at com.caucho.jsp.JspManager.createPage(JspManager.java:171)
从出错的信息,感觉是编码出现问题。所以查看文件的编码,分为两个部分:
第一个就是jsp的声明部分:<%@ page language="java" pageEncoding="UTF-8"%>
第二个就是在eclipse中查看文件的属性,Text file encoding 为 default(UFT-8)
综上所述,没有发现错误现象。个人感觉:虽然异常字面上理解是编码异常的问题,其实并不一定真的是编码问题,因为我发现一个奇怪的现象:
第一次打开页面的时候会出现这种异常,但是重新刷新页面,反而没有问题。
所以,结合我以前读resin源码的经验来分析,我觉得是内存的字节数据出现了混乱,导致了编码问题。极有可能是我的机子内存不够,导致jsp编译的过程中,没有完全载入jsp文件,导致jsp文件编译过程中出现脏数据,从而出现编码异常问题。带着这样的思路,我去查看resin的配置文件,在resin配置文件中可以调节内存的地方有两处:
一:config文件的:<jvm-arg>-Xmx256m</jvm-arg>,可以调大一点。
二:app-default.xml文件中对jsp页面编译的处理配置如下所示:
<servlet servlet-name="resin-jsp" servlet-class="com.caucho.jsp.JspServlet">
    <init>
      <load-tld-on-init>false</load-tld-on-init>
      <page-cache-max>1024</page-cache-max>
    </init>
    <load-on-startup/>
</servlet>
通过调节上面jvm的大小或者页面的缓存大小,从而控制内存,最终解决了resin的编码问题。

resin出现:illegal utf8 encoding at (190)问题的分析:等您坐沙发呢!

发表评论