Разница между applicationContext.xml и spring-сервлет.xml в Spring Framework




  • Are applicationContext.xml и spring-servlet.xml связанные так или иначе в рамках Spring?


  • будут ли файлы свойств объявлены в applicationContext.xml быть доступен для DispatcherServlet?


  • на соответствующей ноте, зачем мне нужен *-servlet.xml на всех? Почему это недостаточно?

568   6  

6 ответов:

Spring позволяет определить несколько контекстов в иерархии родитель-потомок.

The applicationContext.xml определяет компоненты для "корневого контекста веб-приложения", т. е. контекст, связанный с веб-приложением.

The spring-servlet.xml (или как еще вы его называете) определяет бобы для контекста приложения одного сервлета. Их может быть много в веб-приложении, по одному на весенний сервлет (например,spring1-servlet.xml для сервлета spring1,spring2-servlet.xml для сервлета spring2).

фасоль spring-servlet.xml can ссылка бобы в applicationContext.xml, но не наоборот.

все контроллеры Spring MVC должны входить в spring-servlet.xml контексте.

в самых простых случаях!--0--> контекст не нужен. Он обычно используется для хранения компонентов, которые совместно используются всеми сервлетами в веб-приложении. Если у вас есть только один сервлет, то нет особого смысла, если у вас нет конкретного использования для него.

Сценарий 1

в клиентском приложении (Приложение не является веб-приложением, например, может быть swing app)

private static ApplicationContext context = new  ClassPathXmlApplicationContext("test-client.xml");

context.getBean(name);

не нужно web.xml. ApplicationContext как контейнер для получения службы bean. Нет необходимости в контейнере веб-сервера. В

еще один момент хочу добавить. В spring-servlet.xml мы включаем компонентное сканирование для пакета контроллера. В следующем примере мы включаем аннотацию фильтра для пакета контроллера.

<!-- Scans for annotated @Controllers in the classpath -->
<context:component-scan base-package="org.test.web" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

на applicationcontext.xml мы добавляем фильтр для оставшегося пакета, исключая контроллер.

<context:component-scan base-package="org.test">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

простыми словами,

applicationContext.xml определяет бобы, которые являются общими для всех сервлетов. Если ваше приложение имеет более одного сервлета, то определение общих ресурсов в applicationContext.xml было бы больше смысла.

spring-servlet.xml определяет бобы, которые связаны только с этим сервлетом. Вот это и есть сервлет диспетчера. Таким образом, ваши контроллеры Spring MVC должны быть определены в этом файле.

нет ничего плохого в определении всех зерен в spring-servlet.xml Если вы используете только один сервлет в вашем веб-приложении.

контексты приложений предоставляют средства для разрешения текстовых сообщений, включая поддержку i18n этих сообщений. Контексты приложений предоставляют общий способ загрузки файловых ресурсов, таких как изображения. Контексты приложений могут публиковать события в компонентах, зарегистрированных в качестве прослушивателей. Некоторые операции над контейнером или бобами в контейнере, которые должны обрабатываться программным способом с помощью фабрики бобов, могут обрабатываться декларативно в контексте приложения. Объект resourceloader поддержка: интерфейс ресурсов Spring - это гибкая универсальная абстракция для обработки низкоуровневых ресурсов. Контекст приложения сам по себе является ResourceLoader, поэтому предоставляет приложению доступ к экземплярам ресурсов, специфичным для развертывания. Поддержка MessageSource: контекст приложения реализует MessageSource, интерфейс, используемый для получения локализованных сообщений, причем фактическая реализация является подключаемой

в технологии сервлетов если вы хотите передать какой-либо вход в конкретный сервлет, вам нужно передать init param, как показано ниже.

 <servlet>
    <servlet-name>DBController</servlet-name>
    <servlet-class>com.test.controller.DBController</servlet-class>
    <init-param>
        <param-name>username</param-name>
        <param-value>John</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

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

если вы хотите передать некоторые в put, что является общим для всех сервлетов, то на этот раз вам нужно настроить контекстный параметр. Пример

 <context-param>
    <param-name>email</param-name>
    <param-value>[email protected]</param-value>
</context-param>

так точно, когда мы работаем с Spring MVC, нам нужно предоставить некоторую информацию предопределенному сервлету, предоставленному Spring, который является DispatcherServlet через init парам. Таким образом, конфигурация как пар, здесь мы предоставляем spring-servlet.xml как параметр init для DispatcherServlet.

 <?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"
        xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
              http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>Spring MVC App</display-name>

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

    <servlet-mapping>
        <servlet-name>SpringController</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>
</web-app>

снова нам нужен какой-то контекстный парам. Это применимо для всего применения. Таким образом, мы можем предоставить корневой контекст, который является applicationcontext.XML Конфигурация выглядит так:

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationcontext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

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

    <servlet-mapping>
        <servlet-name>SpringController</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>

Comments

    Ничего не найдено.