一直使用tomcat6,最近换了tomcat7,发现以前tomcat6下显示正常的好多jsp页面出现了乱码,请看下面这个jsp页面(假设名字为test.jsp):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
这是一个jsp页面。
</body>
</html>
其中【这是一个jsp页面。】在tomcat6下显示是正常的,但换了tomcat7或8,就是乱码。
经过仔细研究发现,【<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">】这句话到了tomca7后的版本无效了,不能使浏览器正确的做出编码选择导致的。最简单的验证,把test.jsp改为test.html,tomcat7下立刻就正常了。
这说明,tomcat7以后的版本不知出于什么原因导致了【<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">】失效,如想避免乱码,则必须加上【<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>】这句话。
试了filter(其实知道也没用)各种方案,发现只能通过添加【<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>】这句话才能避免乱码,郁闷。因为这样无法使用变量(如EL表达式)来表示UTF-8,如【<meta http-equiv="Content-Type" content="text/html; charset=${encoding">】丧失了灵活性。【<%@ ... %>】内无法使用任何标签语言,包括EL表达式。
不知道大家遇到这个问题没有,不信的可以亲自试一下,我真的很怀疑这是tomca7以后版本的一个bug,否则这是出于什么目的呢?求释疑。谢谢!