有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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。了解此配置不起作用的原因,或者更改此配置使其起作用


共 (5) 个答案

  1. # 1 楼答案

    根据@BalusC comment删除了答案的错误部分

    在servlet中设置断点并执行调试会话。查找servlet获取这些文件的路径。确保它们与位置匹配

  2. # 2 楼答案

    尝试将url-patternfor myservlet更改为/,并可选地将<mvc:default-servlet-handler />see here)添加到Spring配置中

  3. # 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. # 4 楼答案

    它应该很好用。real中的那些文件是否也位于/resources文件夹中

  5. # 5 楼答案

    你的网站。xml看起来是正确的(除非我更改<load-on-startup>常量)。 确保/resources存在,并且是项目路径中的一个公共可见文件夹,而不是在/WEB-INF文件夹下