【问题标题】:Generate JNLP dynamically动态生成 JNLP
【发布时间】:2012-06-14 18:02:05
【问题描述】:

我需要动态地将参数传递给 JNLP,为此我尝试使用扩展 JnlpDownloadServlet 的 servlet,然后包含一个将所有 JNLP XML 写入其中的 jsp。

但是当我调用下载的 JNLP 时,我得到了BadFieldException

小服务程序

public class TestServlet extends JnlpDownloadServlet {  
public void service(ServletRequest req, ServletResponse res)  throws ServletException, IOException {  
HttpServletRequest request = (HttpServletRequest) req;
res.setContentType("application/x-java-jnlp-file");
request.getRequestDispatcher("/jnlp.jsp").include(request, res);  
}  

jnlp.jsp

用于转储动态 JNLP:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase=<%=request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ request.getContextPath() + "/" %> href="test.jnlp">
  <information>
   <title>Demo</title>
   <vendor>Sun Microsystems, Inc.</vendor>
  </information>
  <security>
   <all-permissions/>
  </security>
  <resources>
   <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
   <jar href="lib/test.jar" main="true" />
  </resources>
  <application-desc name="Dynamic Tree Demo Application" main-class="org.Test" width="300"   height="300">
       <argument><%=request.getParameter("arg1")%></argument>  
       <argument><%=request.getParameter("arg2")%></argument>
  </application-desc>
  <update check="background"/>
</jnlp>

我看不到在下载的 JNLP 中正确接收到请求参数,但上面的 request.getSchemerequest.getServerName 似乎工作正常。由于未正确接收参数值,当 JNLP 尝试执行时,我得到 BadFieldException

如何解决?

【问题讨论】:

  • 实际上更难,因为您需要稍后将 jnlp 包含在 jar 中(对于已签名的 jar),因此 jar 也必须动态签名
  • 您确定在调用中使用了参数吗?你能提供你用来下载jnlp的网址吗?
  • 我不打算再次将 jnlp 包含在 jar 中,没有它也可以正常工作。
  • 我正在尝试在 Struts 上做同样的事情。你能告诉我你的 web.xmlstruts-config.xml 应该是什么样子吗?
  • 在我的例子中,当我扩展 JnlpDownloadServlet 类时,抛出了一个运行时异常,上面写着 SEVERE: Allocate exception for servlet JnlpDownloadServlet java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet。知道为什么会发生这种情况吗?我正在使用 Java Samples and Demos 中的 jnlp-servlet.jar、jnlp.jar 和 jardiff.jar。

标签: java dynamic jnlp java-web-start


【解决方案1】:

从逻辑上讲,href="test.jnlp" 应该类似于 href="test.jnlp?arg1=blah&amp;arg2=tah"

AFAIU JWS 客户端将使用 JNLP 中所述的确切 coodebase/href 回到服务器。

另外,一定要听 bestsss 怎么说。

【讨论】:

  • 它仍然无法正常工作。你能告诉我在服务器上发布的 test.jnlp 的内容应该是什么吗?
  • 我不同意,不是应该添加参数的href,而是首先用于下载jnlp的url。示例:www.example.com/app/servlet/TestServlet?arg1=blah&arg2=tah
  • @Andrew 感谢您的回答,它帮助我更好地了解 JNLP 并找到适合我的解决方案。
【解决方案2】:

也许有用,但我实际上修补了 Sun servlet 代码。有一个 JnlpFileHandler 类,在其中完成了实际的替换......只是说...... ;-) 如果有人感兴趣,我可以给你代码,包括一点解释。我并没有为此浪费太多时间,但我只能说,我真的希望 SUN 的其余代码更加尊重 OO 原则......

【讨论】:

  • 我最近也对该代码做了一个修改;它非常适合我的需求。
猜你喜欢
  • 1970-01-01
  • 2012-11-23
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
  • 2017-09-30
  • 2010-12-11
  • 2012-08-04
相关资源
最近更新 更多