如何在不重新编译的情况下覆盖servlet的@WebInitParam



我有一个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都可以访问的一些公共变量。

相关内容

最新更新