通过 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?username=<%=request.getParameter("username")%>&clienttoken=<%=request.getParameter("clienttoken")%>">
...
<application-desc main-class="test.MainClass">
<argument><%=request.getParameter("username")%></argument>
</application-desc>
</jnlp>
【讨论】:
而且我不需要任何jsp页面就可以做到这一点? 我试过了,我得到了异常:BadFieldException[你确定JSP的响应类型是“application/x-java-jnlp-file”吗?
如果不是,请在 JSP 顶部提及并检查。
<% response.setContentType("application/x-java-jnlp-file"); %>
【讨论】:
我想我不明白。 JSP 在这种情况下发生在哪里?我通过以下方式执行此操作:main-class="com.main.execute 我直接进入这个类.. 你在说什么回应?以上是关于通过 JNLP 传递动态参数的主要内容,如果未能解决你的问题,请参考以下文章
首先通过将类型作为参数传递来动态实例化实体框架数据库中的模型对象