×
文章路径: Java

org.apache.tomcat.util.http.parser.TokenMgrError

发表于3年前(May 24, 2015 8:30:46 PM)  阅读 948  评论 0

分类: Java 异常

标签: TokenMgrError setContentType

1、TokenMgrError

前两天同事搭建项目环境,在eclipse部署完启动项目时出现如下报错:

org.apache.tomcat.util.http.parser.TokenMgrError: Lexical error at line 1, column 16. Encountered: "," (44), after : ""

同事环境跟笔者唯一不同的地方就是tomcat使用的版本是7,而笔者使用的是6。

2、错误定位

根据错误提示,定位到报错的代码应该是如下一行:

this.getRespone().setContentType("text/javascript,charset=UTF-8");

text/javascript是在服务器返回json数据时设置,这里同时设置了字符集为UTF-8,两者之间使用的","分隔,就是这个逗号出现了问题。

本来如果是版本出现兼容问题一般也算是常见的,但这句代码是很经典的用法,要说tomcat6支持,tomcat7不支持实在不太可能。后来网上百度,发现基本上这句代码都是使用的";"分隔,于是改成分号分隔,发现tomcat7下不再报错。当时以为是不是逗号和分号都是可以的,而tomcat7只支持分号,因为毕竟项目一直使用的是逗号,没出现过问题,当然都是使用的tomcat6。进一步思考,想想有没有这种可能,逗号其实是错误的,用逗号其实一直没生效,因为项目中同时使用的spring的字符过滤器,继续测试,发现果然使用逗号设置编码并不生效。

3、结论

通过上面的分析,结论就比较明显了。ContentType各属性之间必须使用分号分隔,tomcat6不对ContentType设置的值进行语法检查,而tomcat7则会进行语法检查。

发表评论