首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >init-param和context-param

init-param和context-param
EN

Stack Overflow用户
提问于 2015-02-08 18:25:43
回答 3查看 166.6K关注 0票数 93

<init-param><context-param>之间的区别是什么?

EN

回答 3

Stack Overflow用户

发布于 2015-02-08 18:43:40

考虑一下web.xml中的以下定义

代码语言:javascript
复制
<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中的以下定义

代码语言:javascript
复制
 <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”);

票数 8
EN

Stack Overflow用户

发布于 2015-02-08 18:52:42

代码语言:javascript
复制
<context-param> 
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:/META-INF/PersistenceContext.xml
    </param-value>
</context-param>

我已经在<context-param>中初始化了我的servlet,因为我所有的servlet都将在MVC框架中与数据库交互。

然而,

代码语言:javascript
复制
<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>

票数 7
EN

Stack Overflow用户

发布于 2015-02-08 18:37:43

如果您想要初始化特定servlet的某些参数,将使用<init-param>。当请求首先到达servlet时,它的init方法将被调用,然后调用doGet/doPost,而如果您想为整个应用程序初始化某个变量,则需要使用<context-param>。每个servlet都可以访问上下文变量。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28392888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档