Варианты использования для @WebInitParam
Поскольку спецификация Servlet 3.0 позволяет объявить метаданные метаданных сервлета как аннотацию в классе сервлета:
@WebServlet(name="appInfoServlet", urlPatterns ="/appInfo", initParams = @WebInitParam(name="ocwd.deployer.email", value="[email protected]"))
public class AppInfoServlet extends HttpServlet {
}
То, что я не понимаю, является прецедентом для хранения параметров init в том же классе, что и сервлет. Насколько я понимаю, эти параметры должны храниться отдельно от класса и помещаться в дескриптор развертывания.
Какие существуют случаи для указания параметров init в аннотации @WebServlet
?
Ответы
Ответ 1
Аннотации используются для указания значений по умолчанию.
В JavaEE свойства развертывания также могут быть предоставлены с помощью аннотаций. Учитывая значения аннотаций, дескриптор развертывания i.e, web.xml все еще можно использовать для переопределения значений по умолчанию, предоставленных аннотациями.
В приведенном выше примере init-param
можно переопределить, настроив servlet
с соответствующим именем в web.xml
:
<servlet>
<servlet-name>appInfoServlet</servlet-name>
<init-param>
<param-name>ocwd.deployer.email</param-name>
<param-value>[email protected]</param-value>
</init-param>
</servlet>
Ответ 2
Я могу подумать об одном, с моей головы: предоставить значение по умолчанию (т.е. дизайнером класса).
Если пользователь этого класса отлично со значением по умолчанию, ему не нужно ничего добавлять и просто использует. Если нет - он может изменить его с помощью DD.
Ответ 3
Я думаю, что пример использования подобен другим вариантам использования для других аннотаций в различных рамках, где мы использовали отдельный XML до аннотаций.
Вы можете сказать то же самое о аннотациях JAXB. Действительно, вы можете реализовать один класс и использовать несколько стратегий его сопоставления с XML. Но как только вы переходите к аннотации, вы создаете плотную связь между классом и метаданными. То же самое имеет значение для аннотаций Spring. И т.д.
На практике мы редко развертываем один и тот же сервлет дважды с использованием другой конфигурации или используете один и тот же EJB дважды или класс карты для разных схем XML. Но в этом случае очень удобно хранить метаданные вместе с кодом. Эта проблема решается в java с аннотациями.
Нижняя строка: используйте это определение в конкретном приложении, где каждый сервлет имеет определенную функциональность и роль и по определению не может многократно использоваться и тесно связан с его сопоставлением и конфигурацией URL. Не используйте это, если вы создаете среду, такую как Struts или контроллер Spring. В этом случае программист-программист должен иметь возможность настроить сервлет.