<init-param>
和<context-param>
!和有什么不一样?
Answers:
<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>
VS使用的更多信息,请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>
。
考虑以下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”);
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/META-INF/PersistenceContext.xml
</param-value>
</context-param>
我已经初始化了我PersistenceContext.xml
的<context-param>
因为我所有的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
唯一的休息层。对于同一我正在使用</init-param>
<init-param>
如果要为特定的servlet初始化一些参数,将使用。当请求首先到达servlet时,init
将调用其方法,然后doGet/doPost
,如果要为整个应用程序初始化一些变量,则需要使用<context-param>
。每个servlet都可以访问上下文变量。