<init-param>和<context-param>之间的区别是什么?
发布于 2015-02-08 18:43:40
考虑一下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是在servlet元素中定义的。这意味着它只可用于声明中的servlet,而不能用于web应用程序的其他部分。如果希望此参数对应用程序的其他部分可用,例如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>此上下文参数对web应用程序的所有部分都可用,并且可以从上下文对象中检索。例如,getServletContext().getInitParameter(“dbname”);
在JSP中,您可以使用应用程序隐式对象访问上下文参数。例如,application.getAttribute(“dbname”);
发布于 2015-02-08 18:52:42
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/META-INF/PersistenceContext.xml
</param-value>
</context-param>我已经在<context-param>中初始化了我的servlet,因为我所有的servlet都将在MVC框架中与数据库交互。
然而,
<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>在前面的代码中,我只将jersey和ApplicationContext.xml配置为rest层。出于同样的原因,我使用</init-param>
发布于 2015-02-08 18:37:43
如果您想要初始化特定servlet的某些参数,将使用<init-param>。当请求首先到达servlet时,它的init方法将被调用,然后调用doGet/doPost,而如果您想为整个应用程序初始化某个变量,则需要使用<context-param>。每个servlet都可以访问上下文变量。
https://stackoverflow.com/questions/28392888
复制相似问题