1

我们有一个只托管 servlet 的小型 Provisioning 服务器。托管在tomcat上。在 servlet 中硬编码的值很少,我想使其可配置或外部化,以便可以在不更改 servlet 的情况下修改它们。谁能建议我的选项是什么?

4

4 回答 4

1

我能想到的选项:

  1. 如果它们特定于 Servlet,则将它们定义为 DD(web.xml) 中的 servlet 初始化参数或使用 annotation。看看这个Oracle 教程
  2. 将它们定义为 DD(web.xml) 中的上下文参数或使用 annotation,如果它们对于整个 Web 应用程序是通用的。
  3. 在外部属性文件中定义它们。然后,您可以加载保存在类路径中的属性文件。

Java EE 7 教程 - Servlet (Servlet 3.1)

PS:我刚刚给你指点,你可以在互联网上轻松获得如何实现的例子。

于 2013-07-18T06:05:39.393 回答
1

有几个选项:

  • 如果这些值是特定于 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"));
    

也可以看看:

于 2013-07-18T06:08:58.150 回答
0

您可以向 servlet 提供 init 参数,该参数可以在 web.xml 中进行配置。本教程应该可以帮助您实现您所需要的:

http://www.javatpoint.com/servletconfig

于 2013-07-18T06:05:59.987 回答
0

正如所有人所说,有很多方法。这是另一种方法(这是我现在正在做的)

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.

于 2013-07-18T06:17:03.967 回答