欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

weblogic容器通过JSP页面输出图片出现乱码Tomcat下却正常

程序员文章站 2022-04-15 13:05:52
这几天一直被一个问题搞得头晕脑胀,本人项目里要实现这样一个功能,在报表里显示一个三维向量图(其实没那么神乎),于是需要写一个jsp页面来输出图片。 本来已经在tomcat下调试成...

这几天一直被一个问题搞得头晕脑胀,本人项目里要实现这样一个功能,在报表里显示一个三维向量图(其实没那么神乎),于是需要写一个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(); 
    } 
%>