在Jetty服务器上,如果servlet只映射到特定的url模式,如何禁用目录列表?

时间:2015-11-04 16:56:05

标签: java servlets ant jetty

我有一个由我的Jetty服务器部署的.war应用程序。当我访问它时,我可以通过导航到localhost / MyServlet /文件夹来查看目录结构。我试图在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中关闭它。有没有人知道解决这个问题?

2 个答案:

答案 0 :(得分:0)

目录列表是defaultsDescriptor的一个功能(指定为Servlet规范的一部分)。

这是一个Web容器功能,因此无法在WebApp本身内控制/编辑/配置它。

但一切都没有丢失,您需要使用Jetty XML可部署技术部署Web应用程序,并指定备用<New id="sebWebAppContext" class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/sebapp</Set> <Set name="war">./wars/sebapp.war</Set> <Set name="defaultsDescriptor">/home/seb/jetty/sebwebdefaults.xml</Set> . . </New>

${jetty.home}/etc/webdefault.xml

如果您复印了${jetty.home}并将其复制到您选择的位置(请勿编辑/修改/删除/更改CoordinatorLayout目录中的任何内容)。

设置angular-google-maps

答案 1 :(得分:0)

您的原始点无效,因为它无法覆盖webdefault.xml中的选项。话虽如此,我通常只是编辑该文件以禁用该jetty实例的全局列表: 即在webdefault.xml中

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