3

我有一个带有以下@WebServlet注释的 Java Servlet:

@WebServlet(urlPatterns={"/GetInfo"},
            initParams={
                @WebInitParam(name="directory.path", value="/appli/PdlInfo")})

如何在@WebInitParam不重新编译 servlet 的情况下更改 的值?

4

2 回答 2

4

在 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>
于 2013-02-14T14:41:29.290 回答
1

是否可以在不重新编译类的情况下覆盖“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 都可以访问它。

于 2013-02-14T14:38:36.883 回答