Java - how to get IP address automaticallly in JNLP file?

孤者浪人 提交于 2019-12-04 02:04:23

问题


In the JNLP file how do I get the IP address automatically? Example:

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

instead of manually setting the address to: codebase="http://10.10.10.1/"


回答1:


It can't do that.

You can add a DNS entry for 10.10.10.1, and put the hostname in that field instead of the IP address, but it's just XML - there's no way to call a method from that line to run code and figure out what IP address it should connect to.




回答2:


The JNLP file is a static resource. To do something like that you would need to use some sort of dynamic server side technology, such as JSP, to represent the JNLP.




回答3:


Have a look at the official documentation about relative addresses, which might help (you can avoid specification of the server address altogether): http://docs.oracle.com/javase/6/docs/technotes/guides/jweb/applet/codebase_determination.html




回答4:


If you host your JNLP file in a Java Web Container (e.g. Tomcat) instead of normal HTTP server (e.g. Apache Web Server), you may use JNLP Servlet provided by Sun https://stackoverflow.com/a/7593088/418439. Some interesting variables are $$codebase, $$site (see code below). For instance, $$site in JNLP file will be replaced by the hosting machine ip address and its port (E.g. 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;
}


来源:https://stackoverflow.com/questions/8388360/java-how-to-get-ip-address-automaticallly-in-jnlp-file

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!