2016-11-08 2 views
1

В контроллере весны весны я написал функцию, настроенную на @PostConstruct, но проблема в том, что она выполняется дважды, когда я запускаю project.Below - мои файлы web.xml и servlet-context.xml.Как создать файлы servlet-context.xml и servlet-context-dispatcher.xml для весны

web.xml:

 <?xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
    <display-name>SaveMoneyOauth</display-name> 

     <servlet> 
      <servlet-name>MyProject</servlet-name> 
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/servlet-context.xml</param-value> 
     </init-param> 
        <load-on-startup>1</load-on-startup> 
      </servlet> 


      <servlet-mapping> 
        <servlet-name>MyProject</servlet-name> 
        <url-pattern>/</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/servlet-context.xml, 
       /WEB-INF/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> 
      <dispatcher>REQUEST</dispatcher> 
        <dispatcher>ERROR</dispatcher> 
      </filter-mapping> 
    </web-app> 

сервлет-context.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:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" 
      xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd 
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> 
      <context:annotation-config /> 
     <context:component-scan base-package="com.example.myproject" /> 
      <mvc:annotation-driven> 
      <mvc:message-converters register-defaults="false"> 
       <bean class="org.springframework.http.converter.StringHttpMessageConverter" /> 
       <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> 
      </mvc:message-converters> 
      </mvc:annotation-driven> 

      <bean id="multipartResolver" 
     class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 

     <!-- one of the properties available; the maximum file size in bytes --> 
     <property name="maxUploadSize" value="1000000000" /> 
      </bean> 

      <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
     <property name="url" value="jdbc:mysql://localhost:3306/SaveIt"/> 
     <property name="username" value="root"/> 
     <property name="password" value="password"/> 
     <property name="validationQuery" value="SELECT 1"/> 
    </bean> 

    <!-- Hibernate Session Factory --> 
    <bean id="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="myDataSource"/> 
     <property name="packagesToScan"> 
     <array> 
      <value>com.example.myproject</value> 
     </array> 
     </property> 
     <property name="hibernateProperties"> 
     <value> 
      hibernate.dialect=org.hibernate.dialect.MySQLDialect 
     </value> 
     </property> 
    </bean> 
    <!-- Hibernate Transaction Manager --> 
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="mySessionFactory"/> 
    </bean> 

    <!-- Activates annotation based transaction management --> 
    <tx:annotation-driven transaction-manager="transactionManager"/> 
    </beans> 

Я нашел эту проблему, потому что я настроен сервлета-context.xml в обоих ContextLoaderListener и DispatcherServlet. Таким образом, чтобы избежать этой проблемы я должен разделить этот XML-файл Sperate для этого two.So я изменил DispatcherServlet, как показано ниже в web.xml

 <servlet> 
     <servlet-name>SaveMoneyOauth</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/servlet-context-dispatcher.xml</param-value> 
    </init-param> 
       <load-on-startup>1</load-on-startup> 
     </servlet> 

Но как я могу разделить коды файлов на сервлет-context.xml и сервлет-контекстно-dispatcher.xml? Что я должен писать в обоих этих файлах? Пожалуйста, помогите мне.

ответ

1

, что вы загружаете в через ContextLoaderListener, должен быть корень WebApplicationContext

Корня WebApplicationContext должен содержать все инфраструктуру бобов, которые должны быть разделены между другими вашими контекстами и Servlet экземплярами. Эти унаследованные бобы могут быть переопределены в области с сервлетами, и вы можете определить новые специфичные для конкретной области компоненты локально для данного экземпляра сервлета.

Бобы, которые вы загружаете через DispatcherServlet, представляют собой контекст сервлета, специфичный для приложения, и он наследует все компоненты, определенные вами в контексте корневого веб-приложения.

так идеально, что такие специфические для конкретного приложения компоненты, как фабрика сеансов, диспетчер транзакций и другие соответствующие инфраструктурные компоненты, должны входить в ваш корневой контекст веб-приложения. Бобы, такие как контроллеры и разрешающие средства просмотра, должны идти в контексте вашего сервлета

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-servlet

Смежные вопросы