前言
- tomcat文件下載
- 關閉tomcat目錄列表瀏覽功能
- Tomcat 不能下載帶中文文件名的附件的方法
在Java Web項目中文件下載是一個很常見的功能,最近在做項目中發現可以通過tomcat本身自帶的特性完成文件下載功能。
tomcat文件下載
- 在eclipse中的WebContent下新建文件夾download_file,這個文件夾是專門用來放下載文件的,然后啟動tomcat服務器,
在瀏覽器中就可以URL:http://localhost:8080/項目名/download_file/文件名,這樣的請求來下載文件(注意文件名要包含后綴)如圖1
圖1
關閉tomcat目錄列表瀏覽功能
- 其實上面已經完成了一個簡單的文件下載功能,但是有個問題所在,假如url中再download_file后面不加任何文件名的話,tomcat會默認地將download_file的文件目錄遍歷出來(如圖2),
圖2
這樣的話別人可以隨意下載其他文件,顯然不夠安全。這里就涉及到tomcat的配置,打開tomcat目錄下的/conf/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>
將listings的value值改為false,禁止tomcat直接訪問文件目錄。
Tomcat 不能下載帶中文文件名的附件的方法
- 上面的文件下載還有一點瑕疵,當文件名包含中文時找不到目錄中的文件,這是又要在tomcat目錄下的/conf/server.xml中加上下面的代碼, 在原來的 <Connector>\標簽內加入disableUploadTimeout=”true” URIEncoding=”UTF-8”就可以識別中文文件名
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" disableUploadTimeout="true" URIEncoding="UTF-8"/>
最后,如果修改配置文件后重啟eclipse的tomcat服務無效,只要將tomcat服務先刪除掉,再重新新建即可。
