welcome-file-list不在jetty + spring工作

时间:2015-02-11 16:53:56

标签: java spring spring-mvc jetty web.xml

我在Spring 3.2.4中使用Jetty 8.1.4。以下是我的web.xml文件。我在WEB-INF下有一个index.html文件,我希望在我http://myapp.com/或简单http://myapp.com时点击该页面,但我得到404.如果我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>

4 个答案:

答案 0 :(得分:2)

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

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

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

您的配置基本上已经说“将所有请求发送到我的DispatcherServlet”。

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

至于选择哪种网址模式,这取决于你。

使用Spring的方法有很多,/*的当前配置与*.do*.dispatch/dispatch/*

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

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

答案 1 :(得分:0)

我在下面添加到我的servlet.xml中以使其工作。同意@Joakim Erdfelt回答该请求到了春天。但不确定如何直接在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>

答案 2 :(得分:0)

首先,您的spring的servlet映射配置不正确,它将映射所有内容并链接到spring,这意味着* .jsp将由spring处理。因此,您应该修复此缺陷配置。但是这样做之后,仍然无法访问欢迎页面。这是码头的特征。

我必须说:Tomcat和码头之间有一些区别。 Tomcat可以通过正确的行为来处理此问题,但跳船则不能。

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

  1. 使用“ /”删除映射
  2. 并使用tomcat和jetty运行该应用程序。您可以找到tomcat和jetty两者。
  3. 如果添加带有映射模式“ /”的servlet映射,则使用客户servlet或spring派发servlet。它将在tomcat中正常运行,但在码头不起作用。

答案 3 :(得分:-1)

我认为在开始时放置欢迎文件将帮助您加载文件。准确地将它放在显示标记之后