servlet中的可配置值

时间:2013-07-18 06:02:58

标签: java servlets

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

4 个答案:

答案 0 :(得分:1)

我能想到的选项:

  1. 将它们定义为DD(web.xml)中的servlet init参数或使用注释(如果它们特定于Servlet)。看看这个Oracle tutorial
  2. 将它们定义为DD(web.xml)中的上下文参数或使用注释(如果它们对整个Web应用程序而言是常见的)。
  3. 在外部属性文件中定义它们。然后,您可以加载保存在类路径中的属性文件。
  4. Java EE 7 tutorial - Servlets (Servlet 3.1)

    P.S:我刚给你指点,你可以在互联网上轻松获得如何实现这一目标的例子。

答案 1 :(得分:1)

有几个选择:

  • 如果值是 servlet特定的,您可以在部署描述符中将它们配置为 Servlet Init-Parameter web.xml < / em>文件):

       
    <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-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"));
    

另见:

答案 2 :(得分:0)

您可以将init参数提供给servlet,该servlet可以在web.xml中配置。本教程可以帮助您实现所需:

http://www.javatpoint.com/servletconfig

答案 3 :(得分:0)

众所周知,有很多方法。这是另一种方法(这就是我现在所做的)

Constants Class(公共Static字符串常量)

名为XMl的{​​{1}}文件,例如veriosn名称,分支名称等

properties.xml
<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