簡體   English   中英

Tomcat 6.x web.xml默認和自定義servlet路由

[英]Tomcat 6.x web.xml default and custom servlet routing

我在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()標識的靜態資源,因此當請求/resources/style.css時將返回/style.css

從6.0.30版本開始,Tomcat的行為已更改。 因此,問題的原始配置可在較新版本的Tomcat中使用。 請參閱changelog中的50026 :添加對將默認servlet映射到/.(timw)以外的URL的支持”。

Jetty的默認servlet使用完整路徑。

它應該工作正常。 在現實這些文件也位於/resources文件夾?

您的web.xml看起來正確(除了我會更改您的<load-on-startup>常量)。 確保您的/resources存在並且在項目路徑中是公開可見的文件夾,而不是在/ WEB-INF文件夾下。

嘗試將myservlet url-pattern myservlet/ ,還可以選擇您的Spring配置中添加<mvc:default-servlet-handler />請參見此處 )。

根據@BalusC注釋,刪除了錯誤的答案部分。

在servlet中設置一個斷點並執行調試會話。 查找您的servlet提取這些文件的路徑。 確保它們與位置匹配

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM