Замените элемент context-param аннотацией Servlet 3.0 - PullRequest
10 голосов
/ 01 ноября 2011

Дано: веб-приложение Java EE 5 с файлом web.xml, имеющим фрагмент, подобный

<context-param>
    <description>c</description>
    <param-name>a</param-name>
    <param-value>b</param-value>
</context-param>

Что мне нужно сделать, чтобы перевести эту спецификацию контекстного параметра в стратегию, основанную на аннотациях.

Ответы [ 4 ]

9 голосов
/ 01 ноября 2011

Вы можете найти все 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 не является более подходящим вариантом для вас.

4 голосов
/ 20 октября 2012

Если вы используете Tomcat, вы можете использовать тег Parameter в context.xml, и он будет работать так же, как контекстный параметр, введенный в web.xml. Таким образом, вы можете использовать @WebInitParam для перехвата контекстной переменной.

http://tomcat.apache.org/tomcat-5.5-doc/config/context.html#Context_Parameters

1 голос
/ 17 февраля 2016

Можно указать данные о приемнике содержимого сервлета, используя @WebServletContextListener.Например,

 @WebServletContextListener 

public class TestServletContextListener implements javax.servlet.ServletContextListener { 
    public void contextInitialized(ServletContextEvent sce) { 

    } 

    public void contextDestroyed(ServletContextEvent sce) { 
        .... 
    } 
}
1 голос
/ 10 июня 2015

Ну, я думаю, что мы просто не можем жестко кодировать context-param , используя "Аннотация" , потому что есть логическая причина этого: я уверен, что вы, ребята, знаете, аннотации всегда жестко закодированыв сервлете и сервлете , никогда не загружаемом контейнером в память для обслуживания клиентского запроса до тех пор, пока клиент не выполнит первый запрос (прочитайте жизненный цикл сервлета) ,

Так что же произойдет, если мы захотим получить значения из "context-param" , который жестко запрограммирован с использованием Annotation в каком-либо другом сервлете?И сервлет , обернутый аннотацией context-param , все еще не загружен в память, поэтому мы не можем получить объект для контекста :)

Я думаю, что теперь вы, ребята, можете легко догадаться, почему мы не можем использовать аннотацию в случае context-param , потому что нам нужно жестко закодировать эту аннотацию любым конкретным сервлетом, а мы не можем этого сделать .......

...