如何从 servlet 永久修改 web.xml
how to modify web.xml permanently from servlet
是否可以从 servlet 永久修改 web.xml 以便如果在运行时更改了任何上下文参数(或初始化参数或其他任何内容)值,即使在重新启动服务器后此更改也会反映出来?我目前正在使用 tomcat 8.
您始终可以在 java 代码中为脚本或批处理文件生成系统命令,该脚本或批处理文件接受输入,然后修改 web.xml 文件。但是您仍然需要重新启动 Tomcat 以使您的更改生效。它从配置文件加载到内存。
这样做确实是一种糟糕的做法 - 如果只是因为您必须在更新应用程序时跟踪更改。
如果您有这样的需求,您应该将您的配置保存在别处,例如在数据库中或在您的网络应用程序之外的某个文件中,这样您就可以部署您的网络应用程序而无需更改,但仍会读取您当前 运行 所在的系统配置。
不要忘记在备份中包含该配置 file/database 内容。
此外,AFAIK tomcat(在其默认配置中)监视 web.xml 并在检测到 web.xml 的更改后重新加载应用程序(例如,将其关闭并重新启动)- 这可能不是您期望的行为。不要忘记 tomcat 可能被配置为只部署一个 WAR 文件而不解压它——你甚至可能在磁盘上没有 web.xml 文件。它仍然可以驻留在 WAR 文件中(这是一种可能的配置,只是不是标准配置)
为什么要在运行时写入 web.xml。我觉得不对。
如果您需要配置运行时,您几乎可以使用注释和编程注册来实现所有这些。您可以在 web.xml 中进行的所有配置都可以使用它们完成。您可以创建和注册 servlet。
参考资料
是否可以从 servlet 永久修改 web.xml 以便如果在运行时更改了任何上下文参数(或初始化参数或其他任何内容)值,即使在重新启动服务器后此更改也会反映出来?我目前正在使用 tomcat 8.
您始终可以在 java 代码中为脚本或批处理文件生成系统命令,该脚本或批处理文件接受输入,然后修改 web.xml 文件。但是您仍然需要重新启动 Tomcat 以使您的更改生效。它从配置文件加载到内存。
这样做确实是一种糟糕的做法 - 如果只是因为您必须在更新应用程序时跟踪更改。
如果您有这样的需求,您应该将您的配置保存在别处,例如在数据库中或在您的网络应用程序之外的某个文件中,这样您就可以部署您的网络应用程序而无需更改,但仍会读取您当前 运行 所在的系统配置。
不要忘记在备份中包含该配置 file/database 内容。
此外,AFAIK tomcat(在其默认配置中)监视 web.xml 并在检测到 web.xml 的更改后重新加载应用程序(例如,将其关闭并重新启动)- 这可能不是您期望的行为。不要忘记 tomcat 可能被配置为只部署一个 WAR 文件而不解压它——你甚至可能在磁盘上没有 web.xml 文件。它仍然可以驻留在 WAR 文件中(这是一种可能的配置,只是不是标准配置)
为什么要在运行时写入 web.xml。我觉得不对。
如果您需要配置运行时,您几乎可以使用注释和编程注册来实现所有这些。您可以在 web.xml 中进行的所有配置都可以使用它们完成。您可以创建和注册 servlet。
参考资料