11

我需要动态地将参数传递给 JNLP,为此我尝试使用扩展的 servlet,JnlpDownloadServlet然后包含一个将所有 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.getScheme似乎request.getServerName工作正常。由于没有正确接收到参数值,我BadFieldException在 JNLP 尝试执行时得到。

如何解决这个问题?

4

2 回答 2

8

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

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

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

于 2012-06-15T07:27:28.607 回答
1

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

于 2013-04-25T15:40:33.830 回答