在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/"
答案 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;
}