ServletConfig против ServletContext
В чем разница между ServletConfig
а также ServletContext
интерфейс?
11 ответов
Параметры ServletConfig указаны для конкретного сервлета и неизвестны другим сервлетам. Используется для инициализации.
Параметры ServletContext указываются для всего приложения за пределами какого-либо конкретного сервлета и доступны всем сервлетам в этом приложении. Это область применения и, таким образом, глобально доступна на всех страницах.
Источник: Разница между ServletConfig и ServletContext в Java
ServletConfig
ServletConfig
доступно вjavax.servlet.*;
пакетServletConfig
объект один на класс сервлетаОбъект
ServletConfig
будет создан в процессе инициализации сервлетаЭтот объект Config доступен только для определенного сервлета
Область действия: пока выполняется сервлет,
ServletConfig
объект будет доступен, он будет уничтожен после завершения выполнения сервлета.Мы должны дать запрос явно, чтобы создать
ServletConfig
объект в первый разВ web.xml -
<init-param>
тег будет отображаться под<servlet-class>
тег
Вот как это выглядит под web.xml: ( Источник)
<servlet>
<servlet-name>ServletConfigTest</servlet-name>
<servlet-class>com.stackru.ServletConfigTest</servlet-class>
<init-param>
<param-name>topic</param-name>
<param-value>Difference between ServletConfig and ServletContext</param-value>
</init-param>
</servlet>
ServletContext
ServletContext
доступно вjavax.servlet.*;
пакетServletContext
объект является глобальным для всего веб-приложенияОбъект
ServletContext
будет создан во время развертывания веб-приложенияОбласть действия: пока выполняется веб-приложение,
ServletContext
Объект будет доступен, и он будет уничтожен после удаления приложения с сервера.ServletContext
Объект будет доступен еще до подачи первого запроса.web.xml
-<context-param>
тег будет отображаться под<web-app>
тег
Вот как это выглядит под web.xml:
<context-param>
<param-name>globalVariable</param-name>
<param-value>com.stackru</param-value>
</context-param>
Итак, наконец...
Количество веб-приложений = столько много ServletContext
объекты [ 1 на веб-приложение]
Количество классов сервлетов = Это количество ServletConfig
объекты
Разница между ServletContext и ServletConfig в JSP сервлетов в табличном формате ( источник)
ServletConfig реализуется контейнером сервлетов для инициализации одного сервлета с помощью init(). То есть вы можете передать параметры инициализации сервлету, используя дескриптор развертывания web.xml. Для понимания это похоже на конструктор в классе Java.
ServletContext реализуется контейнером сервлетов, чтобы все сервлеты могли взаимодействовать со своим контейнером сервлетов, например, чтобы получить MIME-тип файла, получить запросы на отправку или записать файл журнала. То есть, чтобы получить подробную информацию о его среде выполнения. Это применимо только в пределах одной виртуальной машины Java. Если веб-приложение распределено между несколькими JVM, это не будет работать. Для понимания это похоже на механизм глобальных переменных приложения для одного веб-приложения, развернутого только в одной JVM.
Источник: http://javapapers.com/servlet/difference-between-servletconfig-and-servletcontext/
Это ответ во вступительном тексте их Javadocs.
ServletConfig
Javadoc:
Объект конфигурации сервлета, используемый контейнером сервлета для передачи информации сервлету во время инициализации.
ServletContext
Javadoc:
Определяет набор методов, которые сервлет использует для связи со своим контейнером сервлета, например, для получения MIME-типа файла, отправки запросов или записи в файл журнала.
Существует один контекст для каждого "веб-приложения" на виртуальную машину Java. ("Веб-приложение" - это набор сервлетов и контента, установленных в определенном подмножестве пространства имен URL-адреса сервера, например / catalog, и, возможно, установленных через файл.war.)
В случае веб-приложения, помеченного как "распределенное" в его дескрипторе развертывания, для каждой виртуальной машины будет один экземпляр контекста. В этой ситуации контекст не может использоваться как место для обмена глобальной информацией (потому что информация не будет действительно глобальной). Вместо этого используйте внешний ресурс, такой как база данных.
ServletContext
объект содержится вServletConfig
объект, который веб-сервер предоставляет сервлету при инициализации сервлета.
Javadoc также содержит список доступных методов вместе с объяснением их использования. Это дает хороший обзор того, что все доступно / возможно с ними.
Разница:
.--------------------------------------------------.----------------------------------------------------------------------------------------------.
| ServletConfig | ServletContext |
:--------------------------------------------------+----------------------------------------------------------------------------------------------:
| Unique object per servlet | Unique object for complete application |
:--------------------------------------------------+----------------------------------------------------------------------------------------------:
| Used to provide init parameters to the servlet | Used to provide application level init parameters that all other servlets can use. |
:--------------------------------------------------+----------------------------------------------------------------------------------------------:
| We can’t set attributes in ServletConfig object. | We can set attributes in ServletContext that other servlets can use in their implementation. |
'--------------------------------------------------'----------------------------------------------------------------------------------------------'
Объекты ServletContext и ServletConfig на сервере
В рамках веб-сервера существует множество веб-приложений, находящихся внутри сервера. Для каждого веб-приложения сервер отвечает за создание одного объекта, то есть объекта контекста сервлета. Он также упоминается как объект приложения.
Объект ServletConfig
В рамках каждого веб-приложения мы создадим N сервлетов. Для каждого сервлета сервером будет создан один объект, то есть объект ServletConfig.
Контейнер сервлетов создаст два объекта Servlet context и Servlet Config. Контекст сервлета является общедоступным, т. Е. Данные, которые мы храним в контексте сервлета с использованием webxml, доступны для всех сервлетов, и в приложении имеется только один объект контекста сервлета, тогда как в случае конфигурации сервлета, которая является частной, то есть данные, которые мы храним в контексте сервлета с использованием webxml доступен только для конкретного сервлета и может быть n номером объекта конфигурации сервлета
Пример (если у нас есть 3 файла сервлета в приложении, будет 3 объекта конфигурации сервлета.
ServletConfig предназначен для конкретного сервлета и полезен в методе init(ServletConfig x) или может использоваться с помощью метода getServletConfig(). Он используется, если нам нужно получить некоторую информацию о сервлете. Например: информация получения сервлетом информации о доступе к базе данных может использовать ServletConfig, так как эта информация требуется только для этого конкретного сервлета
Однако ServletContext предназначен для всего приложения. Он используется, когда нам нужно обмениваться информацией между некоторыми / всеми сервлетами / jsp в определенном веб-приложении. Доступ к нему можно получить с помощью метода getServletConfig(). GetServletContext () сервлета. Например: Servlet/JSP используется для подсчета того, сколько пользователей зашли на ваш сайт.
Обычно оба используются для целей инициализации. Но одно из основных отличий заключается в том, что вы хотите использовать некоторые переменные или поля для всего приложения, вам нужно инициализировать время загрузки web.xml. У вас есть один вариант - ServletContext.
И если вы хотите использовать некоторую переменную только в конкретном сервлете, тогда вам нужно использовать ServletConfit.
ServletConfig используется для совместного использования параметров инициализации, специфичных для сервлета, в то время как ServletContext предназначен для совместного использования параметров инициализации в любом сервлете в веб-приложении.
ServletContext
Интерфейс представляет представление сервлетов веб-приложения, которому оно принадлежит.ServletContext
присутствовать в ServeltConfig
,
Каждый сервлет имеет ServletConfig
объект, используемый для доступа к initParameters с помощью getServeletConfig()
метод.