swing 程序发布(二)jnlp参数接收

阅读更多

 有些时候,我们需要往jnlp 中传入各种参数,但是jnlp 本身只是一个xml 描述文件,并不能接收参数,那该怎么办呢 ?
   这里有2种方法,可以往jnlp 传入动态参数
   方法一: 修改jnlp-servlet源码

JnlpFileHandler.java 中的specializeJnlpTemplate 方法
 原先的specializeJnlpTemplate

java 代码
  1. /* This method performs the following substituations  
  2.      *  $$name  
  3.      *  $$codebase  
  4.      *  $$context  
  5.      */  
  6.     private String specializeJnlpTemplate(HttpServletRequest request, String respath, String jnlpTemplate) {   
  7.         String urlprefix = getUrlPrefix(request);   
  8.         int idx = respath.lastIndexOf('/'); //   
  9.         String name = respath.substring(idx + 1);    // Exclude /   
  10.         String codebase = respath.substring(0, idx + 1); // Include /   
  11.         jnlpTemplate = substitute(jnlpTemplate, "$$name",  name);   
  12.         jnlpTemplate = substitute(jnlpTemplate, "$$codebase",  urlprefix + request.getContextPath() + codebase);   
  13.         jnlpTemplate = substitute(jnlpTemplate, "$$context", urlprefix + request.getContextPath());   
  14.         return jnlpTemplate;   
  15.     }  

  修改后的

java 代码
  1. private String specializeJnlpTemplate   
  2. (HttpServletRequest request, String respath, String jnlpTemplate) {   
  3. String urlprefix = getUrlPrefix(request);   
  4. System.out.println("urlprefix:" + urlprefix);   
  5. System.out.println("respath:" + respath);   
  6. int idx = respath.lastIndexOf('/');   
  7. String name = respath.substring(idx + 1);   
  8. System.out.println("name1:" + name);   
  9. String codebase = respath.substring(0, idx + 1);   
  10. jnlpTemplate   
  11.     = substitute(jnlpTemplate, "$$codebase",   
  12.          urlprefix + request.getContextPath() + codebase);   
  13. jnlpTemplate = substitute(jnlpTemplate, "$$context",   
  14.               urlprefix + request.getContextPath());   
  15. int index = name.indexOf("?");   
  16. System.out.println("index:" + index);   
  17. if (index != -1)   
  18.     name = name.substring(0, index);   
  19. System.out.println("name2:" + name);   
  20. jnlpTemplate = substitute(jnlpTemplate, "$$name", name);   
  21. Enumeration enum1 = request.getParameterNames();   
  22. while (enum1.hasMoreElements()) {   
  23.     String key = enum1.nextElement().toString();   
  24.     String value = request.getParameter(key);   
  25.     jnlpTemplate = substitute(jnlpTemplate, "$$" + key, value);   
  26. }   
  27. return jnlpTemplate;   
  28.    }  

方法二
    使用sevlet或者其他方式动态生成你的jnlp文件内容,然后直接输出到浏览器。

java 代码
  1. ...................   
  2.  response.setContentType("application/x-java-jnlp-file");       
  3.  PrintWriter out = response.getWriter();       
  4.  out.println("");   
  5.  ....................  

你可能感兴趣的:(Swing,Java,XML,浏览器,Servlet)