0

我有一个 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();
%>
4

3 回答 3

0

不明白本地主机来自哪里?

我相信它来自本地缓存的 JNLP 文件。有多种方法可以检验这一理论,有些方法比其他方法更可靠。

1) 在从未用于本地主机测试的 PC 上尝试 Web 版本。

对于开发机器本身。

2)在启动“实时”基于 Web 的版本之前,从Java 缓存中卸载应用程序。或者..

3) 为了每次测试的目的,完全移动缓存。


作为两个方面..

从上面的代码片段中我不清楚是否将 JNLP href 写入响应。如果是,请将其删除。在动态生成的 JNLP 中包含 href 通常既不必要又适得其反。

请编辑您的帖子以格式化输入/输出、代码/代码片段、HTML/XML 作为代码。

于 2010-10-05T04:35:23.293 回答
0

如果您使用动态 jnlp,您必须动态签署文件,即从网络服务器调用 jarsigner 以及动态生成的 jnlp,即首先 jar 'em。

于 2011-09-07T15:10:45.503 回答
0

尽管使用了 Java 6u21,我还是被迫硬连线代码库。这应该已在更新 18+ 中修复,但对我不起作用。在硬连线代码库 URL 后,它就可以工作了。

于 2010-10-11T21:36:02.370 回答