use*_*353 5 .net java jnlp servlets
Oracle 建议使用该JnlpDownloadServlet 示例从 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);
}
Run Code Online (Sandbox Code Playgroud)
getJNLP是一种将整个 JNLP 文件作为String.
这似乎工作正常。但我错过了什么吗?是否有任何额外的标题等需要设置?
更新:我不使用 JnlpDownloadServlet 的原因是,我必须从 2 个不同的 Web 应用程序启动此 JNLP - 一个 Java 一个和一个 DOTNET 一个。我显然无法使用 DOTNET Web 应用程序中的 JnlpDownloadServlet。我在 DOTNET 应用程序中编写了类似的代码(如上所述)来启动 JNLP。所以我在 Java 应用程序中也保持相同。
是的,还有更多需要了解。
例如: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>...
Run Code Online (Sandbox Code Playgroud)
如果不使用 JnlpDownloadServlet,您会失去更多好处。
但是,您可以在没有任何 Servlet(即没有 JnlpDownloadServlet)的情况下启动 WebStart 应用程序。您甚至可以在不涉及任何服务器的情况下启动 WebStart 应用程序。如果将 jnlp 文件和所有资源放在 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>
Run Code Online (Sandbox Code Playgroud)
加上一个只有一个类的迷你SwingGui.jar :
public class Demo {
public static void main(String... args){
javax.swing.JOptionPane.showMessageDialog(null, "Hello World");
}
}
Run Code Online (Sandbox Code Playgroud)
然后我开始:
javaws c:\tmp\webstartdemo\demo.jnlp
Run Code Online (Sandbox Code Playgroud)
当然,您可以将 jnlp 文件和所有资源放在网络服务器中,但它不需要是动态的。我希望这是您问题的答案。