我有一个文件夹中有许多擅长在Tomcat在它的文件,我想这些文件可用,当我走在该文件夹的网址在浏览器(例如:http; //本地主机:8080/MyFolder文件)如何列出tomcat中的文件夹中的所有文件?
当我尝试访问文件夹时,出现404错误。通过如果我尝试访问该文件夹中的文件,它的工作原理。
我有一个文件夹中有许多擅长在Tomcat在它的文件,我想这些文件可用,当我走在该文件夹的网址在浏览器(例如:http; //本地主机:8080/MyFolder文件)如何列出tomcat中的文件夹中的所有文件?
当我尝试访问文件夹时,出现404错误。通过如果我尝试访问该文件夹中的文件,它的工作原理。
的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到以整洁的方式呈现它。
我已将web-inf文件添加到原始文章中。你能告诉我这些参数应该放在哪里吗?谢谢 – code511788465541441
@Solver:另一个答案是不可移植的(即当部署到不同品牌的服务器,甚至可能不同的版本时,webapp会崩溃)。你看,它不是标准Servlet API的一部分。 – BalusC
这可以在每个webapp的基础上完成。您只需修改应用程序的“WEB-INF/web.xml”而不是Tomcat的站点范围的'conf/web.xml'。您需要将整个'DefaultServlet'声明,设置和映射复制到您自己的'WEB-INF/web.xml'中,但是一旦您这样做,就可以为单个Web应用程序而不是所有Web应用程序启用目录列表部署在该Tomcat实例上。 –
这里有一些文件解释如何做到这一点。
http://tomcat.apache.org/tomcat-7.0-doc/default-servlet.html
的基本理念是给Tomcat的主要web.xml
listings
参数的值更改为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
下面是一个简单的servlet,这可能是一个完全自定义方法的开始。
您也可以从给定的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-定义/”会听。
如果更改列表参数值的方式不工作,尝试编辑欢迎文件列表
默认值分别如下:
<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>
删除它们应该完美地工作
谢谢,没有这个,我没有用。 – masterxilo
如果您使用的是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>
如果你只是想实现一个网页是什么基于文件的浏览器可以读取servlet外部的文件,您可以使用this answer中提到的自定义webapp。
张贴您正在使用的代码。另外,请确保您不要在这里接受用户输入,否则您可能会透露/ etc/shadow – Woot4Moo
它看起来像是一个htaccess权限问题。 – Snicolas
@ Woot4Moo没有代码。它只是一个包含一些文件的文件夹。我希望能够导航到该文件夹的网址,并让它显示所有文件,就像Apache服务器一样。 – code511788465541441