2014-8-1 19:05
Resin#unexpectedend of file in utf8 character解决过程
场景
服务器使用Resin3.0.25,因业务需要修改了一个Jsp文件并部署,客户端无法访问修改的jsp,服务器端出现异常,容器无法编译新上传的jsp文件,异常信息:
unexpected end offile in utf8 character
分析/解决
从字面上理解异常原因应该是文件相关字符编码不对,关于字符编码不对的原因有很多类,如UTF-8 BOM头问题、文件内容与文件头声明的格式不匹配问题等。
顺着字符编码这条线索尝试了多种方式未发现问题,文件字符编码不存在问题但容器编译时的错误信息则给出字符编码异常的线索,尝试分析resin容器源码中有关此问题的部分没有获得非常有价值的信息,这样单存依据编码问题来分析该问题就会陷入僵持。
尝试采用最基本的办法,因为该JSP业务规则主要是充当支付平台的回调入口,对回调信息进行安全验证并将合法信息转发给特定业务系统,不存在很深的业务逻辑实现,所以代码规模很小。
1.尝试vim创建空白与jsp同名文件,客户端可正常访问。
2.尝试加入汉字信息反向验证复现utf8 character异常,未复现。
3.尝试加入原JSP文件文件,问题复现。
4.此时基本可以确定问题原因了,JSP代码实现上有问题。
5.尝试只使用部分JSP代码,发现和确认最终问题。JSP代码问题。
总结
1.resin容器在编译有语法错误的JSP时抛出的异常信息有限,造成定位问题困难。
2.编写JSP时一定要用IDE,不能单纯的vim解决问题,出问题后调试和定位问题耗费很多时间。