Tomcat 6.x web.xml 默认和自定义 servlet 路由
我在 web.xml 文件中定义了两个 servlet,即 default2 和 myservlet。 default2 servlet 用于映射静态文件,如 javascript 和 css。 myservlet 用于获取动态内容。
<servlet>
<servlet-name>default2</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:my-servlet.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
servlet 映射定义如下
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default2</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
当我尝试访问 /resources 下的任何文件时,我收到 404。任何想法为什么此配置不起作用或更改此配置以使其工作。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
Tomcat 6.0.30 之前的默认 servlet 实际上提供的是由
HttpServletRequest.getPathInfo()
标识的静态资源,因此当/resources/ 时将返回
。/style.css
请求 style.cssTomcat 的行为从版本 6.0.30 开始发生了变化。因此,问题中的原始配置适用于较新版本的 Tomcat。请参阅“50026:添加对将默认 servlet 映射到其他 URL 的支持比 /. (timw)" 中的 变更日志。
Jetty 的默认 servlet 使用完整路径。
Tomcat's default servlet before 6.0.30 actually serves a static resource identified by
HttpServletRequest.getPathInfo()
, so that/style.css
will be returned when/resources/style.css
is requested.Tomcat's behavior has changed from version 6.0.30 onwards. So the original configuration from the question works in newer versions of Tomcat. See "50026: Add support for mapping the default servlet to URLs other than /. (timw)" in the changelog.
Jetty's default servlet uses a full path.
它应该工作正常。这些文件实际上也位于
/resources
文件夹中吗?It should work fine. Are those files in real also located in the
/resources
folder?您的 web.xml 看起来正确(除了我会更改您的
常量)。确保您的
/resources
存在并且是项目路径中公开可见的文件夹,而不是在 /WEB-INF 文件夹下。Your web.xml looks correct (except I would change your
<load-on-startup>
constants).Make sure that your
/resources
exists and is a publicly visible folder in your project path and not under /WEB-INF folder.尝试将
myservlet
的url-pattern
更改为/
,并可选择添加
(请参阅此处)到您的 Spring 配置。Try changing your
url-pattern
formyservlet
to/
, and optionally adding<mvc:default-servlet-handler />
(see here) to your Spring configuration.根据 @BalusC 评论删除了答案的错误部分。
在 servlet 中设置断点并执行调试会话。查找您的 servlet 获取这些文件的路径。确保它们与位置匹配
Removed wrong portion of the answer as per @BalusC comment.
Set a break point in your servlet and perform a debug session. Look for the path that your servlet is picking up these files at. Make sure they match the location