@RC. Essa pergunta em nenhum lugar discute a diferença entre esses dois parâmetros .. É apenas sobre propriedades carregadas nos dois contextos ..
Rohit Jain
Parei no título, meu mal.
Respostas:
122
<init-param>e <context-param>são parâmetros estáticos que são armazenados no arquivo web.xml. Se você tiver dados que não mudam com frequência, pode armazená-los em um deles.
Se você deseja armazenar dados específicos que estão confinados a um escopo de servlet específico , você pode usar. <init-param>Qualquer coisa que você declarar dentro <init-param>é acessível apenas para aquele servlet específico. O init-param é declarado dentro da <servlet>tag.
e você pode acessar esses parâmetros no servlet da seguinte forma:
out.println(getInitParameter("Greetings"));
Se você deseja armazenar dados que são comuns a todo o aplicativo e não mudam com frequência, você pode usar o método em <context-param>vez do servletContext.setAttribute()contexto do aplicativo. Para obter mais informações sobre o uso do <context-param>VS, ServletContext.setAttribute()dê uma olhada nesta pergunta . context-param são declarados sob a tag web-app. Você pode declarar e acessar o da <context-param>seguinte forma
Você pode ver que init-param é definido dentro de um elemento de servlet. Isso significa que ele está disponível apenas para o servlet sob declaração e não para outras partes do aplicativo da web. Se você deseja que este parâmetro esteja disponível para outras partes do aplicativo, digamos que um JSP, ele precisa ser explicitamente passado para o JSP. Por exemplo, passado como request.setAttribute (). Isso é altamente ineficiente e difícil de codificar.
Portanto, se você deseja obter acesso a valores globais de qualquer lugar dentro do aplicativo sem passar explicitamente esses valores, você precisa usar os parâmetros Context Init.
Este parâmetro de contexto está disponível para todas as partes do aplicativo da web e pode ser recuperado do objeto Context. Por exemplo, getServletContext (). GetInitParameter (“dbname”);
De um JSP, você pode acessar o parâmetro de contexto usando o objeto implícito do aplicativo. Por exemplo, application.getAttribute (“dbname”);
<init-param>será usado se você quiser inicializar algum parâmetro para um servlet específico. Quando a solicitação chega ao servlet primeiro, seu initmétodo será chamado então, doGet/doPostse você quiser inicializar alguma variável para a aplicação inteira, você precisará usar <context-param>. Cada servlet terá acesso à variável de contexto.
Respostas:
<init-param>
e<context-param>
são parâmetros estáticos que são armazenados no arquivo web.xml. Se você tiver dados que não mudam com frequência, pode armazená-los em um deles.Se você deseja armazenar dados específicos que estão confinados a um escopo de servlet específico , você pode usar.
<init-param>
Qualquer coisa que você declarar dentro<init-param>
é acessível apenas para aquele servlet específico. O init-param é declarado dentro da<servlet>
tag.e você pode acessar esses parâmetros no servlet da seguinte forma:
out.println(getInitParameter("Greetings"));
Se você deseja armazenar dados que são comuns a todo o aplicativo e não mudam com frequência, você pode usar o método em
<context-param>
vez doservletContext.setAttribute()
contexto do aplicativo. Para obter mais informações sobre o uso do<context-param>
VS,ServletContext.setAttribute()
dê uma olhada nesta pergunta . context-param são declarados sob a tagweb-app
. Você pode declarar e acessar o da<context-param>
seguinte forma<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>
Uso no aplicativo em um JSP ou Servlet
getServletContext().getInitParameter("Country"); getServletContext().getInitParameter("Age");
fonte
<init-param>
:ServletContext::setInitParameter(String name, String value)
mas não um para definir um parâmetro de contexto<context-param>
.Considere a definição abaixo em 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>
Você pode ver que init-param é definido dentro de um elemento de servlet. Isso significa que ele está disponível apenas para o servlet sob declaração e não para outras partes do aplicativo da web. Se você deseja que este parâmetro esteja disponível para outras partes do aplicativo, digamos que um JSP, ele precisa ser explicitamente passado para o JSP. Por exemplo, passado como request.setAttribute (). Isso é altamente ineficiente e difícil de codificar.
Portanto, se você deseja obter acesso a valores globais de qualquer lugar dentro do aplicativo sem passar explicitamente esses valores, você precisa usar os parâmetros Context Init.
Considere a seguinte definição em web.xml
Este parâmetro de contexto está disponível para todas as partes do aplicativo da web e pode ser recuperado do objeto Context. Por exemplo, getServletContext (). GetInitParameter (“dbname”);
De um JSP, você pode acessar o parâmetro de contexto usando o objeto implícito do aplicativo. Por exemplo, application.getAttribute (“dbname”);
fonte
Eu inicializei meu
PersistenceContext.xml
no<context-param>
porque todos os meus servlets estarão interagindo com o banco de dados no framework 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>
no código citado, estou configurando jersey e
ApplicationContext.xml
apenas a camada de descanso. Pelo mesmo estou usando</init-param>
fonte
<init-param>
será usado se você quiser inicializar algum parâmetro para um servlet específico. Quando a solicitação chega ao servlet primeiro, seuinit
método será chamado então,doGet/doPost
se você quiser inicializar alguma variável para a aplicação inteira, você precisará usar<context-param>
. Cada servlet terá acesso à variável de contexto.fonte
Servlet único versus servlets múltiplos.
Outras respostas fornecem detalhes, mas aqui está o resumo:
Um aplicativo da web, ou seja, um “contexto”, é composto por um ou mais servlets .
<init-param>
define um valor disponível para um único servlet específico dentro de um contexto.<context-param>
define um valor disponível para todos os servlets em um contexto.fonte