托管服务器,更改IP和JNLP

时间:2010-10-15 15:33:24

标签: web-hosting jnlp

我为我的客户提供以下方案:

他有一个托管服务器(1)(即http://customer.net),它基本上会以这种格式重定向到一个地址:http:/// app(server 2)

IP地址经常变化(他们甚至每两周告诉我一次)。在服务器2中有一个带有jnlp链接的应用程序,显然它被配置为从服务器2 IP下载。当服务器2的IP发生变化时,jnlp将被破坏。

对我来说,显而易见的选择是与提供商获取专用IP地址,但想知道是否还有其他选项。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我能够弄清楚。基本上我有一个servlet,jnlp链接从该servlet被触发。我从请求中收集了正确的URL,并在下载之前用它更新jnlp文件。另外,我添加了一些临时文件,以避免一直这样做,只有当URL发生变化时才会这样做。

以下是相关代码:

        File jnlp = null;
        File backup = null;
        String protocol = "http://";
        String url = request.getRequestURL().toString();
        url = url.substring(url.indexOf(protocol) + protocol.length(), url.indexOf("/xinco/menu.jsp"));
        File last = new File(getServletContext().getRealPath("/client/" + url + ".xinco"));
        if (!last.exists()) {
            File dir = new File(getServletContext().getRealPath("/client/"));
            String[] list = dir.list(new ExtensionFilter(".xinco"));

            if (list.length != 0) {
                for (int i = 0; i < list.length; i++) {
                    new File(dir.getAbsolutePath(), list[i]).delete();
                }
            }
            try {
                jnlp = new File(getServletContext().getRealPath("/client/XincoExplorer.jnlp"));
                backup = new File(getServletContext().getRealPath("/client/XincoExplorer.jnlp.bak"));
                backup.createNewFile();
                if (jnlp.exists()) {
                    FileChannel source = null;
                    FileChannel destination = null;
                    try {
                        source = new FileInputStream(jnlp).getChannel();
                        destination = new FileOutputStream(backup).getChannel();
                        destination.transferFrom(source, 0, source.size());
                    } finally {
                        if (source != null) {
                            source.close();
                        }
                        if (destination != null) {
                            destination.close();
                        }
                    }
                    try {
                        StringBuilder contents = new StringBuilder();
                        //use buffering, reading one line at a time
                        //FileReader always assumes default encoding is OK!
                        BufferedReader input = new BufferedReader(new FileReader(jnlp));
                        try {
                            String line = null; //not declared within while loop
                        /*
                             * readLine is a bit quirky :
                             * it returns the content of a line MINUS the newline.
                             * it returns null only for the END of the stream.
                             * it returns an empty String if two newlines appear in a row.
                             */
                            while ((line = input.readLine()) != null) {
                                if (line.contains("codebase") && !line.startsWith("<!")) {
                                    String start = line.substring(0,
                                            line.indexOf(protocol) + protocol.length());
                                    String end = null;
                                    end = line.substring(line.indexOf("/xinco"));
                                    line = start + url + end;
                                }
                                contents.append(line);
                                contents.append(System.getProperty("line.separator"));
                            }
                            //use buffering to update jnlp
                            Writer output = new BufferedWriter(new FileWriter(jnlp));
                            try {
                                //FileWriter always assumes default encoding is OK!
                                output.write(contents.toString());
                            } finally {
                                output.close();
                            }
                        } finally {
                            input.close();
                            backup.delete();
                            last.createNewFile();
                        }
                    } catch (IOException ex) {
                        try {
                            source = new FileInputStream(backup).getChannel();
                            destination = new FileOutputStream(jnlp).getChannel();
                            destination.transferFrom(source, 0, source.size());
                            backup.delete();
                        } finally {
                            if (source != null) {
                                source.close();
                            }
                            if (destination != null) {
                                destination.close();
                            }
                        }
                    }
                } else {
                    throw new XincoException("Missing XincoExplorer.jnlp!");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }