我为我的客户提供以下方案:
他有一个托管服务器(1)(即http://customer.net),它基本上会以这种格式重定向到一个地址:http:/// app(server 2)
IP地址经常变化(他们甚至每两周告诉我一次)。在服务器2中有一个带有jnlp链接的应用程序,显然它被配置为从服务器2 IP下载。当服务器2的IP发生变化时,jnlp将被破坏。
对我来说,显而易见的选择是与提供商获取专用IP地址,但想知道是否还有其他选项。
提前致谢!
答案 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();
}
}