Init-param и context-param - программирование
Подтвердить что ты не робот

Init-param и context-param

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

4b9b3361

Ответ 1

<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");

Ответ 2

Рассмотрим приведенное ниже определение в 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(). Это очень неэффективно и сложно кодировать.

Итак, если вы хотите получить доступ к глобальным значениям из любого места приложения без явно переданных этих значений, вам нужно использовать параметры контекста 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" );

Ответ 3

<context-param> 
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:/META-INF/PersistenceContext.xml
    </param-value>
</context-param>

Я инициализировал мой PersistenceContext.xml внутри <context-param>, потому что все мои сервлеты будут взаимодействовать с базой данных в рамках MVC.

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>

Ответ 4

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

Ответ 5

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

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

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

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

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