动态生成JNLP并用URL传递参数

本文介绍了一种通过Servlet生成JNLP文件并实现参数传递的方法。具体步骤包括创建Servlet来生成JNLP文件、设置必要的HTTP响应头及输出JNLP文件内容等。这种方式允许web应用程序与客户端/服务器程序进行有效交互。

如果web应用和C/S程序产生交互,在界面上最简单的处理办法就是通过URL来传递参数,但是参数必须要定义到JNLP文件的<argument/>里面去才行,如果想传递参数,就必须用servlet来生成JNLP文件。

首先,创建一个servlet来生成JNLP,类MakeJnlpServlet

java 代码
  1. public class MakeJnlpServlet extends HttpServlet {   
  2.   
  3.     private static final long serialVersionUID = 1L;   
  4.   
  5.     public void doGet(HttpServletRequest request, HttpServletResponse response)   
  6.             throws ServletException, IOException {   
  7.         String parameter1 = request.getParameter("soNbr");   
  8.            
  9.         String protocol = request.getScheme();   
  10.         String ip = request.getServerName();   
  11.         int port = request.getServerPort();   
  12.         String app = request.getContextPath();   
  13.         String href = "rmsInterface";   
  14.            
  15.         response.setContentType("application/x-java-jnlp-file");   
  16.         PrintWriter out = response.getWriter();   
  17.         out.println("<?xml version=\"1.0\" encoding=\"GBK\"?>");   
  18.         out.println("<jnlp spec=\"1.0+\" codebase=\"" + protocol + "://" + ip   
  19.                 + ":" + port + "/" + app + "\" href=\""+href+"\">");   
  20.            
  21.         out.println("<information>");   
  22.         out.println("  <title>rms</title>");   
  23.         out.println("  <vendor>cattsoft</vendor>");   
  24.         out.println("  <homepage href=\"index.html\"/>");   
  25.         out.println("  <description>Web Start Version</description>");   
  26.         out.println("  <description kind=\"short\">Web Start Version</description>");   
  27.         out.println("</information>");   
  28.         out.println("<security>");   
  29.         out.println("  <all-permissions/>");   
  30.         out.println("</security>");   
  31.         out.println("<resources>");   
  32.         out.println("  <j2se version=\"1.5+\"/>");   
  33.         out.println("  <jar href=\"trmsEJBClient-genkey.jar\"/>");   
  34.         out.println("  <jar href=\"rms_Lib-genkey.jar\"/>");   
  35.         out.println("  <jar href=\"weblogic-genkey.jar\"/>");   
  36.         out.println("</resources>");   
  37.            
  38.         out.println("<application-desc main-class=\"oss.rms.app.provision.rm.swing.view.main.SoView\">");        
  39.         out.println("<argument>"+ parameter1 +"</argument>");      
  40.         out.println("</application-desc>");     
  41.   
  42.         out.println("</jnlp>");   
  43.         out.flush();   
  44.         out.close();   
  45.   
  46.     }   
  47. }  

其中,String parameter1 = request.getParameter("soNbr");是接收传递过来的参数。
out.println("<argument>"+ parameter1 +"</argument>"); 是把参数作为webstart的参数。
String href = "rmsInterface"; 这个是此serlvet的URI

然后web.xml中声明一下,

  1. <servlet>      
  2.          <servlet-name>RmsInterface</servlet-name>      
  3.          <servlet-class>oss.rms.exinterface.MakeJnlpServlet</servlet-class>      
  4.          <load-on-startup>1</load-on-startup>      
  5.    </servlet>    
  6.   
  7. <servlet-mapping>  
  8.     <servlet-name>RmsInterface</servlet-name>  
  9.     <url-pattern>/rmsInterface</url-pattern>  
  10. </servlet-mapping>  
  11.   
  12. <mime-mapping>  
  13.     <extension>jnlp</extension>  
  14.     <mime-type>application/x-java-jnlp-file</mime-type>  
  15. </mime-mapping>  

 然后当ear部署好以后,就可以通过URI?soNbr=xx来传递参数了。

在UI端接受参数也很简单,获取main函数的args就可以了,如:

 

