У чому різниця між <init-param>
і <context-param>
!?
Відповіді:
<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");
<init-param>
: ServletContext::setInitParameter(String name, String value)
але не один для встановлення параметра контексту <context-param>
.
Розглянемо наведене нижче визначення в 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”);
<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>
<init-param>
буде використано, якщо ви хочете ініціалізувати якийсь параметр для певного сервлету. Коли запит приходить до сервлету, спочатку init
буде викликаний його метод, тоді doGet/doPost
як якщо ви хочете ініціалізувати якусь змінну для цілого додатка, вам потрібно буде використовувати <context-param>
. Кожен сервлет матиме доступ до змінної контексту.
У чому різниця між
<init-param>
і<context-param>
!?
Один сервлет проти кількох сервлетів.
Інші відповіді дають деталі, але ось короткий виклад:
Веб-програма, тобто "контекст", складається з одного або декількох сервлетів .
<init-param>
визначає значення, доступне одному конкретному сервлету в контексті.<context-param>
визначає значення, доступне для всіх сервлетів у контексті.