Java 当项目打包在WAR中时,在Servlet 3.0中修改WebInitParam

Java 当项目打包在WAR中时,在Servlet 3.0中修改WebInitParam,java,servlets,servlet-3.0,Java,Servlets,Servlet 3.0,在我的项目中,我使用Servlet3.0,并且我尝试使用注释 要初始化数据库的连接参数,我在servlet中使用: @WebServlet(name = "FrontServlet", urlPatterns = {"/index"}, initParams = { @WebInitParam(name = "userDB", value = "root"), @WebInitParam(name = "passwordDB", value = "

在我的项目中,我使用Servlet3.0,并且我尝试使用注释

要初始化数据库的连接参数,我在servlet中使用:

@WebServlet(name = "FrontServlet", urlPatterns = {"/index"},
        initParams = {
        @WebInitParam(name = "userDB", value = "root"),
        @WebInitParam(name = "passwordDB", value = "*****")})
现在,当我在WAR中打包项目时,我没有web.xml,因此无法像以前使用较旧的servlet版本那样编辑init参数

我的问题是,当项目打包在WAR中时,我可以编辑我的init参数吗?如果是,怎么做?否则,我应该使用什么方法来存储init参数并在战争中修改它们

如果可能,我希望避免使用所有URL模式重新创建整个web.xml,等等

编辑:

最后我保持:

@WebServlet(name = "FrontServlet", urlPatterns = {"/index"})

我使用加载DB参数,访问配置文件时使用
getClass().getClassLoader().getResourceAsStream(“servlet/config/config.ini”)

AFAIK在运行时没有标准方法修改init参数。此外,将配置放在那里是一种不好的做法,尤其是将数据库凭据放在明文中

通常,最佳做法是将配置放在外部文件中。它可能是一些自定义属性或xml文件


对于数据库连接,通常使用JNDI。因此,基本上在代码中查找JNDI资源,而JNDI本身是在容器级别配置的。Google找到了很多关于如何通过JNDI为Jetty、Tomcat、JBoss等配置数据库连接的示例。

在Servlet 3.0中,注释提供了默认值,但在web.xml中这些注释可能会被忽略,因此您可以将以下内容添加到web.xml中以更改参数

  <servlet>
    <servlet-name>FrontServlet</servlet-name>
    <servlet-class>fully.qualified.ClassName</servlet-class>
    <init-param>
      <param-name>passwordDB</param-name>
      <param-value>NewValue</param-value>
    </init-param>
  </servlet>

FrontServlet
fully.qualified.ClassName
密码数据库
新价值

至少在Tomcat中,您需要指定类名和Servlet名称。如果不进一步研究合并代码(我已经做了一段时间了),其中一个就足够了。现在,您需要同时使用这两个选项。

感谢您的快速回答,只是为了澄清一下,我不需要在运行时更改任何内容。就在部署前的战争中。这样想:即使你想在部署前改变战争,信息从何而来?另一个文件?所以把这个文件放在战争一边,从战争中引用它。正如我所说,通常JNDI是一种方便的方法,但是还有更多的选项。JNDI听起来是个好主意,但我从未使用过它,所以我保持它的简单。如果我使用web.xml,我的注释将不再工作,我已经在war中使用配置文件解决了这个问题。无论如何谢谢你!错。web.xml的注释和内容被合并,以web.xml为优先。阅读Servlet3规范的第8节或详细信息,或者只是尝试一下。好吧,我明白了,但它与将所有内容存储在web.xml中是一样的,它并不是很方便。我建议避免使用web.xml,而是使用属性文件。这与将其全部存储在web.xml中不同。关键是,您可以使用web.xml仅覆盖要编辑的注释。例如,您将注意到url模式不在web.xml中。将使用注释中的值。如果您喜欢属性文件,则可以。就我个人而言,我讨厌这些注释。它们让系统管理员很难弄清楚到底发生了什么。是的,这不一样,但在我的例子中,只有URL模式保留在注释中。。。这就是我为什么这么说的原因。但是您的权利我尝试了注释来了解它是如何工作的,但最终旧的web.xml更易于管理;)谢谢你的解释!