欢迎文件列表在码头中不起作用 + spring

welcome-file-list not working in jetty + spring

我将 Jetty 8.1.4 与 Spring 3.2.4 一起使用。以下是我的 web.xml 文件。我在 WEB-INF 下有一个 index.html 文件,我希望在我执行 http://myapp.com/ or simple http://myapp.com but I'm getting 404. If I do http://myapp.com/index.html 时点击该页面。我不确定我错过了什么。另外,如果我必须在下面的 url-pattern 中使用 / 或 /* 我有点困惑,我都试过了。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    id="DOMAINAPPROVALGUI" version="2.4"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>myapp-ui</display-name>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/myapp-servlet.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <session-config>
        <session-timeout>10</session-timeout>
    </session-config>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>myappname</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>myappname</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

Jetty 8 is EOL (End of Life),升级到Jetty 9。(这里的答案是根据Jetty 9的运行方式提供的。)

<welcome-file-list>DefaultServlet 处理的一部分(根据 servlet 规范)。

你在 <url-pattern>/*</url-pattern>myappname 声明有效地阻止了 DefaultServlet 做任何事情。

你的配置基本都说了"send all requests to my DispatcherServlet".

这甚至包括静态文件服务、欢迎文件处理、默认处理、错误处理、调度等等。

至于选择什么url模式,就看你的了。

有很多方法可以使用 Spring,您在 /* 的当前配置与在 *.do*.dispatch 或 [=] 的其他配置一样有效18=]

您必须决定什么最适合您的 webapp,并调整您对 Spring 的内部使用以满足您的需求(例如您如何声明 RequestMapping 的)

既然您知道 <welcome-file-list> 为何不起作用,您可以进行调整以不使用标准 servlet <welcome-file-list>(在 Spring 中使用一些内部的东西),或者调整您的调度程序 servlet url 模式允许 servlet 容器 (Jetty) 为您的静态文件提供服务并处理您声明的 <welcome-file-list>.

我认为将您的欢迎文件放在开头将有助于您加载 file.To 准确地将其放在显示标签之后

我在下面添加到我的 servlet.xml 以完成这项工作。同意@Joakim Erdfelt 的回答,请求转到 spring。但不确定直接在 url 中输入 index.html 是如何工作的。

<mvc:view-controller path=”/” view-name=”index” />

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/" />
  <property name="suffix" value=".html" />
</bean>

首先,你的 spring 的 servlet 映射配置不对,它会将所有东西和 link 映射到 spring,这意味着 *.jsp 会由 spring 处理。所以你应该修复这个缺陷配置。但是这样做之后,仍然无法访问欢迎页面。这是Jetty的一个角色。

我必须说:tomcat 和 jetty 有一些区别。 Tomcat 可以用正确的行为处理这个问题,但码头不行。

您可以尝试通过以下步骤验证。

  1. 删除带“/”的映射
  2. 和 运行 带有 tomcat 和码头的应用程序。你可以发现 tomcat 和 jetty 都有效。
  3. 如果您添加一个带有映射模式的 servlet 映射:“/”,可以使用客户 servlet 或 spring 调度 servlet。它可以在 tomcat 中正常工作,但不能在码头工作。