在我的项目中,我正在使用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")
访问配置文件
答案 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等配置数据库连接的例子。