在我的应用程序中,我有一些参数(字符串),我想从服务器更改为服务器。
例如,其中一个参数是yes / no值,用于指示服务器是否为生产环境。另一个是运行应用程序的特定计算机中给定资源的文件路径。等
我想在Jetty Web服务器的目录结构中将这些值保存在单独的配置文件(纯文本,xml,JSON或其他简单格式)中。
有没有办法实现这一点,允许通过密钥从我的servlet中简单地检索String值,而无需安装其他软件,或配置复杂的Jetty选项?我真的想避免因我需要检索的两个或三个值而出现并发症。
编辑: 我直接使用servlet,没有任何额外的Web框架,没有Spring等。该软件是用Scala编写的。
JNDI可能会做我需要的,但我想要更简单的设置。
我想我正在寻找像ServletConfig这样的东西,但是在服务器级别,而不是web-app级别。
答案 0 :(得分:3)
这是一个简单的例子。
在您的jetty-distribution目录中,您有一个/resources/
目录(默认情况下,它通过OPTIONS
文件中的/start.ini
配置包含在服务器级别类加载器中)
如果您使用以下内容创建/resources/myconfig.properties
(例如):
food=fruit
fruit.color=yellow
fruit.name=banana
然后你可以让Servlet在init()上加载它:
public class LoadResourceServlet extends HttpServlet
{
private Properties props;
@Override
public void init(ServletConfig config) throws ServletException
{
super.init(config);
props = new Properties();
URL url = this.getClass().getResource("/myconfig.properties");
if (url != null)
{
try (InputStream stream = url.openStream())
{
props.load(stream);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
resp.setContentType("text/plain");
try (PrintWriter writer = resp.getWriter())
{
writer.printf("food = %s%n",props.getProperty("food"));
writer.printf("fruit.color = %s%n",props.getProperty("fruit.color"));
writer.printf("fruit.name = %s%n",props.getProperty("fruit.name"));
}
}
}