инит-парам и контекст-парам
в чем разница между <init-param>
и <context-param>
!?
4 ответа:
<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>
VSServletContext.setAttribute()
взгляните на это вопрос. контекст-парам объявляются под тегом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");
рассмотрим следующее определение в интернете.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. Например, передается как запрос.setAttribute (). Это очень неэффективно и трудно кодировать.
рассмотрим следующее определение в web.xml
<web-app> <context-param> <param-name>myprop</param-name> <param-value>value</param-value> </context-param> </web-app>
этот параметр контекста доступен для всех частей веб-приложения и может быть получен из объекта контекста. Например, getServletContext().getInitParameter ("dbname");
из JSP вы можете получить доступ параметр контекста, использующий неявный объект приложения. Например, приложение.getAttribute ("dbname");
<init-param>
будет использоваться, если вы хотите инициализировать какой-либо параметр для конкретного сервлета. Когда запрос приходит к сервлету сначала егоinit
метод будет вызван тогдаdoGet/doPost
в то время как если вы хотите инициализировать некоторую переменную для всего приложения вам нужно будет использовать<context-param>
. Каждый сервлет будет иметь доступ к переменной контекста.
<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:/META-INF/PersistenceContext.xml </param-value> </context-param>
Я проинициализировал
PersistenceContext.xml
внутри<context-param>
потому что все мои сервлеты будут взаимодействовать с базой данных в MVC framework.Howerver,
<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>