Java - 如何在JNLP文件中自动获取IP地址?

时间:2011-12-05 16:21:53

标签: java jnlp

在JNLP文件中,如何自动获取IP地址?例如:

<?xml version="1.0" encoding="utf-8"?> 
<jnlp spec="1.0+" codebase="GET ip address here automatically" href="Test.jnlp">

而不是手动将地址设置为:codebase="http://10.10.10.1/"

4 个答案:

答案 0 :(得分:3)

JNLP文件是静态资源。要做类似的事情,您需要使用某种动态服务器端技术(例如JSP)来表示JNLP。

答案 1 :(得分:1)

它不能那样做。

您可以为10.10.10.1添加DNS条目,并将主机名放在该字段而不是IP地址,但它只是XML - 没有办法从该行调用方法来运行代码并弄清楚它应该连接到什么IP地址。

答案 2 :(得分:1)

查看有关相对地址的官方文档,这可能有所帮助(您可以完全避免指定服务器地址):http://docs.oracle.com/javase/6/docs/technotes/guides/jweb/applet/codebase_determination.html

答案 3 :(得分:1)

如果您将JNLP文件托管在Java Web容器(例如Tomcat)中而不是普通的HTTP服务器(例如Apache Web Server)中,则可以使用Sun https://stackoverflow.com/a/7593088/418439提供的JNLP Servlet。一些有趣的变量是$$ codebase,$$ site(参见下面的代码)。例如,JNLP文件中的$$站点将被托管计算机的IP地址及其端口(例如http://10.10.10.1:8080)替换

private String specializeJnlpTemplate(HttpServletRequest request, String respath, String jnlpTemplate) {
    String urlprefix = getUrlPrefix(request);
    int idx = respath.lastIndexOf('/'); //
    String name = respath.substring(idx + 1);    // Exclude /
    String codebase = respath.substring(0, idx + 1); // Include /
    jnlpTemplate = substitute(jnlpTemplate, "$$name",  name);
// fix for 5039951: Add $$hostname macro
jnlpTemplate = substitute(jnlpTemplate, "$$hostname",
              request.getServerName());
    jnlpTemplate = substitute(jnlpTemplate, "$$codebase",  urlprefix + request.getContextPath() + codebase);
    jnlpTemplate = substitute(jnlpTemplate, "$$context", urlprefix + request.getContextPath());
    // fix for 6256326: add $$site macro to sample jnlp servlet
    jnlpTemplate = substitute(jnlpTemplate, "$$site", urlprefix);
    return jnlpTemplate;
}