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应用程序中保持相同。
答案 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时,您将获得更多好处。
但是,您可以在没有任何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服务器中,但它不需要是动态的。我希望这是你问题的答案。