有些时候,我们需要往jnlp 中传入各种参数,但是jnlp 本身只是一个xml 描述文件,并不能接收参数,那该怎么办呢 ?
这里有2种方法,可以往jnlp 传入动态参数
方法一: 修改jnlp-servlet源码
JnlpFileHandler.java 中的specializeJnlpTemplate 方法
原先的specializeJnlpTemplate
java 代码
- /* This method performs the following substituations
- * $$name
- * $$codebase
- * $$context
- */
- private String specializeJnlpTemplate(HttpServletRequest request, String respath, String jnlpTemplate) {
- String urlprefix = getUrlPrefix(request);
- int idx = respath.lastIndexOf('/'); //
- String name = respath.substring(idx + 1); // Exclude /
- String codebase = respath.substring(0, idx + 1); // Include /
- jnlpTemplate = substitute(jnlpTemplate, "$$name", name);
- jnlpTemplate = substitute(jnlpTemplate, "$$codebase", urlprefix + request.getContextPath() + codebase);
- jnlpTemplate = substitute(jnlpTemplate, "$$context", urlprefix + request.getContextPath());
- return jnlpTemplate;
- }
修改后的
java 代码
- private String specializeJnlpTemplate
- (HttpServletRequest request, String respath, String jnlpTemplate) {
- String urlprefix = getUrlPrefix(request);
- System.out.println("urlprefix:" + urlprefix);
- System.out.println("respath:" + respath);
- int idx = respath.lastIndexOf('/');
- String name = respath.substring(idx + 1);
- System.out.println("name1:" + name);
- String codebase = respath.substring(0, idx + 1);
- jnlpTemplate
- = substitute(jnlpTemplate, "$$codebase",
- urlprefix + request.getContextPath() + codebase);
- jnlpTemplate = substitute(jnlpTemplate, "$$context",
- urlprefix + request.getContextPath());
- int index = name.indexOf("?");
- System.out.println("index:" + index);
- if (index != -1)
- name = name.substring(0, index);
- System.out.println("name2:" + name);
- jnlpTemplate = substitute(jnlpTemplate, "$$name", name);
- Enumeration enum1 = request.getParameterNames();
- while (enum1.hasMoreElements()) {
- String key = enum1.nextElement().toString();
- String value = request.getParameter(key);
- jnlpTemplate = substitute(jnlpTemplate, "$$" + key, value);
- }
- return jnlpTemplate;
- }
方法二
使用sevlet或者其他方式动态生成你的jnlp文件内容,然后直接输出到浏览器。
java 代码
- ...................
- response.setContentType("application/x-java-jnlp-file");
- PrintWriter out = response.getWriter();
- out.println("<?xml version=\"1.0\" encoding=\"GBK\"?>");
- ....................