2

私は、Struts 2 アプリケーションを spring mvc フレームワークに移行する非常に初期の段階にいます。Spring Core、Spring Security などのいくつかの Spring モジュールをプロジェクトに追加しましたが、Spring MVC を優先してストラットから離れようとしています。

ただし、問題が発生しています-いくつかのストラットアクションをBeanに再マップしようとしています。例を次に示します。

struts.xml ファイルでアクションを構成しています。

<package name="default" extends="struts-default">
    <result-types>
            <result-type name="json" class="org.apache.struts2.json.JSONResult" />
    </result-types>
    ...
    <action name="tools" class="com.carfax.pb.dashboard.processing.action.RerunEventsAction" method="getAllRerunEvents">
        <result name="success">/WEB-INF/jsp/tools/home.jsp</result>
    </action>
    ...
</package>

したがって、基本的には、その上で定義されたアクションのビューである tools.home jsp ページがあります。このビューのコントローラー クラスを作成しました (基本的には、アクションから実装を取り出し、グルーヴィーなコントローラー クラスに移動しただけです)。

@Controller
@RequestMapping("/tools")
class RerunEventsController {

...

    public String getAllRerunEvents() {

        ...
        return ActionSupport.SUCCESS;
    }    


...
}

今、私はこれら2つを配線する方法を見つけようとしていますが、それが私が困難を抱えているところです.

  1. struts.xml で定義されたマッピングから struts を延期する方法がわかりません (アクションを 1 つずつコントローラーに移動するため、残りの struts アクションをサポートする必要があります。

  2. 名前空間からコントローラー、ビューへのマッピングを正しく構成する方法がわかりません。

これが私が試したことです-

web.xml:

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/PBDashboard/*</url-pattern>
</servlet-mapping>

サーブレット.xml:

// Spring は、このパッケージ内に存在するコントローラーを自動的に見つける必要があります

<context:component-scan base-package="com.carfax.pb.dashboard.processing.action" />

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/jsp/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

私の web.xml には、次のように設定された Struts2 フィルターとフィルター マッピングの両方があります。

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

appname/tools に移動すると、「名前空間 / およびアクション名ツールにマッピングされたアクションがありません」という Struts エラーが表示されます。

これは明らかに正しいですが、Spring mvc が取得するマッピングを設定したような気がします。

誰かがこれを正しく行う/さらに良くして間違いを指摘する方法に関する情報を教えてもらえますか?

4

1 に答える 1

3

私が正しければ、web.xml にも Struts フィルターが必要です。次に、DispatcherServlet をデフォルトのサーブレット (/) としてマップし、次のようなものを使用して struts.xml で移行されたアクションを除外できます。

<constant name="struts.action.excludePattern" value="/tools"/>

その後、Struts は /tools を除くすべてのリクエストを処理し、/tools の URL は Spring に任せます。

于 2012-11-09T19:34:28.633 に答える