0

@MVCの操作方法を学んでいますが、現在、構成ファイル「...-servlet.xml」と「applicationContext.xml」と混同しています。以下は機能します。冗長なものや置き忘れたものを指摘していただければ幸いです。たとえば、Controllerパッケージスキャンの重複を回避するにはどうすればよいですか?

mrpomario-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
              http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:annotation-config/>

    <context:component-scan base-package="mrpomario.springcore.mvc.controller"/>

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

</beans>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
              http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
              http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.springframework.org/schema/jdbc
            http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

    <context:annotation-config/>

    <context:component-scan base-package="mrpomario.springcore.mvc.controller, mrpomario.springcore.mvc.dao, mrpomario.springcore.mvc.service"/>

    <tx:annotation-driven/>

    <jdbc:embedded-database id="dataSource" type="H2">
        <jdbc:script location="/WEB-INF/mvc-db.sql"/>
    </jdbc:embedded-database>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="packagesToScan">
            <list>
                <value>mrpomario/springcore/mvc/domain</value>
            </list>
        </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver"/>

</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         id="WebApp_ID" version="2.5">

    <display-name>MrPomario</display-name>

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

    <servlet-mapping>
        <servlet-name>mrpomario</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

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

</web-app>
4

2 に答える 2

0

applicationContextは、異なるSpringサーブレットが存在する場合、それらの間で共有されます(通常は1つだけです)。

重複を避けるために、ファイルの1つから削除するだけです。

問題が発生する場合は、web-inf/web.xmlが正しく設定されていない可能性があります。コンテキストを構成するには、正しいファイルを参照する必要があります。

<servlet>
  <servlet-name>mrpomario</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/mrpomario-servlet.xml.xml</param-value>
  </init-param>
于 2012-09-20T13:53:35.787 に答える
0

理論的根拠:spring-config.xml->Beanは->applicationContext.xmlに表示されますが、その逆はありません。

コントローラスキャンをspring-confing.xmlに移動しても、まだ機能しませんでした。それが機能するのを妨げていたのは、私がapplicationContext.xmlに次のように保持していたことでした。

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>    

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver"/>

これら(applicationContext.xml内)は、spring-config.xmlで定義されていたために表示されなかったため、コントローラーの@RequestMappingsをスキャンしませんでした。

于 2012-09-20T17:42:48.823 に答える