Варианты использования для @WebInitParam - PullRequest
16 голосов
/ 09 ноября 2011

Начиная со спецификации Servlet 3.0 существует возможность объявления метаданных отображения сервлета в качестве аннотации для класса сервлета:

@WebServlet(name="appInfoServlet", urlPatterns ="/appInfo", initParams = @WebInitParam(name="ocwd.deployer.email", value="admin@example.com"))
public class AppInfoServlet extends HttpServlet {

}

Однако я не понимаю, является ли вариант использования для сохранения параметров инициализации в одном и том жекласс как сервлет.Насколько я понимаю, эти параметры должны храниться отдельно от класса и помещаться в дескриптор развертывания.

Какие существуют варианты использования для указания параметров инициализации в аннотации @WebServlet?

Ответы [ 3 ]

17 голосов
/ 09 ноября 2011

Аннотации используются для предоставления значений по умолчанию.

В JavaEE свойства развертывания также могут быть предоставлены с использованием аннотаций. Учитывая значения для аннотаций, дескриптор развертывания, т.е. web.xml, все еще может использоваться для переопределения значений по умолчанию, предоставляемых аннотациями.


В приведенном выше примере init-param можно переопределить, настроив servlet с соответствующим именем в web.xml:

  <servlet>
    <servlet-name>appInfoServlet</servlet-name>
    <init-param>
        <param-name>ocwd.deployer.email</param-name>
        <param-value>noreply@example.com</param-value>
    </init-param>
  </servlet>
3 голосов
/ 09 ноября 2011

Я могу подумать об одном из макушки головы: предоставит значение по умолчанию (т.е. разработчиком класса).

Если пользователь этого класса в порядке со значением по умолчанию, ему не нужно ничего добавлять, он просто использует его. Если нет - он может изменить его с помощью DD.

2 голосов
/ 09 ноября 2011

Я думаю, что сценарий использования подобен другим сценариям использования для других аннотаций в различных средах, где мы использовали отдельный XML до аннотаций.

То же самое можно сказать и о аннотациях JAXB.Действительно, вы можете реализовать один класс и использовать несколько стратегий его отображения в XML.Но как только вы переходите к аннотациям, вы создаете тесную связь между классом и метаданными.То же самое относится и к весенним аннотациям.И т. Д.

На практике мы редко внедряем один и тот же сервлет дважды, используя разные конфигурации, или используем один и тот же EJB дважды или сопоставляем класс с разными схемами XML.Но в этом случае очень удобно хранить метаданные вместе с кодом.Эта проблема решена в Java с аннотациями.

Итог: используйте это определение в конкретном приложении, где каждый сервлет имеет определенную функциональность и роль и по определению не может быть повторно использован и тесно связан с отображением и конфигурацией URL.Не используйте это, если вы создаете среду, такую ​​как Struts или Spring controller.В этом случае прикладной программист должен иметь возможность настроить сервлет.

...