从 JSP 向 JNLP 传递参数

Passing Arguments to JNLP from a JSP

我正在努力用 Java Web Start 启动的应用程序替换小程序。到目前为止,在我用 Netbeans 开发的演示版本中,我能够生成 launch.jnlp 并将参数设置为所需的值:

<application-desc main-class="myPkg.MyClass">
    <argument>action=someAction</argument>
    <argument>objId=1234abc</argument>
    <argument>userName=user1</argument>       
</application-desc>

但是这个 JWS 启动的应用程序在现实生活中必须做的是根据将启动它的 Web 应用程序的用户选择的和相关的值在 JNLP 中设置参数。

我知道以前有人问过这个问题,但在大多数情况下,自回答这些问题以来已经过去了好几年,鉴于 Java 的安全锁定,我不确定答案是否仍然适用由浏览器供应商提供。这些天来完成此操作的方法是通过 HTTP 请求参数发送参数值,即

[codebase]/launch.jnlp?action=someAction&objId=1234abc&userName=user1

您可以将参数传递给通过 JWS 启动的小程序,就像在浏览器中启动小程序时一样,例如在 JNLP 中。但是,您必须构建包含这些服务器端 AFAIK 的 JNLP;将它们作为 URL-Args 直接传递给 javaws 是不可能的(URL 只会使浏览器下载 jnlp 并将其扔到 javaws 的脚下,并且可能再次从服务器获取它 再次,所以一定要构建

<jnlp codebase="http://@JAVA_WEB_START_IP@"href="/launch.jnlp?action=someAction&objId=1234abc&userName=user1"

以便它与您调用 jnlp 所用的参数相匹配 "cgi"

所以你需要一个名为launch.jnlp的cgi,将参数放入jnlp模板

1) 在 href 作为 url 参数

2) 在 applet-desc

 <applet-desc main-class="com.xyz.class" 
  width="850" height="650" name="Applet Name">
   <param name="action" value="someAction"/>
   <param name="objId" value="1234abc"/>
   <param name="userName" value="user1"/>
 </applet-desc>

至少这是我所知道的并且对我有用的可能性。

编辑

如果您使用的是 application-desc,则同样适用,那么除了 href 之外,您必须相应地填充 <argument 而不是 <params...

虽然我的实现仍在进行中,但我确实想说,到目前为止对我有用的是在 servlet 中动态创建 JNLP,将其写出到与 HTTPResponse 对象关联的流中。 .