经过网上搜索和自己的经验, JSP/Servlet 页面的中文显示为乱码的问题可以细分为 5 类:
1. JSP页面显示乱码。
2. Servlet 接收 Form/Request 传递的参数时显示为乱码
3. JSP接收 Form/Request 传递的参数时显示为乱码
4. 用<jsp:forward page="catalog2.html"></jsp:forward> 时页面显示乱码
5. 数据库存取的时候产生乱码。
解决方式:
1. JSP 页面显示乱码的解决方式:
第一种方式 为在页面的开头加上:
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<!-- 这里的 GBK 可以由 gb2312 代替,此处以 GBK 为例。下同 -->
注: 有时候如果不再页面开头加上这句,则页面中无法保存中文字符,并提示:中文字符
在不能被 iso-8859-1 字符集 mapped,这是由于默认情况下, JSP是用 iso-8859-1 来编码的,
可以在 Window->Preferences->General->Content Type 选项下,在右边的窗口选择 Text->Jsp,
然后在下面的 Default Encoding 由默认的 iso-8859-1 改为 GBK ,然后点击 update 即可解决。
然而这 种方式会带来一些问题:由于这一句在其他文件 include 该文件的时候不能被继承,
所以 include 它的文件也需要在文件开头加上这句话, 此时如果用 的是 pageEncoding="gbk"
则会出现问题。类似于 org.apache.jasper.JasperException: /top.jsp(1,1) Page directive: illegal to
have multiple occurrences of contentType with different values (old: text/html;charset=GBK, new:
text/html;charset=gbk).
类似地,如果两个文件一个用的是 gbk,一个用的是 gb2312 也会出现问题。
另一种更好的解决方式为:
在项目的 web.xml 中添加以下片段:
<!-- 下面的代码为解决页面乱码问题而加入 -->
<jsp-config>
<jsp-property-group>
<description>
Special property group for JSP Configuration JSP example.
</description>
<display-name>JSPConfiguration</display-name>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
<page-encoding>GBK</page-encoding>
<scripting-invalid>false</scripting-invalid>
<include-prelude></include-prelude>
<include-coda></include-coda>
</jsp-property-group>
<jsp-property-group>
<description>
Special property group for JSP Configuration JSP example.
</description>
<display-name>JSPConfiguration</display-name>
<url-pattern>*.html</url-pattern>