我在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.任何想法为什么这个配置不起作用或更改此配置使其工作。
答案 0 :(得分:3)
Tomcat在6.0.30之前的默认servlet实际上提供了由HttpServletRequest.getPathInfo()
标识的静态资源,因此在请求/style.css
时将返回/resources/style.css
。
Tomcat的行为已从版本6.0.30开始改变。因此,问题的原始配置适用于较新版本的Tomcat。请参阅“50026:在changelog中添加对将默认servlet映射到/。(timw)以外的URL的支持”。
Jetty的默认servlet使用完整路径。
答案 1 :(得分:0)
应该可以正常工作。这些真实文件是否也位于/resources
文件夹中?
答案 2 :(得分:0)
您的web.xml看起来是正确的(除了我会更改您的<load-on-startup>
常量)。
确保您的/resources
存在,并且是项目路径中的公开可见文件夹,而不是/ WEB-INF文件夹下。
答案 3 :(得分:0)
尝试将url-pattern
的{{1}}更改为myservlet
,并可选择将/
(see here)添加到您的Spring配置中。
答案 4 :(得分:-1)
根据@BalusC评论删除了错误的答案部分。
在servlet中设置断点并执行调试会话。查找servlet正在获取这些文件的路径。确保它们与位置匹配