2011-05-31 28 views
10

我有一个Java应用程序,它使用一些外部程序(调用命令行工具)。如何为Java Web应用程序设置参数

我想让命令行程序的路径可配置,以便我可以在不重新构建应用程序的情况下对其进行更改。

问题:

1)准确的参数,我应该使用(掉那些在web.xml中提供的),如果只设置一次(在部署),然后永远不会改变?

2)如何在Java代码中访问此参数?

在此先感谢

德米特里

回答

11

的web.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app> 
    <context-param> 
    <param-name>command</param-name> 
    <param-value>SOME_COMMAND</param-value> 
    </context-param> 
. 
. 
. 
. 
</web-app> 

Java代码

String commandToExecute = getServletContext().getInitParameter("command"); 

或者

你也可以把这个东西属性/ XML文件中的类路径读它,并把它当背景来初始化servlet上下文。

+0

Thansk,解决了我的问题。 – 2011-06-01 11:15:30

+0

欢迎您:) – 2011-06-01 11:35:59

7

您可以使用ENV条目:

<env-entry> 
    <description>command line</descriptor> 
    <env-entry-name>commandLine</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>some_command</env-entry-value> 
</env-entry> 

而且在你的web应用代码从任何地方获得它:

javax.naming.Context ctx = new javax.naming.InitialContext(); 
String command = (String) ctx.lookup("java:comp/env/commandLine"); 
4

我会去,在这种情况下的系统性能。只是一个JVM标志像-Dyour.command.path=/path/to/your/command运行应用程序服务器,然后在代码中,你只需要写:

String cmd = System.getProperty("your.command.path", "/some/default/fallback/path/cmd"); 

这样你就不会依赖于一些Java EE/Servlet容器运行。

3

这是一个两部分的解决方案。

  1. 首先我们可以创建一个Web应用程序可访问的属性文件。这不一定是你的标准消息属性,而是一个辅助文件。
  2. 其次,您的部署脚本和构建脚本可以执行一些额外的工作,以在应用程序服务器中创建上下文目录,从而可以从构建中复制属性文件,并使其可用于命令行工具。

Apache CLI是做一些程序化访问的一个很好的选择。

+0

属性文件是一个简单而好的想法。 +1 – Vincent 2013-06-13 04:58:37

相关问题