欢迎文件列表在码头中不起作用 + 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 可以用正确的行为处理这个问题,但码头不行。
您可以尝试通过以下步骤验证。
- 删除带“/”的映射
- 和 运行 带有 tomcat 和码头的应用程序。你可以发现 tomcat 和 jetty 都有效。
- 如果您添加一个带有映射模式的 servlet 映射:“/”,可以使用客户 servlet 或 spring 调度 servlet。它可以在 tomcat 中正常工作,但不能在码头工作。
我将 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 可以用正确的行为处理这个问题,但码头不行。
您可以尝试通过以下步骤验证。
- 删除带“/”的映射
- 和 运行 带有 tomcat 和码头的应用程序。你可以发现 tomcat 和 jetty 都有效。
- 如果您添加一个带有映射模式的 servlet 映射:“/”,可以使用客户 servlet 或 spring 调度 servlet。它可以在 tomcat 中正常工作,但不能在码头工作。