Замените элемент context-param аннотацией Servlet 3.0
Учитывая: веб-приложение Java EE 5, имеющее web.xml, имеющее фрагмент типа
<context-param>
<description>c</description>
<param-name>a</param-name>
<param-value>b</param-value>
</context-param>
Что мне нужно сделать, чтобы переместить эту спецификацию context-param в стратегию на основе аннотаций.
Ответы
Ответ 1
Вы можете найти все аннотации javax.servlet
в сводке пакета javax.servlet.annotation
:
-
@HandlesTypes
Эта аннотация используется для объявления типов классов, которые может обрабатывать ServletContainerInitializer
.
@HttpConstraint
Эта аннотация используется в аннотации ServletSecurity
для представления ограничений безопасности, которые должны применяться ко всем методам протокола HTTP, для которых соответствующий элемент HttpMethodConstraint
НЕ встречается в аннотации ServletSecurity
.
@HttpMethodConstraint
Эта аннотация используется в аннотации ServletSecurity
для представления ограничений безопасности для определенных сообщений протокола HTTP.
@MultipartConfig
Аннотация, которая может быть указана в классе Servlet
, указывающая, что экземпляры Servlet
ожидают запросы, соответствующие типу MIME multipart/form-data.
@ServletSecurity
Эта аннотация используется в классе реализации Servlet
для указания ограничений безопасности, которые должны применяться контейнером сервлетов в сообщениях протокола HTTP.
@WebFilter
Аннотация, используемая для объявления сервлета Filter
.
@WebInitParam
Эта аннотация используется в классе реализации Servlet
или Filter
для указания параметра инициализации.
@WebListener
Эта аннотация используется для объявления WebListener.
@WebServlet
Аннотация, используемая для объявления сервлета.
Видите ли, нет ничего подобного @WebContextParam
. Что также имеет меньше или больше смысла; на каком уроке вы могли бы его установить?
Некоторые платформы, основанные на сервлетах, которые основаны на параметрах контекста, такие как JSF, также позволяют устанавливать некоторые из них с помощью JNDI. Вы могли бы хотеть изучить это вместо этого. Или если это касается доморощенного кода, то я бы посмотрел, не является ли @WebInitParam
более подходящим вариантом для вас.
Ответ 2
Если вы используете Tomcat, вы можете использовать тег Parameter в context.xml
, и он будет работать идентично параметру context-param, помещенному в web.xml
.
Поэтому вы можете использовать @WebInitParam
, чтобы поймать контекстную переменную.
http://tomcat.apache.org/tomcat-5.5-doc/config/context.html#Context_Parameters
Ответ 3
Ну, я думаю, что мы просто не можем жестко кодировать context-param с помощью "Аннотации" , потому что есть логическая причина: я уверен, что вы, ребята, знаете, что аннотации всегда hardcoded в Servlet и Servlet никогда не загружается контейнером в памяти для обслуживания запроса клиента до тех пор, пока его первый запрос не будет сделан клиентом (прочитайте жизненный цикл сервлета ).
Итак, что произойдет, если мы хотим получить значения из "context-param" , которые жестко закодированы с помощью Annotation в каком-то другом сервлете? И Servlet wrapped с аннотацией context-param до сих пор не загружается в память, поэтому мы не можем получить объект для контекста:)
Я думаю, теперь вы, ребята, можете легко понять, почему мы не можем использовать Annotation в случае context-param, потому что нам нужно жестко кодировать эту Annotation с любым определенным сервлетом, и мы не можем этого сделать.......
Ответ 4
Можно указать данные прослушивателя содержимого сервлета, используя @WebServletContextListener. Например,
@WebServletContextListener
public class TestServletContextListener implements javax.servlet.ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
}
public void contextDestroyed(ServletContextEvent sce) {
....
}
}