0

Spring でインターセプターを使用しようとしています。すべてのコントローラーにインターセプターを実装して、呼び出されたときに特定のロジックを処理する必要があります。

web.xml:

<servlet>
    <servlet-name>MyApp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>MyApp</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

applicationContext.xml:

<bean id="handlerMapping"
      class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="warningInterceptor"/>
        </list>
    </property>
    <property name="mappings">
        <value>*.do</value>
    </property>
</bean>

<bean id="warningInterceptor" class="security.WarningInterceptor">
    <property name="activeApp" value="${myWarning}"/>
</bean>

Java クラス: WarningInterceptor

public class WarningInterceptor extends HandlerInterceptorAdapter {

private int activeApp;
public int getActiveApp() { return activeApp; }
public void setActiveApp(int activeApp) {this.activeApp = activeApp;}

public boolean preHandle(
        HttpServletRequest request,
        HttpServletResponse response,
        Object handler) throws Exception {

    if (getActiveApp() == 0) {
        return true;
    } else {
        response.sendRedirect("/myWarning.do");
        return false;
    }
}

MyApp を起動すると、常に次のエラーが発生します。

org.springframework.beans.factory.BeanCreationException: ServletContext リソース [/WEB-INF/applicationContext.xml] で定義された 'handlerMapping' という名前の Bean の作成中にエラーが発生しました: Bean の初期化に失敗しました。ネストされた例外は org.springframework.beans.factory.NoSuchBeanDefinitionException: '' という名前の Bean が定義されていません

4

2 に答える 2

1

SimpleUrlHandlerMapping の mappings プロパティは、URL をハンドラーにマップする必要があり、URL パターンのみがリストされています。次のようになります。

 <property name="mappings">
    <props>
       <prop key="*.do">myAppController</prop>
     </props>
   </property>

編集:これはより良い例です。これは prop の代わりに value タグを使用します (どちらの方法でも機能します)。

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
   <property name="mappings">
    <value>
       *.do=myAppController
    </value>
   </property>
</bean>

<bean id="myAppController" 
    class="com.example.MyAppController" />
于 2012-05-17T14:38:03.483 に答える
0

インターセプターにactiveApp変数のゲッター/セッターメソッドを追加してみましたか。(WarningInterceptor)

于 2012-05-17T13:56:22.260 に答える