我有一个由Jetty服务器部署的.war应用程序。当我访问它时,我可以通过导航到localhost/MyServlet/folder来查看目录结构。我尝试在web.xml文件中包含以下内容:
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.something.path.my.class.Servlet</servlet-class>
<init-param>
<param-name>dirAllowed</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
当我重建.war并运行它时,我仍然可以在浏览器中访问目录结构。这是我所期望的,因为我在web.xml中定义了以下内容:
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
所以我知道这不是servlet引起的,是Jetty处理和返回这些目录结构。但是我找不到任何方法在Jetty中关闭它。有人知道解决这个问题的方法吗?
4条答案
按热度按时间jei2mxaa1#
我最终发现我可以在WebApp本身的代码库中设置这个参数,当在Java代码中设置Web应用上下文时,我可以简单地将它设置为一个初始化参数:
pjngdqdw2#
目录列表是
DefaultServlet
的一个特性(作为Servlet规范的一部分指定)。这是一项Web容器功能,因此无法从WebApp本身进行控制/编辑/配置。
但这并不是全部,您需要使用Jetty XML可部署技术部署Web应用程序,并指定一个替代的
defaultsDescriptor
在这里您可以复制
${jetty.home}/etc/webdefault.xml
并将其复制到您选择的位置(不要编辑/修改/删除/更改${jetty.home}
目录中的任何内容)。将
dirAllowed
参数设置为false
。50few1ms3#
您最初的观点不起作用,因为它无法覆盖webdefault.xml中的选项。我已经说过,我通常只是编辑该文件以禁用该jetty示例的全局列表:即在webdefault.xml中
628mspwn4#
另一个非常简单的解决方案,如果你只是想他的内容是隐藏添加一个空白(或消息的选择)index.html文件到该目录,因为这将是拿起默认。