设为首页 收藏本站
查看: 777|回复: 0

[经验分享] 解決 Tomcat 5.0.x <% include file ... %> 的中文亂碼問題

[复制链接]

尚未签到

发表于 2015-8-12 09:36:30 | 显示全部楼层 |阅读模式
解決 <%@ include  file="/global/topright.html" %> 的中文亂碼問題
要解決這個問題,當然最簡單的就是在每個被  include 的檔案第一行,加上 <%@ page contentType="text/html;charset=big5" %>  這樣一定可以確保中文 jsp 檔不會出現亂碼,只不過,一旦程式修改成這樣的模式,你的程式就無法在舊的 jsp/servlet  container 上執行了,因為舊的規格是不允被 include 檔案中再出現 <%@ page ... %> 這樣的定義的。
況 且,就算你願意為了 Tomcat 5.0.x 特別維護一套不同版本的 Source Code,你會遇到重大的挫折,因為 Tomcat 5.0.x  版在 charset 的設定上,會特別檢查 include 別人的程式與被人 include 的程式,這二個程式中所定義的 charset  是不是一樣,如果不一樣,在編譯時就會產生錯誤。更恐怖的是,竟然還分大小寫,比如說:"big5" "Big5" 這樣的定義,在 Tomcat  的認定上是不同的哦。
假如有一個 Head.jsp,所有程式都會去 include 的檔案,試著在 Head.jsp 中,加上  <%@ page contentType="text/html;charset=big5" %> ,然後再執行,天啊,有人習慣用  "big5", 有人習慣用 "Big5",更有人習慣用 "BIG5",怎麼辦 ? 難道要一支一支程式去改嗎 ? 還是用 UltraEdit 的  Replace in Files,一次全部更正過來 ? 那日後,是不是得規定所有程式設計師統一採用 "Big5" 呢 ?
想想,不 太可行,也太愚蠢了。
正確解決方案
在 Tomcat 5.0.x 中,Tomcat 支援了 JSP 2.0  的規格,同時也支援了部分 J2EE 1.4 的規格,在 J2EE 1.4 的規格中,有關 JSP 的部份,有一個  <jsp-config> 的 XML Tag,這個 XML 區塊用來定義與 JSP 相關的特殊屬性,包含採用的 taglib 與  以下說明的 <jsp-property-group> ,而解決 include 檔中文問題的方法就定義在  <jsp-property-group> 中。
首先,請至你開發的 webapps 的目錄下,找到  WEB-INF\web.xml 檔案,比如說:eip 專案的目錄,就是  $TOMCAT_HOME\webapps\eip\WEB-INF\web.xml。
用文字編輯器開啟 web.xml,將以下這段 xml  head 的定義 copy & replace 到 web.xml:
1
2
3
4
5
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

特別注意,version="2.4",Tomcat 5.0.19  會去偵測這個版本資訊,目前只有 2.4 的才會處理 jsp-config 的參數。
在 web.xml 中,加上以下這個區塊:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<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>Big5</page-encoding>
   <scripting-invalid>false</scripting-invalid>
   <include-prelude></include-prelude>
   <include-coda></include-coda>
   <description>
      Special property group for JSP Configuration JSP example.
   </description>
   <display-name>JSPConfiguration</display-name>
   <url-pattern>*.html</url-pattern>
   <el-ignored>true</el-ignored>
   <page-encoding>Big5</page-encoding>
   <scripting-invalid>false</scripting-invalid>
   <include-prelude></include-prelude>
   <include-coda></include-coda>
</jsp-property-group>
</jsp-config>

這二個區塊的定義,就是告知 Tomcat,在 eip 專案目錄下,所有的  .jsp, .html 檔案,若是沒有定義 contentType="text/html;charset=big5" 時,請採用預設的  "Big5" 字元集去處理,如此一來,你就不須要在每個 include 的檔案第一行加上  contentType="text/html;charset=big5" 了。
想更進一步了解 <jsp-config>  的說明,請參考 http://java.sun.com/xml/ns/j2ee/#oldresources  
web.xml 範例n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>EIP 2E PROJECT</display-name>
<description>EIP 2E PROJECT</description>
<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>Big5</page-encoding>
   <scripting-invalid>false</scripting-invalid>
   <include-prelude></include-prelude>
   <include-coda></include-coda>
   <description>
      Special property group for JSP Configuration JSP example.
   </description>
   <display-name>JSPConfiguration</display-name>
   <url-pattern>*.html</url-pattern>
   <el-ignored>true</el-ignored>
   <page-encoding>Big5</page-encoding>
   <scripting-invalid>false</scripting-invalid>
   <include-prelude></include-prelude>
   <include-coda></include-coda>
</jsp-property-group>
</jsp-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
</web-app>
引自http://www.javaworld.com.tw/jute/post/view?bid=9&id=44041&sty=1&tpg=1&age=-1

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-97783-1-1.html 上篇帖子: 在tomcat中配置连接池 下篇帖子: eclipse tomcat server
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表