Tomcat 6.x web.xml 默认和自定义 servlet 路由

发布于 2024-09-19 18:06:13 字数 1255 浏览 6 评论 0 原文

我在 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。任何想法为什么此配置不起作用或更改此配置以使其工作。

I have two servlets defined in the web.xml file, namely the default2 and myservlet. The default2 servlet is used to map the static files like the javascript and css. The myservlet is used for getting dynamic content.

<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>

The servlet mapping is defined as follows

<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>

When i try to access any files under /resources, i get a 404. Any ideas why this config is not working or change this config to make it work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

堇年纸鸢 2024-09-26 18:06:14

Tomcat 6.0.30 之前的默认 servlet 实际上提供的是由 HttpServletRequest.getPathInfo() 标识的静态资源,因此当 /resources/ 时将返回 /style.css请求 style.css

Tomcat 的行为从版本 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.

时间你老了 2024-09-26 18:06:14

它应该工作正常。这些文件实际上也位于/resources文件夹中吗?

It should work fine. Are those files in real also located in the /resources folder?

爺獨霸怡葒院 2024-09-26 18:06:14

您的 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.

断念 2024-09-26 18:06:14

尝试将 myservleturl-pattern 更改为 /,并可选择添加 (请参阅此处)到您的 Spring 配置。

Try changing your url-pattern for myservlet to /, and optionally adding <mvc:default-servlet-handler /> (see here) to your Spring configuration.

温柔一刀 2024-09-26 18:06:14

根据 @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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文