我有一个带有以下@WebServlet
注释的 Java Servlet:
@WebServlet(urlPatterns={"/GetInfo"},
initParams={
@WebInitParam(name="directory.path", value="/appli/PdlInfo")})
如何在@WebInitParam
不重新编译 servlet 的情况下更改 的值?
我有一个带有以下@WebServlet
注释的 Java Servlet:
@WebServlet(urlPatterns={"/GetInfo"},
initParams={
@WebInitParam(name="directory.path", value="/appli/PdlInfo")})
如何在@WebInitParam
不重新编译 servlet 的情况下更改 的值?
在 Servlet 3.0 中,注释只提供默认值。只需使用 web.xml 文件(或部署时容器上可用的工具),您就可以更改它。无论哪种情况,您都需要给 servlet 一个有意义的名称:
@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.xml
文件添加到您的WEB-INF
文件夹中,该文件定义了一个新的 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 都可以访问它。