繁体   English   中英

Java应用程序属性文件

[英]Java application properties file

我需要编写一个独立的Java应用程序,它将具有嵌入式HTTP服务器。 我需要调用与应用程序本地部署的HTML页面。 HTML页面应显示随应用程序部署的* .properties文件中列出的属性。 我应该能够从HTML页面更改属性值有没有办法做到这一点?

我清楚了吗?

是。 使用嵌入式Jetty

这听起来像你不确定的部分是如何阅读属性文件。 但实际上我不认为你的问题清楚你想要什么部分有帮助。

通常它很简单 - 您可以创建一个java.util.Properties对象(使用默认构造函数),然后获取属性文件的InputStream(如果它实际上在文件系统上则使用FileInputStream,如果它在,则使用ClassLoader.getResourceAsStream )一个JAR)。 一旦你有了这个,你就可以调用Properties.load()来填充属性对象。

从那里,您可以迭代此对象以获取所有键和值并将其打印出来。 您显然需要使用某种服务器端技术(如JSP)而不是静态HTML来实现此目的。

至于嵌入式服务器,Ramon是正确的,Jetty应该足以满足您的需求。

1)创建一个servlet类,其中实现了doGet()以使用Properties#load()读取属性文件,使用HttpServletRequest#setAttribute()将其存储在请求范围中,使用RequestDispatcher#forward()将请求转发到JSP文件RequestDispatcher#forward() 最后将这个servlet映射到web.xml上的/propertieseditor类的url模式。

Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("file.properties"));
request.setAttribute("properties", properties);
request.getRequestDispatcher("propertieseditor.jsp").forward(request, response);

2)创建一个JSP文件,该文件使用JSTL c:forEach迭代属性键值对,每次生成HTML input type="text"元素。

<form action="propertieseditor" method="post">
    <c:forEach items="${properties}" var="property">
        ${property.key} <input type="text" name="${property.key}" value="${property.value}"><br>
    </c:forEach>
    <input type="submit">
</form>

3)将doPost()方法添加到1)中创建的servlet中,并编写逻辑,从请求参数映射中收集所有属性键值对,并将其存储回文件中。

Properties properties = new Properties();
Map<String, Object> parameterMap = request.getParameterMap();
for (Entry<String, Object> entry : parameterMap.entrySet()) {
    properties.setProperty(entry.getKey(), entry.getValue());
}
properties.store(new FileOutputStream(new File(
    Thread.currentThread().getContextClassLoader().getResource("file.properties").toURI())));
response.sendRedirect("propertieseditor.jsp");

最后通过http:// localhost / webapp / propertieseditor使用propertyieseditor 祝好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM