инит-парам и контекст-парам


в чем разница между <init-param> и <context-param> !?

4 62

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> VS ServletContext.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>