在 jnlp 文件中由 Web 服务器自动替换的唯一值是:
- $$codebase - 请求的 URL,JNLP 文件的名称除外
- $$name JNLP 文件的名称
- $$context Web 应用程序的基本 URL
- $$site Web 服务器地址
- $$hostname 服务器的名称
只有在 servlet 容器中使用 JNLPDownloadServlet 时才会发生这些替换。
主机在下载 JNLP 文件时不可能知道用户 home 参数的值。
如果您正在部署可以作为独立运行的 JNLP,并且您需要将参数加载到应用程序,我建议在特定位置使用属性文件,并在文件不存在时使用默认值(应用程序可以动态创建属性文件第一次运行时,或者您可以使用安装程序来执行此操作)。
下面是一个详细的例子:
public class Main {
public static void main(String ... args) throws IOException{
new Main();
}
private static Properties instance;
public static Properties getProperties(){
return instance;
}
private static Properties defaultProperties(){
// implement default properties here
Properties props = new Properties();
props.setProperty("myApp.property1","someDefaultValue");
return props;
}
public static void createDefaultPropsFile(File propsFile,Properties props) throws IOException {
propsFile.getParentFile().mkdirs();
props.store(new FileWriter(propsFile),"My App Properties");
}
private Main() throws IOException{
File appDir = new File(System.getProperty("user.home"), "myApp");
// find property file
File propsFile = new File(appDir, "settings.properties");
Properties appProperties = new Properties(defaultProperties());
if(!propsFile.exists()){
createDefaultPropsFile(propsFile,appProperties);
} else {
appProperties.load(new FileReader(propsFile));
}
// this should really be done using a singleton or something similar
instance = appProperties;
System.out.println("Property"+getProperties().getProperty("myApp.property1"));
}
}