init-param та context-param


88

У чому різниця між <init-param>і <context-param>!?


@RC. Це запитання де-небудь обговорює різницю між цими двома параметрами .. Йдеться лише про властивості, завантажені у двох контекстах ..
Рохіт Джайн

Я зупинився на титулі, мій поганий.

Відповіді:


120

<init-param>і <context-param>є статичними параметрами, які зберігаються у файлі web.xml. Якщо у вас є дані, які не змінюються часто, ви можете зберегти їх в одному з них.

Якщо ви хочете зберегти певні дані, які обмежуються певною сферою сервлету , тоді ви можете використовувати. <init-param>Все, що ви заявляєте всередині <init-param>, доступне лише для цього конкретного сервлету. Параметр init-параметр оголошується всередині <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 Bourque

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


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

Я не започатковано My 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>


5

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


4

У чому різниця між <init-param>і <context-param>!?

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

Інші відповіді дають деталі, але ось короткий виклад:

Веб-програма, тобто "контекст", складається з одного або декількох сервлетів .

  • <init-param>визначає значення, доступне одному конкретному сервлету в контексті.
  • <context-param>визначає значення, доступне для всіх сервлетів у контексті.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.