我们有一个只托管 servlet 的小型 Provisioning 服务器。托管在tomcat上。在 servlet 中硬编码的值很少,我想使其可配置或外部化,以便可以在不更改 servlet 的情况下修改它们。谁能建议我的选项是什么?
4 回答
我能想到的选项:
- 如果它们特定于 Servlet,则将它们定义为 DD(web.xml) 中的 servlet 初始化参数或使用 annotation。看看这个Oracle 教程
- 将它们定义为 DD(web.xml) 中的上下文参数或使用 annotation,如果它们对于整个 Web 应用程序是通用的。
- 在外部属性文件中定义它们。然后,您可以加载保存在类路径中的属性文件。
Java EE 7 教程 - Servlet (Servlet 3.1)
PS:我刚刚给你指点,你可以在互联网上轻松获得如何实现的例子。
有几个选项:
如果这些值是特定于 servlet的,您可以在部署描述符(web.xml文件)中将它们配置为Servlet Init-Parameter :
<servlet> <servlet-name></servlet-name> <servlet-class></servlet-class> <init-param> <param-name>${param-name}</param-name> <param-value>${param-value}</param-value> </init-param> </servlet>
并让他们使用
ServletConfig#getInitParameter(String)
:getServletConfig().getInitParameter(paramName);
如果这些值是特定于web-app 的,您可以将它们配置为Context 参数:
<web-app ...> <context-param> <param-name>${param-name}</param-name> <param-value>${param-value}</param-value> </context-param> </web-app>
并让他们使用
ServletContext#getInitParameter(String)
:getServletContext().getInitParameter(paramName);
另一种选择是将这些值放在属性文件中,然后在 servlet 中从中加载值。您可以将属性文件添加到 Web-App 类路径(您可以将其放在
/WEB-INF/classes
文件夹中,或者如果您使用的是 Eclipse IDE,只需将其放在/src
文件夹中,然后将其作为资源加载:Properties props = new Properties(); props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("webapp.properties"));
也可以看看:
您可以向 servlet 提供 init 参数,该参数可以在 web.xml 中进行配置。本教程应该可以帮助您实现您所需要的:
正如所有人所说,有很多方法。这是另一种方法(这是我现在正在做的)
A Constants
Class
(公共Static
字符串常量)
一个XMl
名为properties.xml
例如 veriosn 名称、分支名称等的文件
<property name="version">XX..XX</property>
<property name="branch">XX.13.</property>
在web.xml
<servlet>
<servlet-name>StartUpServlet</servlet-name>
<display-name>StartUpServlet</display-name>
<servlet-class>com.nextenders.server.StartUpServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
该 servlet 在您启动时执行tomcat
和我的StartUpServlet
public class StartUpServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void init() throws ServletException {
super.init();
setVersion(); //I'l parse that file and assign constants.And use else where
}
因此,无需触摸应用程序,更改属性xml
并重新启动App.