2011-08-15 52 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。

相关问题