<init-param>
和 <context-param>
有什么区别?
<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"));
如果您想存储应用程序中通用且不经常更改的数据,可以使用<context-param>
标签代替servletContext.setAttribute()
方法。关于如何使用<context-param>
和ServletContext.setAttribute()
,您可以查看这个问题了解更多信息。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");
<init-param>
的方法: ServletContext::setInitParameter(String name, String value)
但是没有为设置上下文参数<context-param>
提供一个。 - Basil Bourque考虑在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>
这个上下文参数可供Web应用程序的所有部分使用,并且可以从上下文对象中检索。例如,getServletContext().getInitParameter(“dbname”);
从JSP中,您可以使用应用程序内置对象访问上下文参数。例如,application.getAttribute(“dbname”);
<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>
在上述代码中,我正在配置jersey和ApplicationContext.xml
仅适用于rest层。为此,我使用</init-param>
<init-param>
用于为特定的servlet初始化一些参数。当请求到达servlet时,首先调用其init
方法,然后是doGet/doPost
方法。如果您想为整个应用程序初始化某些变量,则需要使用<context-param>
。每个servlet都可以访问上下文变量。
<init-param>
和<context-param>
有什么区别呢?
单个 servlet 和 多个 servlet 的区别。
其他答案给出了详细信息,这里是总结:
一个 web 应用程序即“上下文”由一个或多个 servlets 组成。
<init-param>
定义了在上下文中只对单个特定的 servlet 可用的值。<context-param>
定义了在上下文中对所有 servlets 可用的值。