我需要动态地将参数传递给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:
<?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
似乎工作正常。由于没有正确接收参数值,我在JNLP尝试执行时得到BadFieldException
。
如何解决这个问题?
答案 0 :(得分:8)
逻辑上,href="test.jnlp"
应该类似于href="test.jnlp?arg1=blah&arg2=tah"
。
AFAIU JWS客户端将使用JNLP中声明的确切coodebase
/ href
返回服务器。
另外,一定要听听最好的话。
答案 1 :(得分:1)
也许旧有用但我实际上修补了Sun servlet代码。有一个类JnlpFileHandler,其中实际的替换完成....只是说... ;-)如果有人有兴趣我可以给你代码包括一点解释。我并没有浪费太多的东西,但我可以说的是,我真的希望SUN的其余部分代码更多地遵循OO原则......