0

このアプリケーションは、次の構成ファイルで完全に機能します。

私のWeb.XMLは次のとおりです

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/spring/mvc-dispatcher-servlet.xml</param-value>
    </init-param>
</servlet>

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

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    /WEB-INF/classes/spring/spring-context.xml,
      /WEB-INF/classes/spring/spring-security.xml
    </param-value>
</context-param>


<!-- Spring Security -->
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

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

私のmvc-dispatcher-servlet

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


<context:component-scan base-package="biz.canisrigel.slapMe" />

<!-- enable autowire -->
<context:annotation-config />

私のspring-context.xmlは

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

<context:component-scan base-package="biz.canisrigel.slapMe" />

<!-- enable autowire -->
<context:annotation-config />


<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost/slapMe" />
    <property name="username" value="root" />
    <property name="password" value="adminadmin" />
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="typeAliasesPackage" value="biz.canisrigel.slapMe.bean" />
</bean>

<!-- scan for mappers and let them be autowired -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="biz.canisrigel.slapMe.mapper" />
</bean>

以前のspring-context.xmlがMVCのディスパッチャーサーブレットのxml構成ファイルであったため、Springセキュリティを適切に実行できませんでした。そこで、spring-contextをcontextConfigLocationに移動しました。しかし、それから私はディスパッチャサーブレットに何かを提供しなければなりませんでした。

私の問題は、mvc-dispatcher-servlet.xmlとspring-contextが同じデータを持っていることです。mvc-dispatcherを削除すると、エラーが発生します。mvc-dispatcherのコンテンツをSpringコンテキストに配置しないと、エラーも発生します。

概念の理解がどこで間違っているのでしょうか。

4

2 に答える 2

2

いくつかのこと:

  • あなたのweb.xmlルックスは正しい
  • これはMVCに直接関連しているため、にInternalResourceViewResolverのみ存在する必要があります-から削除してくださいmvc-dispatcher-servlet.xmlspring-context.xml
  • 両方の構成ファイルに含めることができcontext:component-scanますが、異なるパッケージをスキャンする必要があります。サーブレットxmlの1つは、通常、コントローラーパッケージ(およびMVCに直接関連するその他のもの)をスキャンするコンポーネントであり、親のSpringコンテキストxmlの1つは、通常、サービス、DAOなどをスキャンします。通常、コンポーネントのスキャンパッケージは非常に具体的である必要があります。アプリケーション全体の基本パッケージに向けてはいけません。
  • あなたは削除することができますcontext:annotation-config-あなたが持っているならそれは冗長ですcontext:component-scan
于 2013-03-22T19:12:16.757 に答える
0

MVCコンテキストには、MVCに関連する構成のみが含まれている必要があります。これには、通常、ViewResolvers、FileUpload、PropertyFiles、Message / Theme Resolversなどが含まれます。applicationContextには、DAO、Service、およびその他のutilsに関連するBeanが含まれます。セキュリティファイルにはセキュリティ設定が必要です。よりよく理解し、良い/推奨される慣行を知るために、春のグリーハウスコードをチェックしてください。

于 2013-03-22T18:55:22.113 に答える