【问题标题】:init-param and context-param初始化参数和上下文参数
【发布时间】:2015-04-08 04:42:17
【问题描述】:

<init-param><context-param> 有什么区别!?

【问题讨论】:

  • @RC。那个问题无处讨论这两个参数之间的区别..它只是关于在两个上下文中加载的属性..
  • 我停在标题上,我的错。

标签: java servlets


【解决方案1】:

<init-param><context-param> 是存储在 web.xml 文件中的静态参数。如果您有任何不经常更改的数据,您可以将其存储在其中一个中。

如果您想存储限制在特定 servlet 范围的特定数据,那么您可以使用 <init-param> 。您在 <init-param> 中声明的任何内容都只能用于该特定 servlet。 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>

您可以在 servlet 中访问这些参数,如下所示:

out.println(getInitParameter("Greetings"));

如果您想存储整个应用程序通用的数据,并且如果它不经常更改,您可以使用&lt;context-param&gt; 代替应用程序上下文的servletContext.setAttribute() 方法。有关&lt;context-param&gt; VS ServletContext.setAttribute() 用法的更多信息,请查看questioncontext-param 在标签web-app 下声明。 您可以如下声明和访问&lt;context-param&gt;

<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");

【讨论】:

【解决方案2】:

考虑以下 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 应用程序的所有部分,并且可以从 Context 对象中检索。例如,getServletContext().getInitParameter(“dbname”);

从 JSP 中,您可以使用应用程序隐式对象访问上下文参数。例如 application.getAttribute(“dbname”);

【讨论】:

    【解决方案3】:
    <context-param> 
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath*:/META-INF/PersistenceContext.xml
        </param-value>
    </context-param>
    

    我已经在&lt;context-param&gt; 中初始化了我的PersistenceContext.xml,因为我所有的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>
    

    在上述代码中,我将球衣和ApplicationContext.xml 配置为仅用于休息层。同样,我正在使用&lt;/init-param&gt;

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        &lt;init-param&gt;&lt;context-param&gt; 有什么区别!?

        单个 servlet多个 servlet。

        其他答案提供了详细信息,但这里是摘要:

        Web 应用程序,即“上下文”,由一个或多个 servlet 组成。

        • &lt;init-param&gt; 定义了一个可用于上下文中单个特定 servlet 的值。
        • &lt;context-param&gt; 定义了一个可供上下文中所有 servlet 使用的值。

        【讨论】:

          猜你喜欢
          • 2013-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多