init-param 和 context-param

2022-08-31 10:43:17

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


答案 1

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

如果要存储限制在特定 Servlet 作用域内的特定数据,则可以使用 。您在其中声明的任何内容只能对该特定 servlet 访问。初始化参数在标记内声明。<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>

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

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

如果要存储整个应用程序通用的数据,并且如果它不经常更改,则可以使用应用程序上下文的方法代替方法。有关VS用法的更多信息,请查看此问题context-param 在 标签 下声明。您可以声明和访问,如下所示<context-param>servletContext.setAttribute()<context-param>ServletContext.setAttribute()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");

答案 2

考虑以下网络定义.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”);


推荐