Замените элемент 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) { 
        .... 
    } 
}