Java 在servlet中加载属性文件
我在WEB-INF中有一个属性文件,其中包含我的servlet需要使用的一些属性(如数据库密码等属性)。加载此文件的最佳方式是什么?我是否应该重写servlet的init方法,以便只加载一次文件Java 在servlet中加载属性文件,java,jakarta-ee,servlets,Java,Jakarta Ee,Servlets,我在WEB-INF中有一个属性文件,其中包含我的servlet需要使用的一些属性(如数据库密码等属性)。加载此文件的最佳方式是什么?我是否应该重写servlet的init方法,以便只加载一次文件 谢谢我不是说这种方法是正确的,因为我不使用JEE,但根据我的记忆,您可以使用ServletContextListener方法来实现这一点。就这样实施吧 class ContextListenerImpl implements ServletContextListener { @Override
谢谢我不是说这种方法是正确的,因为我不使用JEE,但根据我的记忆,您可以使用
ServletContextListener
方法来实现这一点。就这样实施吧
class ContextListenerImpl implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent sce) {
//lets skip it for now
}
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext sc = sce.getServletContext();
//read parameter from properties and add it to servlet context attributes
sc.setAttribute("yourParameterName", "value");
}
}
例如,您应该能够在任何servlet中使用它
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//...
getServletContext().getAttribute("yourParameterName");
//...
}
顺便说一句,属性的值还可以保存其他对象,而不仅仅是字符串
哦,别忘了将这个侦听器添加到您的web应用程序中。加上
<listener>
<listener-class>full.name.of.ContextListenerImpl</listener-class>
</listener>
full.name.of.ContextListenerImpl
到您的
web.xml
文件。我使用的是Netbeans和JBoss AS7,这些参数是否只针对一个servlet,还是也可以用于其他servlet?其他servlet也会使用它们。这是为什么这些参数不是web.xml中的上下文参数?听起来这是一个很好的用例…因为会有很多参数,我更喜欢将它们放在一个单独的文件中。这个解决方案允许其他servlet访问相同的属性吗?是的,整个web应用程序应该只有一个ServletContext
,所以getServletContext()
应在所有servlet中返回该类的相同实例。它也是我们通过sce.getServletContext()在listener中获得的相同实例
因此所有servlet都将从相同的ServletContext
读取属性。