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

标签 java spring tomcat servlets tomcat6

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

最佳答案

Tomcat在6.0.30之前默认的servlet实际上是服务于一个由HttpServletRequest.getPathInfo()标识的静态资源,这样在时会返回/style.css请求/resources/style.css

Tomcat 的行为从版本 6.0.30 开始发生了变化。因此问题中的原始配置适用于较新版本的 Tomcat。请参阅“50026:添加对将默认 servlet 映射到除/. (timw) 以外的 URL 的支持”(在 changelog 中) .

Jetty 的默认 servlet 使用完整路径。

关于java - Tomcat 6.x web.xml 默认和自定义 servlet 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3721480/

相关文章:

java - 如何从不同的 XML 更改 ImageView 源?

java - 如何优化 dlib 地标检测?

Spring MVC 简单项目 - 404

java - Kafka 消息版本控制

java - 即使我关闭 RS,结果集资源也会泄漏?

java - DataAccessException 与 SQLException

tomcat - 尝试在 Tomcat 7 中使用 org.apache.catalina.loader.VirtualWebappLoader 时出现 java.lang.ClassCastException

java - Spring Jersey : How to get rid of web. xml?

java - 对象数组就像 Ajax 中的 String 到 Spring Controller 一样

java - 当属性不存在时,Spring @Value 注释不使用默认值