Web-Anwendung Kontext/ root-Anwendung, die Kontext-und Transaktions-manager-setup
Hatte ich zwei Fragen,
In Spring MVC Anwendung, was ist der Zweck des habens ContextLoaderListener?
Unten sind meine Einträge in web.xml,
Alle MVC-beans definiert sind servlet-context.xml
Alle Datenbank-und annotation-basierten Transaktion-management-definiert ist applicationContext.xml und ich bin mit container-verwaltete Transaktion in JBoss
Die trasaction-manager funktioniert gut, wenn ich übergeben Sie die applicationContext.xml wie unten hervorgehoben zu DispatcherServlet. Aber ich dachte, wir sollten nur die Spring MVC Kontext-info zu DispatcherServlet.
, Wenn ich entfernen Sie die applicationContext.xml der transaction manager nicht mehr funktioniert? Ich bin verwirrt, was ist der beste Weg zum Umgang mit dem Kontext-Dateien?
Web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/applicationContext.xml
/WEB-INF/config/spring-mail.xml
</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>messages</param-value>
</context-param>
<servlet>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/servlet-context.xml
***/WEB-INF/config/applicationContext.xml***
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
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:jee="http://www.springframework.org/schema/jee"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- registers all of Spring's standard post-processors for annotation-based configuration -->
<context:annotation-config />
<jee:jndi-lookup id="dataSource" jndi-name="java:OracleDS"/>
<tx:annotation-driven/>
<tx:jta-transaction-manager/>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation"
value="classpath:com/common/model/config/sqlmapconfig.xml"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory"/>
</bean>
servlet-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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
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">
<!-- Scans the classpath of this application for @Components to deploy as beans -->
<context:component-scan base-package="com.xxxx"/>
<!-- Configures the @Controller programming model -->
<mvc:annotation-driven/>
<!-- Configures Handler Interceptors -->
<mvc:interceptors>
<!-- Changes the locale when a 'locale' request parameter is sent; e.g. /?locale=de -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
<!--Register Request/Response Interceptor-->
<bean class="com.xxx.common.auditor.RequestInterceptor"/>
<!-- <bean class="com.xxx.common.interceptor.UserAuthenticationInterceptor"/>-->
</mvc:interceptors>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>
<!-- Application Message Bundle -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/messages/messages"/>
<property name="cacheSeconds" value="0"/>
</bean>
<!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/xxxx.properties</value>
</property>
</bean>
Danke für deine Hilfe! Ich weiß, dass das lange Zitat, aber wollte, um mich besser verstanden
InformationsquelleAutor Taran Singh | 2012-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erläutert in die Dokumentation, jeder dispatcher-servlet hat seine eigene Anwendungs-Kontext, wo Sie in der Regel definieren, die Controller -, view-Resolver, etc., und die erbt (und diese überschreiben Bohnen) von einem root-Kontext Anwendung, die in der Regel enthält eine Datenquelle, Definitionen, middle-tier-services, etc.
Den ContextLoaderListener, als die Dokumentation erklärt, wird verwendet, um zu starten und Herunterfahren Frühjahr root-Anwendung Kontext (von welcher die servlet-Kontexte Erben).
Es ist auch nützlich, wenn Sie verwenden möchten, Feder für den mittleren Ebene, aber Sie wollen nicht zu verwenden, Spring MVC, wie Ihre Präsentation. In diesem Fall, Sie definieren Sie nur eine root-Anwendung Kontext mit ContextLoaderListener.
Ihre erste Frage ist: was ist der Zweck der ContextLoaderListener. Die Antwort ist: starten und Herunterfahren des root-Anwendung Kontext. Ihre zweite Frage ist: ich bin verwirrt, was ist der beste Weg zum Umgang mit dem Kontext-Dateien. Die Antwort ist: die middle tier-Dienstleistungen sollten in den root-Kontext, geladen von der ContextLoaderListener. Die Spring MVC bestimmte beans definiert werden sollte, in der dispatcher-servlet-Kontext, die erbt von der Wurzel. Sie haben zwei XML-Dateien, aber mit einem einzigen Kontext. Sollten Sie ein root-context-und servlet-Ebene context.
danke ! OK, ich habe den Hörer mit root-Kontext <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/config/applicationContext.xml /WEB-INF/config/spring-mail.xml </param-value> </context-param> nicht initialisieren nicht den root-Kontext? Und wäre das nicht das dispatcher-servlet initialisiert die web-Kontext? Weiter, warum wird der Transaktions-manager nicht mehr funktioniert, wenn ich weiß nicht die Anwendung, die Kontext-info in der Dispatcher-Servlet?
Nicht, dass zwei Kontexte duplizieren Sie die Bohnen in den root-Kontext befinden sich die regler in der dispatcher-Kontext erfordern Bohnen aus dem root-Kontext?
InformationsquelleAutor JB Nizet