我有一个带有以下@WebServlet
注释的Java Servlet:
@WebServlet(urlPatterns={"/GetInfo"},
initParams={
@WebInitParam(name="directory.path", value="/appli/PdlInfo")})
如何在不重新编译servlet的情况下更改@WebInitParam
的值?
答案 0 :(得分:3)
在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>
答案 1 :(得分:0)
是否可以覆盖“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都可以访问的公共变量。