今天在Apache Tomcat中調試jsp程序時遇到一個問題,我發現隨便建一個shtml文件,然後裡面include(包含)一個jsp文件,jsp文件的內容很簡單,直接輸出一段中文字,發現在浏覽器中運行輸出的都是亂碼,當然我的Apache Tomcat中已經開啟了SSI功能,是支持shtml的。於是在網上搜索答案,說在jsp文件的頭部加入一行語句:<%@ page contentType="text/html; charset=gbk"%>,我加了之後依然無效,百思不得其解。最終經過無數次調試後才有結果。
這裡我省略在Apache Tomcat中開啟SSI功能用來支持shtml的方法,詳情請參看本站文章:《開啟Apache Tomcat中的SSI功能(用來支持shtml)》
其實造成shtml文件include jsp文件時中文顯示亂碼的原因不是jsp代碼的問題,問題還是出在Apache Tomcat的配置上,具體的解決方法如下:
1、找到$tomcat/conf/web.xml文件(其中的$tomcat為Apache Tomcat的安裝路徑)
2、用記事本打開web.xml,找到如下代碼:
<servlet>
<servlet-name>ssi</servlet-name>
<servlet-class>
org.apache.catalina.ssi.SSIServlet
</servlet-class>
<init-param>
<param-name>buffered</param-name>
<param-value>1</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>expires</param-name>
<param-value>666</param-value>
</init-param>
<init-param>
<param-name>isVirtualWebappRelative</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>4</load-on-startup>
</servlet>
3、在上面代碼<load-on-startup>4</load-on-startup>的上面加入如下代碼:
<init-param>
<param-name>inputEncoding</param-name>
<param-value>gbk</param-value>
</init-param>
<init-param>
<param-name>outputEncoding</param-name>
<param-value>gbk</param-value>
</init-param>
代碼中的gbk可根據你實際情況來改變,因為我的網頁都是使用的gbk編碼,所以這裡我用gbk;如果你的網頁使用的是utf-8編碼,那你設置成utf-8即可。
4、重啟Apache Tomcat即可。