说说我的看法。
首先,我也遇到了和你类似的情况。其次,我检查后发现jsp的代码和html的代码都没有问题。但为什么会出现这样的问题呢?原因就在于我用eclipse来运行html文件是选用打开方式中的web浏览器,也就是下图被选中的部分:
事实上,如果选择这种方式来打开html文件(它里面有一个表单,单击提交按钮后,会将输入框里面的内容传给jsp文件,并在jsp文件中显示出来),那么点击提交按钮后就会得到jsp文件的代码。
但是如果你选择如下图被选中的打开方式:
那么用这种方式打开html文件并跳转到jsp文件后,显示的就不会是jsp的源代码了,而是实际上这段代码将要输出的内容。
在jsp文件中的html显示乱码是因为服务端和客户端的编码不一致导致的。如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。
解决办法:
1、未指定使用字符集编码
下面的显示页面(display.jsp)就出现乱码:
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html charset=gb2312">
</head>
<body>
<%out.print("JSP的中文处理")%>
</body>
</html>
只要在页面开始地方用下面代码指定字符集编码即可,在JSP页面中指定编码方式(gb2312),和浏览器解码方式设置相同,即在页面的第一行加上:
<%@ page contentType="text/htmlcharset=gb2312"%>,就可以消除乱码了。
完整页面如下:
<%@ page contentType="text/htmlcharset=gb2312"%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html charset=gb2312">
</head>
<body>
<%out.print("JSP的中文处理")%>
</body>
</html>
2、 编码字符集设置不一致
<%@ page language="java" pageEncoding="gb2312"%>
<%@ page contentType="text/htmlcharset=iso8859-1"%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html charset=gb2312">
</head>
<body>
<%out.print("JSP的中文处理")%>
</body>
</html>
第一处<%@ page language="java" pageEncoding="gb2312"%>的编码格式为jsp文件的存储格式。Eclipse会根据这个编码格式保存文件。并编译jsp文件,包括里面的汉字。
第二处编码为解码格式。因为存为gb2312的文件被解码为iso8859-1,这样如有中文肯定出乱码。也就是必须一致。而第二处所在的这一行,可以没有。缺省也是使用iso8859-1的编码格式。所以如果没有这一行的话,也会出现乱码。必须一致才可以。
第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这个编码格式用不用设置都可以。有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面,导致浏览器混淆了编码格式出现了乱码。
完整解决代码如下:
<%@ page language="java" pageEncoding="gb2312"%>
<%@ page contentType="text/htmlcharset= gb2312"%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html charset=gb2312">
</head>
<body>
<%out.print("JSP的中文处理")%>
</body>
</html>
第一种:<%
out.println("<table><tr><td></td></tr></table>")
%>
第二种:
由于content中的内容是以HTML形式存储的,所以在页面显示的时候,会将一些HTML标签原封不动的显示出来.查看页面的源代码,发现这些标签已经被解析成了转义符.
为了解决这个问题,在<c:out>标签中有一个escapeXml属性,其默认值为true,即默认是要将HTML标签转化为转义字符,所以在页面中就显示出了HTML标签.
所以,很显然,只要将这个属性值改为flase就可以了:
即<c:out
value="
${
content
}
"
escapeXml="false"
/>