我们在生产环境中部署在 Tomcat 上的 servlet 3 Spring MVC Web 应用程序。
该应用程序(稍作调整)也应该能够在 Jetty 8 上运行。目前这仅用于开发环境,主要用于开发机器上的集成测试。
在我们的 CI 系统上,war 部署在 Tomcat 上,应用程序正在运行并通过所有测试。
在 Jetty 8 上运行时,所有获取以 / 结尾的 url 的测试都将失败,因为返回的是目录列表而不是欢迎文件。
为了解决这个问题,我们尝试通过配置 Jetty DefaultServlet 来禁止目录列表:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<!-- Configure Jetty DefaultServlet to disallow dir listing and explicitly allow welcomeservlets (a welcomeservlet in jetty terms is a <welcome-file> tag in web.xml that is pointing to a URI(file name) matched by a servlet)
NOTE: all init-params supported by org.eclipse.jetty.servlet.DefaultServlet can be set directly on the WebAppContext using setInitParameter and prefixing the init-param with 'org.eclipse.jetty.servlet.Default.' - e.g. 'org.eclipse.jetty.servlet.Default.dirAllowed'
-->
<Call name="setInitParameter">
<Arg>org.eclipse.jetty.servlet.Default.dirAllowed</Arg>
<Arg>false</Arg>
</Call>
<Call name="setInitParameter">
<Arg>org.eclipse.jetty.servlet.Default.welcomeServlets</Arg>
<Arg>true</Arg>
</Call>
<Call name="setInitParameter">
<Arg>org.eclipse.jetty.servlet.Default.redirectWelcome</Arg>
<Arg>true</Arg>
</Call>
并从我们的 pom 中引用:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.maven.plugin.version}</version>
<configuration>
<contextXml>${basedir}/src/test/resources/jetty-context.xml</contextXml>
...
</configuration>
</plugin>
但是,当测试执行 GET /citizen/ 时,现在我们得到 404 not found 。如果我们手动将 index.html 添加到 URL,则 Spring 静态资源处理程序可以很好地提供该文件。
我可以在 Jetty 上设置更多的 init-params 以使其在欢迎文件方面表现得像 Tomcat 一样吗?