-1

通常のサーブレットとSpring MVCのdispatcherServletをweb.xmlで定義しています(共存)。web.xml での Spring MVC の DispatcherServlet へのマッピングは「/admin/*」です。フォルダー構造「/ admin/...」の下のjspにrequest.getDispatcher()を転送する通常のサーブレットがあります。これは内部転送なので、Spring の DispatcherServlet は気付かれないと思います。Spring の DispatcherServlet はこれに気づき、この JSP へのマッピングが見つからないという例外を与えてくれました。

ここで実際に何が起こっているか知っている人はいますか?

更新: 申し訳ありませんが、質問を明確にしませんでした:

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().forward("/admin/...jsp") を呼び出すと、Spring は "/admin/...jsp" のマッピングが見つからないというエラーを報告します。request.getRequestDispatcher().forward("/admin/...jsp") を呼び出すと、サーブレット コンテナーが web.xml を再チェックし、Spring の DispatchServlet を介して再ルーティングするようになります。

4

1 に答える 1

0

私が間違っていなければ、"/*" (スター) をマッピングするということは、すべての拡張子 (.jsp、.js など) を dispatcherServlet にマッピングしていることを意味します。

おそらく最も簡単な解決策は、すべての @RequestMapping に「.do」拡張子を付け、ディスパッチャ サーブレットを「*.do」にマップすることです。次に例を示します。

@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>
于 2013-10-31T08:09:58.063 に答える