В чем разница между <init-param>
и <context-param>
!?
Ответы:
<init-param>
и <context-param>
являются статическими параметрами, которые хранятся в файле web.xml. Если у вас есть данные, которые не меняются часто, вы можете сохранить их в одном из них.
Если вы хотите сохранить определенные данные, которые ограничены определенной областью действия сервлета , вы можете использовать. <init-param>
Все, что вы объявляете внутри, <init-param>
доступно только для этого конкретного сервлета. Init -param объявляется внутри <servlet>
тега.
<servlet>
<display-name>HelloWorldServlet</display-name>
<servlet-name>HelloWorldServlet</servlet-name>
<init-param>
<param-name>Greetings</param-name>
<param-value>Hello</param-value>
</init-param>
</servlet>
и вы можете получить доступ к этим параметрам в сервлете следующим образом:
out.println(getInitParameter("Greetings"));
Если вы хотите хранить данные, общие для всего приложения, и если они не меняются часто, вы можете использовать <context-param>
вместо servletContext.setAttribute()
метода контекста приложения. Для получения дополнительной информации об использовании <context-param>
VS см. ServletContext.setAttribute()
Этот вопрос . context-param объявлены под тегом web-app
. Вы можете объявить и получить доступ к <context-param>
следующему
<web-app>
<context-param>
<param-name>Country</param-name>
<param-value>India</param-value>
</context-param>
<context-param>
<param-name>Age</param-name>
<param-value>24</param-value>
</context-param>
</web-app>
Использование в приложении в JSP или сервлете
getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");
<init-param>
: ServletContext::setInitParameter(String name, String value)
но не для установки параметра контекста <context-param>
.
Рассмотрим приведенное ниже определение в web.xml.
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>TestServlet</servlet-class>
<init-param>
<param-name>myprop</param-name>
<param-value>value</param-value>
</init-param>
</servlet>
Вы можете видеть, что init-param определен внутри элемента сервлета. Это означает, что он доступен только сервлету под объявлением, а не другим частям веб-приложения. Если вы хотите, чтобы этот параметр был доступен другим частям приложения, скажем, JSP, это необходимо явно передать JSP. Например, передается как request.setAttribute (). Это очень неэффективно и сложно кодировать.
Поэтому, если вы хотите получить доступ к глобальным значениям из любого места в приложении без явной передачи этих значений, вам необходимо использовать параметры Context Init.
Рассмотрим следующее определение в web.xml
<web-app>
<context-param>
<param-name>myprop</param-name>
<param-value>value</param-value>
</context-param>
</web-app>
Этот параметр контекста доступен для всех частей веб-приложения и может быть получен из объекта Context. Например, getServletContext (). GetInitParameter («dbname»);
Из JSP вы можете получить доступ к параметру контекста, используя неявный объект приложения. Например, application.getAttribute («dbname»);
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/META-INF/PersistenceContext.xml
</param-value>
</context-param>
Я инициализировал свой PersistenceContext.xml
внутри, <context-param>
потому что все мои сервлеты будут взаимодействовать с базой данных в среде MVC.
Хауэрвер,
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:ApplicationContext.xml
</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.organisation.project.rest</param-value>
</init-param>
</servlet>
в вышеупомянутом коде я настраиваю трикотаж и ApplicationContext.xml
единственный слой для отдыха. Для того же я использую</init-param>
<init-param>
будет использоваться, если вы хотите инициализировать какой-либо параметр для определенного сервлета. Когда запрос сначала поступает на сервлет, его init
метод будет вызван, тогда doGet/doPost
как если вы хотите инициализировать некоторую переменную для всего приложения, вам нужно будет использовать <context-param>
. Каждый сервлет будет иметь доступ к переменной контекста.
В чем разница между
<init-param>
и<context-param>
!?
Один сервлет против нескольких сервлетов.
Другие ответы содержат подробности, но вот краткое изложение:
Веб-приложение, то есть «контекст», состоит из одного или нескольких сервлетов .
<init-param>
определяет значение, доступное отдельному сервлету в контексте.<context-param>
определяет значение, доступное для всех сервлетов в контексте.