2011-08-15 82 views
28

我有一個文件夾中有許多擅長在Tomcat在它的文件,我想這些文件可用,當我走在該文件夾的網址在瀏覽器(例如:http; //本地主機:8080/MyFolder文件)如何列出tomcat中的文件夾中的所有文件?

當我嘗試訪問文件夾時,出現404錯誤。通過如果我嘗試訪問該文件夾中的文件,它的工作原理。

+0

張貼您正在使用的代碼。另外,請確保您不要在這裏接受用戶輸入,否則您可能會透露/ etc/shadow – Woot4Moo

+0

它看起來像是一個htaccess權限問題。 – Snicolas

+1

@ Woot4Moo沒有代碼。它只是一個包含一些文件的文件夾。我希望能夠導航到該文件夾​​的網址,並讓它顯示所有文件,就像Apache服務器一樣。 – code511788465541441

回答

48

的Tomcat DefaultServlet是默認配置爲不顯示目錄列表。您需要打開Tomcat的自己/conf/web.xml文件(看在Tomcat的安裝文件夾),搜索DefaultServlet<servlet>條目,然後從

<init-param> 
    <param-name>listings</param-name> 
    <param-value>false</param-value> 
</init-param> 

改變其listings初始化參數

<init-param> 
    <param-name>listings</param-name> 
    <param-value>true</param-value> 
</init-param> 

請記住,這會影響所有 Web應用程序的文件夾。如果你想只爲一個單獨的文件夾啓用它,你必須自己編寫一些Servlet代碼,它可以在servlet端的java.io.File API的幫助下完成這個工作,以收集JSP側的文件和一些HTML/CSS到以整潔的方式呈現它。

+0

我已將web-inf文件添加到原始文章中。你能告訴我這些參數應該放在哪裏嗎?謝謝 – code511788465541441

+0

@Solver:另一個答案是不可移植的(即當部署到不同品牌的服務器,甚至可能不同的版本時,webapp會崩潰)。你看,它不是標準Servlet API的一部分。 – BalusC

+1

這可以在每個webapp的基礎上完成。您只需修改應用程序的「WEB-INF/web.xml」而不是Tomcat的站點範圍的'conf/web.xml'。您需要將整個'DefaultServlet'聲明,設置和映射覆制到您自己的'WEB-INF/web.xml'中,但是一旦您這樣做,就可以爲單個Web應用程序而不是所有Web應用程序啓用目錄列表部署在該Tomcat實例上。 –

4

這裏有一些文件解釋如何做到這一點。

http://tomcat.apache.org/tomcat-7.0-doc/default-servlet.html

的基本理念是給Tomcat的主要web.xmllistings參數的值更改爲true

<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> 

但是,上述將公開所有目錄。爲了有良好的控制,按照下列步驟進行解釋:

http://tomcat.apache.org/tomcat-7.0-doc/default-servlet.html#dir

+0

@downvoter:關心評論? – adarshr

+0

我沒有downvote,但你的初始答案只告訴如何自定義默認的目錄列表佈局,而不是如何啓用它。 – BalusC

2

下面是一個簡單的servlet,這可能是一個完全自定義方法的開始。

18

您也可以從給定的url模式開始啓用它。 就在servlet和servlet映射添加到您的應用程序的web.xml

<servlet> 
    <!-- List files in /ws-definitions --> 
    <servlet-name>ListWsDefinitions</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>true</param-value> 
    </init-param> 
    <load-on-startup>100</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>ListWsDefinitions</servlet-name> 
    <url-pattern>/ws-definitions/*</url-pattern> 
</servlet-mapping> 

在下面這個例子中的目錄「/ WS-定義/」會聽。

+0

我試過這個使用tomcat訪問文件列表,它運行良好。謝謝! – Ricardo

+4

這應該是公認的答案! – jutky

+0

不,這樣的webapp會在部署到不同的服務器版本時崩潰。換句話說,這樣的web應用程序是不可移植的。而是將其配置在服務器端而不是webapp結束。或者,您可以自己創建可重用的目錄列表servlet。 – BalusC

1

如果更改列表參數值的方式不工作,嘗試編輯歡迎文件列表

默認值分別如下:

<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 

編輯如下:

<welcome-file-list> 
    <welcome-file></welcome-file> 
    <welcome-file></welcome-file> 
    <welcome-file></welcome-file> 
</welcome-file-list> 

刪除它們應該完美地工作

+0

謝謝,沒有這個,我沒有用。 – masterxilo

3

如果您使用的是Tomcat 6(它實現Servlet 2.5規範)或更新的版本,您不必更改CATALINA_HOME/conf /目錄中的web.xml以顯示目錄列表。相反,您應該在WEB-INF下更改Web應用程序自己的web.xml文件。

正如Adarshr提到的,這是你需要添加到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>true</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup> 
</servlet> 

您還需要添加以下

<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
0

如果你只是想實現一個網頁是什麼基於文件的瀏覽器可以讀取servlet外部的文件,您可以使用this answer中提到的自定義webapp。

相關問題