0

我正在学习如何使用@MVC,现在我对配置文件“...-servlet.xml”和“applicationContext.xml”感到困惑。以下内容确实有效,如果您能指出什么是多余或错位的,我将不胜感激。例如,如何避免重复控制器包扫描?

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>

应用程序上下文.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

基本原理:spring-config.xml -> 在 -> applicationContext.xml 中看到 beans,但不是 VICE-VERSA。

当我将控制器扫描移动到 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 中)没有扫描我的 Controller 的 @RequestMappings,因为它们是在 spring-config.xml 中定义的,因此无法看到。

于 2012-09-20T17:42:48.823 回答
0

如果存在不同的spring servlet(通常只有一个),applicationContext 将在不同的spring servlet 之间共享。

为避免重复,只需从其中一个文件中删除即可。

如果它导致问题,您的 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 回答