Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java init参数和context参数_Java_Servlets - Fatal编程技术网

Java init参数和context参数

Java init参数和context参数,java,servlets,Java,Servlets,和之间有什么区别 如果要为特定servlet初始化某些参数,将使用。当请求首先到达servlet时,它的init方法将被调用,然后doGet/doPost而如果您想为整个应用程序初始化一些变量,则需要使用。每个servlet都可以访问上下文变量。请考虑web.xml中的以下定义 <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>TestServlet&l

之间有什么区别

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

请考虑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>
 <web-app>
      <context-param>
           <param-name>myprop</param-name>
           <param-value>value</param-value>
      </context-param>
 </web-app>

你好世界
TestServlet
myprop
价值
您可以看到init param是在servlet元素中定义的。这意味着它仅对声明下的servlet可用,而对web应用程序的其他部分不可用。如果希望此参数可用于应用程序的其他部分(比如JSP),则需要显式地将其传递给JSP。例如,实例作为request.setAttribute()传递。这是非常低效和难以编码的

因此,如果您希望在不显式传递这些值的情况下从应用程序中的任何位置访问全局值,则需要使用Context Init参数

考虑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>
 <web-app>
      <context-param>
           <param-name>myprop</param-name>
           <param-value>value</param-value>
      </context-param>
 </web-app>

myprop
价值
此上下文参数可用于web应用程序的所有部分,并且可以从上下文对象中检索。例如,getServletContext().getInitParameter(“dbname”)

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

在前面提到的代码中,我仅将jersey和
ApplicationContext.xml
配置为rest层。同样,我使用的

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

如果要存储限制在特定servlet范围内的特定数据,则可以使用
。在
内声明的任何内容仅可用于该特定servlet。在
标记内声明init param

<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>
如果要存储整个应用程序的通用数据,并且如果数据不经常更改,则可以使用应用程序上下文的
而不是
servletContext.setAttribute()
方法。有关
VS
ServletContext.setAttribute()
用法的更多信息,请查看以下内容上下文参数在标记
web app
下声明。 您可以按如下方式声明和访问

<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>
之间有什么区别

单个servlet与多个servlet

其他答案给出了详细信息,但以下是总结:

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

  • 定义上下文中单个特定servlet可用的值
  • 定义上下文中所有servlet可用的值

@RC。这个问题没有讨论这两个参数之间的区别。。这只是关于在两个上下文中加载的属性。我在标题处停了下来,我的坏。如何以编程方式设置上下文参数?@gaurav有趣的是,我可以找到
的方法:但没有设置上下文参数的方法
<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>
getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");