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

时间:2012-05-09 09:27:12

标签: java servlets servlet-3.0

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

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

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

现在,当我将项目打包到WAR中时,我没有web.xml,所以我不能像以前那样使用较旧的servlet版本来编辑init参数。

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

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

编辑:

最后我保留了:

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

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

2 个答案:

答案 0 :(得分: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名称。没有进一步研究合并代码(自从我开始研究它已经有一段时间了),其中一个就足够了。目前,您需要同时使用它们。

答案 1 :(得分:2)

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

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

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