4

在我的项目中,我使用的是 Servlet 3.0,并且我尝试使用注释。

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

@WebServlet(name = "FrontServlet", urlPatterns = {"/index"},
        initParams = {
        @WebInitParam(name = "userDB", value = "root"),
        @WebInitParam(name = "passwordDB", value = "*****")})

现在,当我将项目打包到 WAR 中时,我没有 web.xml,因此我无法像以前使用旧 servlet 版本那样编辑 init 参数。

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

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

编辑 :

最后我保留了:

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

我使用Properties加载数据库参数,访问配置文件getClass().getClassLoader().getResourceAsStream("servlet/config/config.ini")

4

2 回答 2

4

在 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>

至少在Tomcat中,你需要指定类名和Servlet名。无需进一步研究合并代码(自从我研究它以来已经有一段时间了),其中一个就足够了。现在,您需要同时使用两者。

于 2012-05-09T11:29:59.243 回答
2

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

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

对于数据库连接,通常使用 JNDI。所以基本上在代码中你会寻找一个 JNDI 资源,而 JNDI 本身是在容器级别配置的。谷歌找到很多如何通过 JNDI 为 Jetty、Tomcat、JBoss 等配置数据库连接的示例。

于 2012-05-09T09:42:17.163 回答