java 代码
  1. String parameter1 = "";   
  2. try {   
  3.     parameter1 = args[0];    
  4. catch(Exception e) {   
  5.     e.printStackTrace();   
  6.     System.out.println("接收参数异常");   
  7. }   
xml 代码
<think> 首先,用户的问题是:“JNLP中如何增加jvm参数”,意思是“JNLP中如何增加JVM参数”。JNLP指的是Java Network Launch Protocol,用于启动Java Web Start应用。 我需要用中文回答问题,因为用户要求“请使用中文回答问题”。 回答完后,必须在末尾添加3-5个相关问题,这些相关问题必须基于用户的问题和我的回答。第一行必须完整输出“§§相关问题§§”,然后列出问题。 回想规则: - 回答完问题后,输出“§§相关问题§§”。 - 禁止换行分散,意思可能是问题列表要紧凑列出。 - 问题数量:3到5个。 我的回答结构: 1. 回答问题本身。 2. 结束时输出“§§相关问题§§”。 3. 然后列出3-5个相关问题。 回答问题:JNLP中如何增加JVM参数? - JNLP文件是XML格式的文件,用于定义Java Web Start应用的启动参数。 - 要添加JVM参数,可以在JNLP文件的`<resources>`部分或使用`<j2se>`标签的`java-vm-args`属性。 - 具体方法:在JNLP文件中,添加`<j2se version="1.8+" java-vm-args="-Xmx512m -Dfoo=bar"/>`这样的行,其中`java-vm-args`属性指定JVM参数。 - 另外,可以在`<application-desc>`中使用`argument`元素,但JVM参数通常在`j2se`中指定。 - 确认:是的,`java-vm-args`属性用于指定JVM参数。 完整回答: - 解释如何在JNLP文件中添加JVM参数。 - 提供示例代码块,类似之前的格式。既然用户提供了示例格式,我应该包含一个代码块。 - 在示例格式中,有Python代码;这里我可以用XML代码来展示JNLP文件。 示例JNLP片段: ```xml <jnlp spec="1.0+" codebase="http://example.com" href="myapp.jnlp"> <resources> <j2se version="1.8+" java-vm-args="-Xmx1024m -Duser.timezone=UTC"/> <!-- 其他资源 --> </resources> <application-desc main-class="com.example.Main"/> </jnlp> ``` 现在,相关问题的部分: - 基于用户的问题“JNLP中如何增加jvm参数”和我的回答。 - 提出3-5个相关问题。 - 问题应该相关,比如JNLP的其他配置、安全限制、替代方案等。 - 示例相关问题: 1. JNLP中如何设置系统属性? 2. 为什么在JNLP中添加JVM参数可能受安全限制? 3. Java Web Start的安全沙箱如何影响JVM参数? 4. 如何为不同的操作系统指定不同的JVM参数? 5. JNLP在现代Java版本中还支持吗?因为Java Web Start已弃用。 列出3-5个相关问题。 最终回答结构: 1. 解释如何在JNLP中增加JVM参数。 2. 提供代码示例。 3. 输出“§§相关问题§§”。 4. 列出问题。 确保所有内容用中文。 </think> 在 JNLP(Java Network Launch Protocol)文件中增加 JVM 参数,需要通过修改 JNLP 的 XML 配置来实现。核心是在 `<j2se>` 标签中使用 `java-vm-args` 属性指定参数(如内存设置、系统属性)。以下是详细步骤和示例: ### 步骤说明: 1. **定位 `<j2se>` 标签**: - 在 JNLP 文件的 `<resources>` 部分,找到或添加 `<j2se>` 标签。 - 如果没有该标签,需手动创建。 2. **添加 `java-vm-args` 属性**: - 在 `<j2se>` 标签中添加 `java-vm-args` 属性,例如:`java-vm-args="-Xmx512m -Duser.timezone=UTC"`。 - 多个参数用空格分隔,注意引号包围整个参数串。 3. **完整示例代码**: ```xml <jnlp spec="1.0+" codebase="http://example.com" href="myapp.jnlp"> <information> <title>My Application</title> <vendor>Example</vendor> </information> <resources> <!-- 添加 JVM 参数:设置最大堆内存和系统属性 --> <j2se version="1.8+" java-vm-args="-Xmx1024m -Ddebug=true"/> <jar href="myapp.jar" main="true"/> </resources> <application-desc main-class="com.example.Main"/> </jnlp> ``` ### 关键注意事项: - **参数生效机制**:JNLP 启动时,Java Web Start 客户端会解析这些参数传递给 JVM。 - **安全限制**:某些参数(如 `-Djava.security.policy`)可能受沙箱规则限制。如果应用签名无效,参数可能被忽略。 - **现代兼容性**:Java 11+ 已弃用 Java Web Start,建议迁移到替代方案(如 jlink 或 OpenWebStart)。 > ⚠️ 警告:避免使用不稳定参数(如 `-XX` 开头的实验性选项),可能导致启动失败。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值