javatomcat6。x网络。xml默认和自定义servlet路由
我在web中定义了两个servlet。xml文件,即default2和myservlet。Default2servlet用于映射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。了解此配置不起作用的原因,或者更改此配置使其起作用
# 1 楼答案
根据@BalusC comment删除了答案的错误部分
在servlet中设置断点并执行调试会话。查找servlet获取这些文件的路径。确保它们与位置匹配
# 2 楼答案
尝试将
url-pattern
formyservlet
更改为/
,并可选地将<mvc:default-servlet-handler />
(see here)添加到Spring配置中# 3 楼答案
Tomcat在6.0.30之前的默认servlet实际上提供了一个由
HttpServletRequest.getPathInfo()
标识的静态资源,因此当请求/resources/style.css
时/style.css
将被返回从6.0.30版开始,Tomcat的行为发生了变化。因此,问题中的原始配置适用于Tomcat的较新版本。请参阅changelog中的“50026:添加对将默认servlet映射到/(timw)以外的URL的支持”
Jetty的默认servlet使用完整路径
# 4 楼答案
它应该很好用。real中的那些文件是否也位于
/resources
文件夹中# 5 楼答案
你的网站。xml看起来是正确的(除非我更改
<load-on-startup>
常量)。 确保/resources
存在,并且是项目路径中的一个公共可见文件夹,而不是在/WEB-INF文件夹下