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

时间:2010-09-15 20:19:49

标签: 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.任何想法为什么这个配置不起作用或更改此配置使其工作。

5 个答案:

答案 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正在获取这些文件的路径。确保它们与位置匹配