jnlp href属性中的url参数

时间:2012-09-02 12:15:16

标签: java jnlp java-web-start

我一直在使用url参数将参数传递给.jar应用程序的main方法。在Windows 7上更新到最新的jre 7u7后,启动文件时Java-web-start启动程序崩溃。

(JNLP download-servlet和jsp-page解析url-parameters并在参数中进一步输入)

jsp的有趣部分

<jnlp spec="6.0+" codebase="http://localhost:8080/" href="myfile.jnlp?username=charles">
    ...
    <application-desc main-class="MyMain">
        <argument><%=request.getParameter("username")%></argument>
    </application-desc>
</jnlp>

所以这可能是也可能不是错误,

Q1:我是否以正确的方式使用了href属性?

Q2:如何解决问题的任何聪明的想法?

3 个答案:

答案 0 :(得分:7)

我今天遇到同样的问题。我没有在网上找到任何东西,但我试图更换'?'使用HTML实体'&amp;#063;'它有效。

答案 1 :(得分:3)

Oracle Bug数据库at中已添加此问题:

答案 2 :(得分:1)

我已经找了很久这个答案,从来没有得到具体的解决方案。所以在这里我最终解决了它。我将在下面提出解决方案。

当前情况:有一个简单的java应用程序从带有参数的浏览器启动。现有的路由是浏览器 - &gt; index.html - &gt;调用我的jnlp文件 - &gt;调用我的java类的main方法。

需要的情况:现在用户会发送参数说明,浏览器中的用户名一直发送到java类的main方法。

解决方案:

  • 不要浪费时间尝试更改jnlp文件。
  • 按如下方式更改index.html:

    1. 将函数getUrlParameters()(google it)添加到index.html的javascript部分

    2. 使用调用usernameParam = getUrlParameters(&#34;用户名&#34;,&#34;&#34;,true)获取用户名的值

    3. 形成这样的 URL =&#39; nameOfYourJSPFile.jsp?username =&#39; + usernameParam
  • 创建一个新的jsp文件(这是必须的),如:

    <%@ page contentType="application/x-java-jnlp-file" %>   
    <%@ page session="true" %>   
    <%   
    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server 
    // Getting the URL parameters from the request
    final String USERNAME_PARAM = "username";
    String paramUsername = request.getParameter(USERNAME_PARAM);
    %> 
    <?xml version="1.0" encoding="iso-8859-1"?>
    <jnlp spec="1.0+" codebase="http://localhost:8080/" href="<nameOfYourJSPFile>.jsp?    <%=USERNAME_PARAM + "=" + paramUsername%>">
    <information>
    </information>
    <security>
        <all-permissions/>
    </security>
    
    <resources>
               Your resources...
    </resources>
    
    <application-desc main-class="Complete.package.yourClassNameContainingMain">
         <argument><%=paramUsername%></argument>
    </application-desc>
    </jnlp>
    
  • 一旦形成此URL,您将发送至: IFrameDoc.location.replace(URL);在同一index.html

您将在main方法的String [] args中获取传递的用户名值。所以现在你可以检查param值是否存在,如果存在,用jsp文件形成URL或者直接继续使用旧的jnlp文件。