程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> weblogic容器通過JSP頁面輸出圖片出現亂碼Tomcat下卻正常

weblogic容器通過JSP頁面輸出圖片出現亂碼Tomcat下卻正常

編輯:關於JSP

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved