在不使用JnlpDownloadServlet类的情况下启动JNLP

时间:2016-08-05 09:58:28

标签: java .net servlets jnlp

Oracle建议使用JnlpDownloadServlet sample从Web应用程序启动JNLP。

无论出于何种原因,我都无法使用它并且必须编写自己的JNLP启动代码。

这就是我提出的(Servlet启动它):

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException 
{
    performTask(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException 
{
    performTask(request, response);
}

private void performTask(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException 
{
    response.setContentType("application/x-java-jnlp-file");
    byte [] b = getJNLP(..some params..).getBytes();

    response.setContentLength((int) b.length);
    OutputStream responseOutputStream = response.getOutputStream();
    responseOutputStream.write(b);
}

getJNLP是一个将整个JNLP文件作为String返回的方法。

这似乎工作正常。但我错过了什么。是否有任何额外的标题等设置?

更新:我没有使用JnlpDownloadServlet的原因是因为,我必须从2个不同的webapps启动这个JNLP - 一个Java和一个一个DOTNET。我显然不能使用DOTNET webapp中的JnlpDownloadServlet。我在DOTNET应用程序中编写了类似的代码(如上所述)来启动JNLP。所以我只是在Java应用程序中保持相同。

1 个答案:

答案 0 :(得分:1)

是的,还有更多要知道。

例如:Jnlp-Download-Service 为代码库和href执行替换,如果您在不同的服务器(dev,qa,prod)上安装相同的WebStart应用程序,这一点很重要。所以这适用于所有服务器:

<?xml version='1.0' encoding='UTF-8'?>
<jnlp spec='7.0' href='$$name' version='2.5-null' codebase='$$codebase'>
  <information>...

不使用JnlpDownloadServlet时,您将获得更多好处。

请查看:https://docs.oracle.com/javase/8/docs/technotes/guides/javaws/developersguide/downloadservletguide.html#substitutions

但是,您可以在没有任何Servlet的情况下启动WebStart-Application,即不使用JnlpDownloadServlet。您甚至可以在不涉及任何服务器的情况下启动WebStart-Application。如果将jnlp-file和所有资源放到windows目录中,那么就不需要任何应用程序服务器。

例如:我在c:\ tmp \ webstartdemo

下有两个文件
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="file:///C:/tmp/webstartdemo">
    <resources>
        <j2se version="1.7+" href="http://java.sun.com/products/autodl/j2se"/>
        <jar href="SwingGui.jar" main="true" />
    </resources>
    <application-desc name="Demo" main-class="Demo"/>
</jnlp>

加上一个迷你 SwingGui.jar 只有一个类:

public class Demo {
  public static void main(String... args){
      javax.swing.JOptionPane.showMessageDialog(null, "Hello World");
   }
}

然后我开始:

javaws c:\tmp\webstartdemo\demo.jnlp

当然,您可以将您的jnlp文件和所有资源放在Web服务器中,但它不需要是动态的。我希望这是你问题的答案。