這幾天一直被一個問題搞得頭暈腦脹,本人項目裡要實現這樣一個功能,在報表裡顯示一個三維向量圖(其實沒那麼神乎),於是需要寫一個jsp頁面來輸出圖片。
本來已經在tomcat下調試成功了的,但是到了現場調試功能的時候,就出現了亂碼。於是樓主我使盡各種辦法,終不得解。最後最後在公司一位大大的指導下,終於解決了。
原來是weblogic對文件處理規則和tomcat處理規則不一樣,像下面這段代碼:
<%@page import="java.io.OutputStream"%> <%@page import="javax.imageio.ImageIO"%> <%@page import="java.awt.Color"%> <%@page import="java.awt.Font"%> <%@page import="java.awt.Graphics"%> <%@page import="java.awt.image.BufferedImage"%> <%@page import="java.io.BufferedOutputStream"%> <%@page import="java.io.FileOutputStream"%> <%@page import="java.util.Date"%> <%@page import="java.util.Random"%> <%@page import="com.sun.image.codec.jpeg.JPEGCodec"%> <%@page import="com.sun.image.codec.jpeg.JPEGImageEncoder"%> <%@page import="java.io.OutputStream"%> <%@page import="javax.imageio.ImageIO"%> <%@page import="java.awt.Color"%> <%@page import="java.awt.Font"%> <%@page import="java.awt.Graphics"%> <%@page import="java.awt.image.BufferedImage"%> <%@page import="java.io.BufferedOutputStream"%> <%@page import="java.io.FileOutputStream"%> <%@page import="java.util.Date"%> <%@page import="java.util.Random"%> <%@page import="com.sun.image.codec.jpeg.JPEGCodec"%> <%@page import="com.sun.image.codec.jpeg.JPEGImageEncoder"%>
對於tomcat容器來說,tomcat會自動處理成這樣的
。[<%@page import="java.io.OutputStream"%><%@page import="javax.imageio.ImageIO"%> <%@page import="java.io.OutputStream"%><%@page import="javax.imageio.ImageIO"%>
也就是說,對於jsp文件,tomcat自動去掉換行和空格符號。
但是對於weblogic來說,就沒有這樣的處理規則。而是把
<%@page import="java.io.OutputStream"%> <%@page import="javax.imageio.ImageIO"%> <%@page import="java.io.OutputStream"%> <%@page import="javax.imageio.ImageIO"%>
這樣的代碼以一個回車符輸出,這個符號和下面輸出圖片的流自然就組合在一起了。圖片流的開頭多了這樣一些換行符,自然就不能正常顯示了。
而是出現亂碼。
解決此問題的關鍵就在於,檢查jsp文件裡"<%%>"外是否有多余的回車符和空格,有的話,就去掉,然後把文件開頭的聲明改成如下的形式,這樣就避免了輸出多余的回車符。
正確的jsp頁面應該是這樣的,如下圖:
<%@page import="java.io.OutputStream"
%><%@page import="javax.imageio.ImageIO"
%><%@page import="java.awt.Color"
%><%@page import="java.awt.Font"
%><%@page import="java.awt.Graphics"
%><%@page import="java.awt.image.BufferedImage"
%><%@page import="java.io.BufferedOutputStream"
%><%@page import="java.io.FileOutputStream"
%><%@page import="java.util.Date"
%><%@page import="java.util.Random"
%><%@page import="com.sun.image.codec.jpeg.JPEGCodec"
%><%@page import="com.sun.image.codec.jpeg.JPEGImageEncoder"
%><%!
/**
* 增加文本
* */
private void addText(Graphics graphics, String[] zbm, int i, Integer[] bd,int wz) {
/*…涉及到隱私…*/
}
%><%
try{
String zfx = request.getParameter("zfx");
String i1=request.getParameter("uaia");
String i2=request.getParameter("ubib");
String i3=request.getParameter("ucic");
Double uaia = Double.valueOf(i1);
Double ubib = Double.valueOf(i2);
Double ucic = Double.valueOf(i3);
int imageWidth = 224;// 圖片的寬度
int imageHeight = 175;// 圖片的高度
BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
Graphics graphics = image.getGraphics();
graphics.setColor(Color.white);
graphics.fillRect(0, 0, imageWidth, imageHeight);
graphics.setColor(Color.black);
/*涉及到隱私*/
graphics.dispose();
OutputStream outs = response.getOutputStream();
ImageIO.write(image, "jpeg", outs);
}catch(Exception e){
e.printStackTrace();
}
%>