ゞ沉默是金ゞ

          魚(yú)離不開(kāi)水,但是沒(méi)有說(shuō)不離開(kāi)哪滴水.
          posts - 98,comments - 104,trackbacks - 0
                  Tomcat是Java開(kāi)發(fā)者使用得較多的一個(gè)Web服務(wù)器,因?yàn)樗加觅Y源小,運(yùn)行速度快等特點(diǎn),深受Java Web程序員的喜愛(ài)。不過(guò),在使用中,由于Java中的中文問(wèn)題的存在,如果不經(jīng)過(guò)配置,在WEB程序中,不能直接支持具有中文文件名的文件的下載,這為Java Web程序的開(kāi)發(fā)帶來(lái)一定的不便。本文擬介紹一種手段,解決這個(gè)問(wèn)題。

                  解決問(wèn)題的核心在于修改Tomcat的配置,在Server.xml文件中添加一個(gè)名為URIEncoding的屬性,它用于對(duì)HTTP請(qǐng)求中的get方法傳過(guò)來(lái)的URL進(jìn)行編碼。如果直接從Apache站點(diǎn)中下載Tomcat,無(wú)論是安裝版的exe文件,還是解壓縮的ZIP文件,內(nèi)置的對(duì)于get協(xié)議中的URL編碼都是ISO-8859-1,這個(gè)字符集不能直接支持中文等雙字節(jié)的信息,而中文文件的下載鏈接恰恰是通過(guò)get協(xié)議進(jìn)行的。以下說(shuō)明修改Tomcat安裝目錄中的config文件夾中的server.xml文件的方法。

             打開(kāi)config/server.xml文件,如果沒(méi)有修改過(guò)這個(gè)文件,應(yīng)該可以在其中找到如下代碼:
            
             <Connector port="8080"  protocol="HTTP/1.1"
                         connectionTimeout="20000"
                         redirectPort="8443" />
            
             這段代碼規(guī)定了Tomcat監(jiān)聽(tīng)HTTP請(qǐng)求的端口號(hào)等信息,可以在這里添加一個(gè)屬性:URIEncoding,將該屬性值設(shè)置為UTF-8,即可讓Tomcat不再以ISO-8859-1的編碼處理get請(qǐng)求。更改后的代碼如下所示(紅色部分為新添加的代碼):
           
            <Connector port="8080"
                       URIEncoding="utf-8"
                       protocol="HTTP/1.1"
                       connectionTimeout="20000"
                       redirectPort="8443" />
           
            下面,我們準(zhǔn)備測(cè)試一下更改后的效果。

             最為簡(jiǎn)單的測(cè)試方法就是讓Tomcat自己列出WEB程序中的目錄和文件,默認(rèn)情況下,Tomcat不會(huì)直接列出WEB程序目錄中的文件和文件夾,但是,我們可以修改位于安裝目錄中的config文件夾中的web.xml,使其能夠支持自動(dòng)列出WEB程序中的目錄和文件。
             在config/web.xml文件中找到如下代碼:
            
              <servlet>
              <servlet-name>default</servlet-name>
              <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
              <init-param>
                <param-name>debug</param-name>
                <param-value>0</param-value>
              </init-param>
              <init-param>
                <param-name>listings</param-name>
                <param-value>false</param-value>

              </init-param>
              <load-on-startup>1</load-on-startup>
            </servlet>
            
             將上面的代碼中標(biāo)為紅色的部分改為如下內(nèi)容:
           
             <init-param>
                <param-name>listings</param-name>
                <param-value>true</param-value>
             </init-param>
            

             即將參數(shù)listings的屬性改為true,就可讓Tomcat自動(dòng)列出某個(gè)WEB程序目錄中的文件和文件夾。

             現(xiàn)在,我們的設(shè)置已經(jīng)完成,將修改的文件保存后,就可以啟動(dòng)Tomcat進(jìn)行測(cè)驗(yàn)了,當(dāng)然,如果Tomcat正在運(yùn)行,則需要重新啟動(dòng),以便配置生效。

             現(xiàn)在,可以在Tomcat安裝目錄中的webapps目錄中建立一個(gè)名為cntest的文件夾,作為測(cè)試的web程序的上下文路徑(注意:對(duì)于WEB程序的上下文路徑,請(qǐng)不要使用中文)。請(qǐng)?jiān)赾ntest中添加一些中文目錄和文件,然后在瀏覽器中打開(kāi)該WEB程序,如,http://localhost:8080/cntest,測(cè)驗(yàn)一下效果吧。當(dāng)然,也可以在JSP或HTML文件中使用那些包含中文的文件夾或文件名的超級(jí)鏈接。

             說(shuō)明:以上修改均使用Tomcat5.5做的測(cè)試,在5.5以上都應(yīng)該可以,至于5.0和4.x,我沒(méi)有實(shí)驗(yàn)過(guò),不過(guò)對(duì)于5.0應(yīng)該也是可以的,但4.x不能保證(4.x在處理HTTP的get和post方法和5.x不大一樣)。
          posted on 2009-06-19 15:36 ゞ沉默是金ゞ 閱讀(1346) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): Java EE

          FeedBack:
          # re: 讓Tomcat支持中文路徑名和中文文件名
          2009-06-21 19:50 | GreatGhoul
          這小技巧可真不好找。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 西昌市| 安顺市| 晋中市| 汝城县| 安达市| 宜宾市| 耿马| 卢龙县| 特克斯县| 文登市| 三亚市| 沙洋县| 余江县| 三明市| 基隆市| 巧家县| 宜兴市| 东台市| 班戈县| 新建县| 呼和浩特市| 台东市| 舞钢市| 沙雅县| 林周县| 安国市| 无棣县| 尉犁县| 林西县| 鹤岗市| 中江县| 汨罗市| 伊宁市| 彭阳县| 吐鲁番市| 维西| 大足县| 桂平市| 含山县| 新竹县| 博爱县|