init-param и context-param

88

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

мина
источник
@RC. В этом вопросе не обсуждается разница между этими двумя параметрами .. Речь идет только о свойствах, загруженных в двух контекстах ..
Рохит Джайн,
Я остановился на названии, мое плохое.

Ответы:

120

<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");
Саи Упадхьяюла
источник
1
как программно установить контекстный параметр?
Gaurav
2
@gaurav Интересно, я могу найти метод для <init-param>: ServletContext::setInitParameter(String name, String value)но не для установки параметра контекста <context-param>.
Basil
8

Рассмотрим приведенное ниже определение в 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»);

SMA
источник
6
<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>

Анкур Пиюш
источник
5

<init-param>будет использоваться, если вы хотите инициализировать какой-либо параметр для определенного сервлета. Когда запрос сначала поступает на сервлет, его initметод будет вызван, тогда doGet/doPostкак если вы хотите инициализировать некоторую переменную для всего приложения, вам нужно будет использовать <context-param>. Каждый сервлет будет иметь доступ к переменной контекста.

Адил Ахмад
источник
4

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

Один сервлет против нескольких сервлетов.

Другие ответы содержат подробности, но вот краткое изложение:

Веб-приложение, то есть «контекст», состоит из одного или нескольких сервлетов .

  • <init-param>определяет значение, доступное отдельному сервлету в контексте.
  • <context-param>определяет значение, доступное для всех сервлетов в контексте.
Василий Бурк
источник