Почему динамический JNLP, сгенерированный из JSP, всегда терпит неудачу с href localhost? - PullRequest
0 голосов
/ 05 октября 2010

У меня есть JSP, который выплевывает файл JNLP, как показано ниже. Работа сына localhost, когда развернут на удаленный сервер Java Web Start выдает ошибки за исключением -

Невозможно загрузить ресурс: http://localhost:8080/jnlp/myjnlp.jnlp

ExitException[ 3]com.sun.deploy.net.FailedDownloadException: Unable to load resource: http: // localhost:8080/jnlp/myjnlp.jnlp
 at com.sun.javaws.Launcher.updateFinalLaunchDesc(Unknown Source)
 at com.sun.javaws.Launcher.updateFinalLaunchDesc(Unknown Source)
 at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
 at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
 at com.sun.javaws.Launcher.launch(Unknown Source)
 at com.sun.javaws.Main.launchApp(Unknown Source)
 at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
 at com.sun.javaws.Main$1.run(Unknown Source)
 at java.lang.Thread.run(Unknown Source)

Включенный файл JNLP заменяет свою строку кодовой базы на основе URL-адреса сервера. Присоединение отладчика к JSP показывает правильную строку кодовой базы с IP-адресом сервера / именем хоста.

Не понимаю, откуда исходит локальный хост?

<%@ page import="java.io.*" %>
<%@ page contentType="application/x-java-jnlp-file" language="java" %>
<%
  response.setHeader("Cache-Control", "no-cache");
  response.setHeader("Pragma", "no-cache");
  response.setDateHeader("Expires", -1);
  response.setContentType("application/x-java-jnlp-file");

// Generating the codebase for the JNLP. This URL will be used for downloading this jsp and the jar
  StringBuffer jspUrlsb = request.getRequestURL();
  String url = jspUrlsb.substring(0,jspUrlsb.lastIndexOf("/"));
  url = url.substring(0,url.lastIndexOf("/"));
  String jnlpCodebase =  url+ "/jnlp/";

  String tool = request.getParameter("tool");
  tool = tool==null || tool.length()==0 ? "myjnlp" : tool;

  String jnlpFile =  tool+".jnlp";
  response.setHeader("Content-Disposition", "filename=\""+jnlpFile+"\";");


  String path = config.getServletContext().getRealPath(request.getContextPath());

  FileInputStream fis = new FileInputStream(new File(path,"/jnlp/"+jnlpFile));
  InputStreamReader isr = new InputStreamReader(fis);
  BufferedReader br = new BufferedReader(isr);

  String line = null;
  while ((line = br.readLine()) != null) {  //consuming the stream
    if (line.startsWith("<jnlp")) {
      line =  "<jnlp  codebase=\""+jnlpCodebase+"\" href=\""+jnlpFile+"\" spec=\"6.0+\">";
    }
%>
    <%=line%>
<%
  }
  br.close();
  isr.close();
  fis.close();
%>

Ответы [ 3 ]

0 голосов
/ 12 октября 2010

Несмотря на использование Java 6u21, я был вынужден жестко связать кодовую базу. Это должно было быть исправлено в обновлении 18+, но у меня не работало. После жесткого подключения URL базы кода это работает.

0 голосов
/ 07 сентября 2011

Если вы используете динамический jnlp, вы должны динамически подписывать файлы, то есть вызывать jarsigner с веб-сервера вместе с динамически генерируемым jnlp, то есть сначала jar 'em.

0 голосов
/ 05 октября 2010

Не понимаете, откуда исходит локальный хост?

Я полагаю, что это происходит из файла JNLP, который кэшируется локально. Существуют различные способы проверки этой теории, некоторые из которых более надежны, чем другие.

1) Попробуйте веб-версию на ПК, который никогда не использовался для тестирования на локальном хосте.

Для самой машины разработки.

2) Удалите приложение из Java Cache перед запуском «живой» веб-версии. Или ..

3) Перемещение кеша целиком для целей каждого теста.


Как две стороны ..

Мне неясно из приведенных выше фрагментов кода, была ли ссылка JNLP на ответ. Если это так, удалите его. Обычно нет необходимости и контрпродуктивно включать href в динамически генерируемую JNLP.

Пожалуйста, отредактируйте свое сообщение, чтобы отформатировать ввод / вывод, фрагменты кода / кода, HTML / XML как код.

...