2010-09-15 50 views
0

我在web.xml文件中定義了兩個servlet,即default2和myservlet。 default2 servlet用於映射靜態文件,如javascript和css。 myservlet用於獲取動態內容。Tomcat 6.x web.xml默認和自定義servlet路由

<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> 

當我嘗試訪問在/資源的任何文件,我得到一個404的任何想法,爲什麼這個配置不工作或改變這種配置來讓它起作用。

+1

Tomcat錯誤說了什麼?另外,爲什麼兩個servlet都加載相同的值' 1'? – 2010-09-15 20:36:31

+0

啓動時沒有tomcat錯誤。當我們訪問/資源下的任何文件時,它會給出文件未找到錯誤。 – 2010-09-15 20:45:55

回答

-1

根據@BalusC評論刪除了錯誤的答案部分。

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

+0

錯誤,servletcontainer將匹配*最具體的* servlet url模式。可能你會將它與過濾器的行爲混淆起來。 – BalusC 2010-09-15 20:50:34

+0

是的,你寫的。我沒在想。 仍然在servlet中設置斷點將有助於確定應用程序在何處查找文件。 – Sean 2010-09-15 20:55:28

+0

我建議編輯您的帖子,因爲你得到負分數。 – 2010-09-15 21:27:35

0

它應該工作正常。這些文件是,還是也位於/resources文件夾中?

+0

是的,這些文件都在實際位置。 – 2010-09-15 21:32:57

+0

異常告訴它不是。當你刪除這兩個servlet時,它們是否可以通過相同的URL進行訪問?如果還沒有,那麼使用的URL和/或實際的位置是錯誤的(或者你有''Filter'在'/ *'上進行監聽,這是寫得不好的,因此會干擾所有的事情)。 – BalusC 2010-09-15 21:40:30

0

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

3

6.0.30之前的Tomcat默認servlet實際上服務於由HttpServletRequest.getPathInfo()標識的靜態資源,因此當請求/resources/style.css時將返回/style.css

Tomcat的行爲已從版本6.0.30起更改。所以這個問題的原始配置適用於更新版本的Tomcat。請參閱50026:在changelog中添加支持將默認servlet映射到非./((timw))之外的URL。

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

0

試着改變你的url-patternmyservlet/,並根據需要添加<mvc:default-servlet-handler />see here)到Spring配置。