我有一个由我的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中关闭它。有没有人知道解决这个问题?
答案 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
目录中的任何内容)。
答案 1 :(得分:0)
您的原始点无效,因为它无法覆盖webdefault.xml中的选项。话虽如此,我通常只是编辑该文件以禁用该jetty实例的全局列表: 即在webdefault.xml中
<init-param>
<param-name>dirAllowed</param-name>
<param-value>false</param-value>
</init-param>