В чем разница между Context-param и init-param [duplicate]

Компилятор предупреждает вас, что quantit никогда не инициализируется и всегда будет null .

Вероятно, вы должны инициализировать его экземпляром класс, который происходит из ImageManipulation.Quantizer (вы не можете создать экземпляр Quantizer , потому что это абстрактный класс):

  private static Quantizer quantit = new QuantizerImplementation ();   

57
задан mina 8 February 2015 в 11:27
поделиться

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() посмотрите на этот вопрос . 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, либо в Servlet

getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");
83
ответ дан Neeraj 16 August 2018 в 02:33
поделиться

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

5
ответ дан Adeel Ahmad 16 August 2018 в 02:33
поделиться
<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>

5
ответ дан Ankur Piyush 16 August 2018 в 02:33
поделиться

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

Рассмотрим следующее определение в сети. 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");

8
ответ дан SMA 16 August 2018 в 02:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: