環境:
1、websphere6,使用插件模式,通過websphere的httpserver的80端口訪問其j2eeserver。
2、jfeechart,常規使用。
問題:
jfeechart圖片生成沒有問題,就是圖片顯示不了,表現為左上角有一個叉。
解決方法:
不要使用插件模式,通過websphere的httpserver訪問其j2eeserver,將j2eeserver的端口直接設為80,圖片就顯示正常。
思考:
jfreechart的圖片顯示方法是:
<%
String pieGraphURL = request.getContextPath() + "/DisplayChart?filename=" + piefilename;
%>
再看一下DisplayChart調用的核心源碼:
public static void sendTempFile(File file, HttpServletResponse response,
String mimeType) throws IOException {
if (file.exists()) {
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(file)
);
// Set HTTP headers
if (mimeType != null) {
response.setHeader("Content-Type", mimeType);
}
response.setHeader("Content-Length", String.valueOf(file.length()));
SimpleDateFormat sdf = new SimpleDateFormat(
"EEE, dd MMM yyyy HH:mm:ss z"
);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
response.setHeader(
"Last-Modified", sdf.format(new Date(file.lastModified()))
);
BufferedOutputStream bos = new BufferedOutputStream(
response.getOutputStream()
);
byte[] input = new byte[1024];
boolean eof = false;
while (!eof) {
int length = bis.read(input);
if (length == -1) {
eof = true;
}
else {
bos.write(input, 0, length);
}
}
bos.flush();
bis.close();
bos.close();
}
else {
throw new FileNotFoundException(file.getAbsolutePath());
}
return;
}
可見在web頁面上顯示時分兩步:
1、初始化img容器;
2、調用DisplayChart這個servlet將圖片數據寫進來。
可是在走httpserver時第二步不會起作用的。