Я определил несколько параметров приложения для своего веб-приложения в файле web.xml, как показано ниже:
<context-param>
<param-name>smtpHost</param-name>
<param-value>smtp.gmail.com</param-value>
</context-param>
Если у меня есть доступный объект ServletContext Object, я могу легко получить к нему доступ. Например, в моих классах действий Struts.
ServletContext ctx = this.getServlet().getServletContext();
String host = ctx.getInitParameter("smtpHost");
Как я могу получить параметры приложения, не передавая объект ServletContext?





Синглтон + JNDI?
Вы можете объявить свой объект как ресурс в своем веб-приложении:
<resource-ref res-ref-name='myResource' class-name='com.my.Stuff'>
<init-param param1='value1'/>
<init-param param2='42'/>
</resource-ref>
Затем в вашем классе com.my.stuff вам понадобится конструктор и два «установщика» для param1 и param2:
package com.my;
import javax.naming.*;
public class Stuff
{
private String p;
private int i;
Stuff(){}
public void setParam1(String t){ this.p = t ; }
public void setParam2(int x){ this.i = x; }
public String getParam1() { return this.p; }
public String getParam2(){ return this.i; }
public static Stuff getInstance()
{
try
{
Context env = new InitialContext()
.lookup("java:comp/env");
return (UserHome) env.lookup("myResource");
}
catch (NamingException ne)
{
// log error here
return null;
}
}
}
Затем в любом месте вашего кода:
...
com.my.Stuff.getInstance().getParam1();
Определенно излишний и неэффективный, но он работает (и его можно оптимизировать)
Поскольку вопрос помечен как «кот»: больше информации в tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html - Определенно путь. +1