0

以下に示すように、JNLP ファイルを吐き出す JSP があります。リモートサーバーにデプロイすると、ローカルホストで作業すると、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

Java 6u21 を使用しているにも関わらず、コードベースをハードワイヤする必要がありました。これは、アップデート 18 以降で修正されるはずでしたが、うまくいきませんでした。コードベース URL を配線した後、動作します。

于 2010-10-11T21:36:02.370 に答える
0

ローカルホストがどこから来たのかわかりませんか?

ローカルにキャッシュされた JNLP ファイルから来ていると思います。この理論をテストするにはさまざまな方法がありますが、信頼できるものもあります。

1) localhost でのテストで使用したことのない PC で Web バージョンを試します。

開発マシン自体。

2) 「ライブ」Web ベース バージョンを起動する前に、 Java キャッシュからアプリケーションをアンインストールします。または..

3) 各テストのために、キャッシュを完全に移動します。


2つの余談として..

上記のコード スニペットからは、JNLP href が応答に書き込まれているかどうかはわかりませんでした。ある場合は、それを削除します。通常、動的に生成される JNLP に href を含めることは不必要であり、逆効果です。

投稿を編集して、入力/出力、コード/コード スニペット、HTML/XML をコードとしてフォーマットしてください。

于 2010-10-05T04:35:23.293 に答える
0

動的な jnlp を使用する場合は、ファイルに動的に署名する必要があります。つまり、動的に生成された jnlp とともに Web サーバーから jarsigner を呼び出す必要があります。

于 2011-09-07T15:10:45.503 に答える