初始化参数和上下文参数
init-param and context-param
<init-param>
和 <context-param>
有什么区别!?
<init-param>
如果你想为特定的 servlet 初始化一些参数,将被使用。当请求首先到达 servlet 时,它的 init
方法将被调用,然后 doGet/doPost
而如果你想为整个应用程序初始化一些变量,你将需要使用 <context-param>
。每个 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>
您可以看到 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(“数据库名称”);
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/META-INF/PersistenceContext.xml
</param-value>
</context-param>
我已经在 <context-param>
中初始化了我的 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
仅用于休息层。同样,我正在使用 </init-param>
<init-param>
和 <context-param>
是存储在 web.xml 文件中的静态参数。如果您有任何不经常更改的数据,您可以将其存储在其中一个中。
如果你想存储限制在特定servlet范围的特定数据,那么你可以使用<init-param>
。你在<init-param>
中声明的任何东西只能访问特定的 servlet.The 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"));
如果要存储 整个应用程序 通用的数据,并且不经常更改,则可以使用 <context-param>
而不是 servletContext.setAttribute()
应用上下文的方法。有关 <context-param>
VS ServletContext.setAttribute()
用法的更多信息,请查看此 question。 context-param 在标签 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");
What is the difference between <init-param>
and <context-param>
!?
单个 servlet 与 多个 servlet。
其他答案提供了详细信息,但这里是摘要:
一个网络应用程序,即一个“上下文”,由一个或多个servlet。
组成
<init-param>
定义上下文中单个特定 servlet 可用的值。
<context-param>
定义了上下文中所有 servlet 可用的值。
<init-param>
和 <context-param>
有什么区别!?
<init-param>
如果你想为特定的 servlet 初始化一些参数,将被使用。当请求首先到达 servlet 时,它的 init
方法将被调用,然后 doGet/doPost
而如果你想为整个应用程序初始化一些变量,你将需要使用 <context-param>
。每个 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>
您可以看到 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(“数据库名称”);
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/META-INF/PersistenceContext.xml
</param-value>
</context-param>
我已经在 <context-param>
中初始化了我的 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
仅用于休息层。同样,我正在使用 </init-param>
<init-param>
和 <context-param>
是存储在 web.xml 文件中的静态参数。如果您有任何不经常更改的数据,您可以将其存储在其中一个中。
如果你想存储限制在特定servlet范围的特定数据,那么你可以使用<init-param>
。你在<init-param>
中声明的任何东西只能访问特定的 servlet.The 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"));
如果要存储 整个应用程序 通用的数据,并且不经常更改,则可以使用 <context-param>
而不是 servletContext.setAttribute()
应用上下文的方法。有关 <context-param>
VS ServletContext.setAttribute()
用法的更多信息,请查看此 question。 context-param 在标签 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");
What is the difference between
<init-param>
and<context-param>
!?
单个 servlet 与 多个 servlet。
其他答案提供了详细信息,但这里是摘要:
一个网络应用程序,即一个“上下文”,由一个或多个servlet。
组成<init-param>
定义上下文中单个特定 servlet 可用的值。<context-param>
定义了上下文中所有 servlet 可用的值。