通过 JNLP 传递动态参数

Posted

技术标签:

【中文标题】通过 JNLP 传递动态参数【英文标题】:Pass dynamic params via 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 的查询字符串中获取参数并将它们发送到我的客户端中的命令行参数 您可能需要设置代码库属性:检查我的回答是否适用:***.com/questions/12861447/… 不确定我是否理解如何添加代码库属性。你能在这里传递一个完整的答案吗?我提醒你 jnlp 直接放在 Apache 服务器上。我这里没有jsp.. 【参考方案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 的服务器:/ ***.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 我直接进入这个类.. 你在说什么回应?

以上是关于通过 JNLP 传递动态参数的主要内容,如果未能解决你的问题,请参考以下文章

通过字典将参数动态传递给气流算子

通过ajax调用传递动态javascript参数

首先通过将类型作为参数传递来动态实例化实体框架数据库中的模型对象

Flutter:使用 Firebase 动态链接,有人可以告诉我如何通过链接传递参数列表以及如何接收它吗?

如何通过 jnlp 提供带有许多 webapps 的码头?

如何给url传递动态参数值?