Java - как получить IP-адрес автоматически в файле JNLP? - PullRequest
1 голос
/ 05 декабря 2011

В файле 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 ]

3 голосов
/ 05 декабря 2011

Файл JNLP является статическим ресурсом. Чтобы сделать что-то подобное, вам нужно использовать какую-то динамическую серверную технологию, такую ​​как JSP, для представления JNLP.

1 голос
/ 26 июня 2012

Если вы размещаете файл JNLP в веб-контейнере Java (например, Tomcat) вместо обычного HTTP-сервера (например, веб-сервер Apache), вы можете использовать сервлет JNLP, предоставленный Sun https://stackoverflow.com/a/7593088/418439. Некоторые интересные переменные: $$кодовая база, сайт $$ (см. код ниже).Например, сайт $$ в файле 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;
}
.
1 голос
/ 05 декабря 2011

Ознакомьтесь с официальной документацией об относительных адресах, которая может помочь (вы можете избежать указания адреса сервера в целом): http://docs.oracle.com/javase/6/docs/technotes/guides/jweb/applet/codebase_determination.html

1 голос
/ 05 декабря 2011

Он не может этого сделать.

Вы можете добавить запись DNS для 10.10.10.1 и поместить имя хоста в это поле вместо IP-адреса, но это всего лишь XML - нет способа вызвать метод из этой строки, чтобы запустить код и выяснить, какой IP адрес, к которому он должен подключиться.

...