【问题标题】:How to override @WebInitParam of servlet without recompilation?如何在不重新编译的情况下覆盖 servlet 的 @WebInitParam?
【发布时间】:2013-01-30 08:27:51
【问题描述】:

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

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

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

【问题讨论】:

  • 你应该看看你的 web.xml 的 init-param 部分

标签: java jakarta-ee servlets servlet-3.0


【解决方案1】:

在 Servlet 3.0 中,注解仅提供默认值。 只需使用 web.xml 文件(或部署时容器上可用的工具),您就可以更改它。无论哪种情况,您都需要为 servlet 指定一个有意义的名称:

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

对于 web.xml,这里是一个 sn-p:

  <servlet>
    <servlet-name>GetInfo</servlet-name>
    <init-param>
        <param-name>directory.path</param-name>
        <param-value>/other/path</param-value>
    </init-param>
  </servlet>

【讨论】:

    【解决方案2】:

    是否可以在不重新编译类的情况下覆盖“directory.path”变量。将web.xml 文件添加到您的WEB-INF 文件夹中,该文件定义了一个新的初始化参数。

    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 都可以访问的公共变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-31
      • 2013-04-18
      • 1970-01-01
      • 2014-01-28
      • 2012-09-09
      • 1970-01-01
      • 2011-04-07
      • 2010-12-14
      相关资源
      最近更新 更多