我在 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/