日期:2014-05-17  浏览次数:20835 次

验证码问题,webLogic中出现“response already committed”错误
code.jsp
Java code
<%@ page import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%>    
<%@ page import="java.io.OutputStream"%>    
<%@ page pageEncoding="UTF-8"%>    
<%!Color getRandColor(int fc, int bc) {    
                Random random = new Random();    
                if (fc > 255)    
                        fc = 255;    
                if (bc > 255)    
                        bc = 255;    
                int r = fc + random.nextInt(bc - fc);    
                int g = fc + random.nextInt(bc - fc);    
                int b = fc + random.nextInt(bc - fc);    
                return new Color(r, g, b);    
        }
%>    
<%    
                try {    
                response.setHeader("Pragma", "No-cache");    
                response.setHeader("Cache-Control", "no-cache");    
                response.setDateHeader("Expires", 0);    
                int width = 70, height = 20;    
                BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);    
                OutputStream os = response.getOutputStream();    
                Graphics g = image.getGraphics();    
                Random random = new Random(); 
                 
                //设置背景和大小 
                g.setColor(getRandColor(200, 250));    
                g.fillRect(0, 0, width, height);
                    
                //设置字体和颜色
                g.setFont(new Font("Times New Roman", Font.BOLD, 20));    
                g.setColor(getRandColor(120, 200));    
                for (int i = 0; i < 50; i++) {    
                        int x = random.nextInt(width);    
                        int y = random.nextInt(height);    
                        int xl = random.nextInt(5);    
                        int yl = random.nextInt(5);    
                        g.drawLine(x, y, x + xl, y + yl);    
                }
                    
                String sRand = "";    
                for (int i = 0; i < 4; i++) {
                    String chose="0123456789";
                    String rand = String.valueOf(chose.charAt(random.nextInt(chose.length())));    
                    sRand += rand;    
                    g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));    
                    g.drawString(rand, 15 * i + 6, 16);    
                }    
                session.setAttribute("rand", new String(sRand));    
                g.dispose(); 
                g=null;   
   
                ImageIO.write(image, "JPEG", os); 
                os.flush();    
                os.close();    
                os = null;    
                response.flushBuffer(); 
                   
                out.clear();    
                out = pageContext.pushBody();    
        } catch (IllegalStateException e) {    
                System.out.println(e.getMessage());    
                e.printStackTrace();    
        }    
%>


login.jsp
HTML code
<form id="form1" name="form1" method="post" action="../function/checklogin.jsp" class="login_form">
    <table width="200" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td align="right">用户名</td>
            <td colspan="2"><input