這幾天一直被一個問題搞得頭暈腦脹,本人項目裡要實現這樣一個功能,在報表裡顯示一個三維向量圖(其實沒那麼神乎),於是需要寫一個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(); } %>