代码之家  ›  专栏  ›  技术社区  ›  javydreamercsw

托管服务器,更改IP和JNLP

  •  0
  • javydreamercsw  · 技术社区  · 14 年前

    对于我的客户,我有以下场景:

    他有一个托管服务器(1)(即。 http://customer.net

    IP地址经常变化(他们甚至每两周告诉我一次)。服务器2中有一个应用程序具有一个jnlp链接,显然配置为从服务器2ip下载。当服务器2的IP更改时,jnlp将断开。

    对我来说,最明显的选择是与提供商获得一个专用的IP地址,但想知道是否还有其他选择。

    提前谢谢!

    1 回复  |  直到 14 年前
        1
  •  1
  •   javydreamercsw    14 年前

    我想出来了。基本上,我有一个触发jnlp链接的servlet。我从请求中收集正确的URL,并在下载之前用它更新jnlp文件。此外,我添加了一些临时文件,以避免一直这样做,只有当网址改变。

    以下是相关代码:

            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();
                }
            }