【问题标题】:Pass dynamic params via JNLP通过 JNLP 传递动态参数
【发布时间】:2012-11-23 04:21:42
【问题描述】:

我正在使用 JavaScript 来执行 JNLP,它最终将执行我的客户端。

我正在尝试通过 JavaScript 执行将参数传递给 JNLP,并通过我的客户端内部的 JNLP 获取这些参数。

例如,JavaScript 正在执行此 URL:

http://localhost:8080/MyJnlp.jnlp?login=14hhh765p&pass=ggyyktff

现在我的 JNLP 将尝试通过这种方式获取 <application-desc name tag 中的参数:

<application-desc name="..." main-class="com.main.execute" >
        <argument>-nosplash</argument>
        <argument>-q</argument>
    <argument><%=request.getParameter("login")%></argument>
    <argument><%=request.getParameter("pass")%></argument>
</application-desc>

但它没有用。

我无法通过这种方式在客户端代码中检索这些参数:

login=getParamsFromJnlp("login")
..

public String getParamsFromJnlp(String key) {
    return System.getProperty(key);
}

JNLP 在 APACHE2.2 中

知道有什么问题吗?

【问题讨论】:

  • 参数将在您的主方法中作为参数传递。我对 apache 2.2 不太了解,但是如何访问“-nosplash”和“-q”参数?
  • 他们工作正常。问题是我想从执行 JNLP 的查询字符串中获取参数并将它们发送到我的客户端中的命令行参数
  • 您可能需要设置代码库属性:检查我的回答是否适用:stackoverflow.com/questions/12861447/…
  • 不确定我是否理解如何添加代码库属性。你能在这里传递一个完整的答案吗?我提醒你 jnlp 直接放在 Apache 服务器上。我这里没有jsp..

标签: java apache web jnlp java-web-start


【解决方案1】:

为了能够将 http 参数插入应用程序的参数,.jnlp 文件需要根据请求动态“构造”,因为直到那时您才知道将使用哪些 http 参数。

java-web-start 的工作方式是它会多次下载 .jnlp,但除了第一次它会从 jnlp 元素的 codebase 和 href 属性中指定的 url 下载文件。

所以在元素中动态添加argument-element是不够的,还需要添加到codebase/href属性中

<jnlp spec="1.0+" 
      codebase=<%=request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ request.getContextPath() + "/" %> 
      href="jnlpfile.jnlp&#063;username=<%=request.getParameter("username")%>&clienttoken=<%=request.getParameter("clienttoken")%>">

    ...
    <application-desc main-class="test.MainClass">
       <argument><%=request.getParameter("username")%></argument>
    </application-desc>
</jnlp>

【讨论】:

  • 而且我不需要任何jsp页面就可以做到这一点?
  • 我试过了,我得到了异常:BadFieldException[codebase 的字段值无效:
  • 不,抱歉忘了说这仍然需要jsp。我知道如何做你想做的唯一方法是动态生成 jnlp。使用 jsp、php 或其他等价物。
  • 那么我要把这个jsp文件放在哪里呢?我正在使用 Apache。
  • 我认为您需要使用 apache tomcat 或其他支持 jsp 和 servlet 的服务器:/ stackoverflow.com/questions/30632/… 我的猜测是您将无法仅使用 apache 实现您想要做的事情: (至少我不知道
【解决方案2】:

你确定JSP的响应类型是“application/x-java-jnlp-file”吗?

如果不是,请在 JSP 顶部提及并检查。

<% response.setContentType("application/x-java-jnlp-file"); %>

【讨论】:

  • 我想我不明白。 JSP 在这种情况下发生在哪里?我通过以下方式执行此操作:main-class="com.main.execute 我直接进入这个类..
  • 你在说什么回应?
猜你喜欢
  • 1970-01-01
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 2013-03-16
  • 2017-04-29
  • 2011-05-08
相关资源
最近更新 更多