2013-10-31 91 views
-1

我在web.xml(共存)中定義了常規servlet和Spring MVC dispatcherServlet。在web.xml中映射到Spring MVC的DispatcherServlet是「/ admin/*」。我有一個正常的servlet,在一個文件夾結構「/ admin/...」下將一個request.getDispatcher()轉發給一個jsp。由於這是內部前鋒,我預計春季的調度員Servlet不會被注意到。事實證明,Spring的DispatcherServlet的確注意到了這一點,並且爲我找不到映射到這個JSP的一個提示。Spring MVC的奇怪行爲

有人知道這裏真的發生了什麼嗎?

更新:對不起,我沒有讓問題更加清晰:

我們有沒有使用Spring MVC現有的應用程序。我們決定保留原有功能,並添加Spring MVC以獲取其他新功能。

因此,這裏的web.xml中映射:

<servlet> 
    <servlet-name>springRouted</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:spring/mvc-config.xml</param-value> 
    </init-param> 
    <load-on-startup>4</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>springRouted</servlet-name> 
    <url-pattern>/admin/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>existingServlet</servlet-name> 
    <url-pattern>existing.do</url-pattern> 
</servlet-mapping> 

如果ExistingServelt調用的request.getRequestDispatcher()向前( 「/管理/ ... JSP」),那麼Spring會報告錯誤無法找到「/admin/...jsp」的映射。它似乎調用request.getRequestDispatcher()。forward(「/ admin/... jsp」)將使servlet容器重新檢查web.xml並通過Spring的DispatchServlet重新路由。

回答

0

如果我沒有錯,映射「/ *」(星號)意味着你映射的所有分機(.JSP,.js文件等)的DispatcherServlet。

也許最簡單的sollution就是讓所有@ RequestMapping的擁有「做」推廣員和調度員的servlet映射到‘*。做’,例如:

@RequestMapping("/myPage1.do") 
public String getMyPage1() { 
    // Some logic here 

    return "myPage1"; 
} 

@RequestMapping("/myPage2.do") 
public String getMyPage2() { 
    // Some logic here 

    return "myPage2"; 
} 

// And so on 

然後,你必須改變你的web.xml像這樣:

<servlet-mapping> 
     <servlet-name>dispatcherServlet</servlet-name> 
     <url-pattern>/admin/*.do</url-pattern> 
    </servlet-mapping>