4

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

(JNLP download-servlet 和 jsp-page 解析 url 参数并将它们输入到更下方的参数中)

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:任何聪明的想法如何解决这个问题?

4

3 回答 3

7

我今天遇到同样的问题。我在网上没有找到任何东西,但我试图替换“?” 带有 HTML 实体 '?' 它有效。

于 2012-09-03T11:56:45.400 回答
3

此问题已添加到 Oracle 错误数据库

于 2012-09-09T09:27:36.847 回答
1

我一直在寻找这个答案很长一段时间,但从未得到具体的解决方案。所以我在这里最终解决了它。我将在下面提出解决方案。

当前情况:有一个简单的 java 应用程序可以从带有参数的浏览器启动。现有的路线是浏览器-->index.html-->调用我的 jnlp 文件-->调用我的 java 类的主要方法。

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

解决方案:

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

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

    2. 通过调用 usernameParam = getUrlParameters("username", "", true) 获取用户名的值

    3. 形成这样的 URL = 'nameOfYourJSPFile.jsp?username='+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[] 参数中获得传递的用户名值。因此,现在您可以检查参数值是否存在,如果存在,则使用 jsp 文件形成 URL 或直接使用旧的 jnlp 文件。

于 2014-03-21T10:32:36.890 回答