我有一个Java Servlet,带有以下@WebServlet
注释:
@WebServlet(urlPatterns={"/GetInfo"},
initParams={
@WebInitParam(name="directory.path", value="/appli/PdlInfo")})
如何在不重新编译servlet的情况下更改@WebInitParam
的值?
在Servlet 3.0中,注释只提供默认值。只需使用web.xml文件(或部署时容器上可用的工具)就可以更改它
@WebServlet(
name="GetInfo"
urlPatterns={"/GetInfo"},
initParams={@WebInitParam(name="directory.path",value="/appli/PdlInfo")}
)
对于web.xml,这里有一个片段:
<servlet>
<servlet-name>GetInfo</servlet-name>
<init-param>
<param-name>directory.path</param-name>
<param-value>/other/path</param-value>
</init-param>
</servlet>
是否可以在不重新编译类的情况下重写"directory.path"变量。在WEB-INF
文件夹中添加一个web.xml
文件,该文件定义了一个新的init参数。
将servlet-class
更改为您正在使用的实际servlet类。
需要重新启动容器以考虑更改,但不需要重新编译/重建。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>MyServletLinkName</servlet-name>
<servlet-class>your.path.to.servlet.YourServlet</servlet-class>
<init-param>
<param-name>directory.path</param-name>
<param-value>/new/path</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>MyServletLinkName</servlet-name>
<url-pattern>/GetInfo</url-pattern>
</servlet-mapping>
</web-app>
编辑:
如果你想使用一个在应用程序运行时更改的动态参数,你可以使用一个由线程监视并以X秒为间隔检查的属性文件。
您可以将包含文件位置的上下文参数与上下文初始化的侦听器一起使用。侦听器创建一个观察线程,该线程更新所有servlet都可以访问的一些公共变量。