<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 89, comments - 241, trackbacks - 0, articles - 1
       :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理

    一個不會報錯的jsp彩色驗(yàn)證碼程序

    Posted on 2009-09-22 14:52 saobaolu 閱讀(515) 評論(3)  編輯  收藏 所屬分類: javaweb
    一個不會報錯的jsp彩色驗(yàn)證碼程序
    一般的,會報servlet錯誤:
    getOutputStream() has already been called for this response
    但是這個程序不會報錯,原因是把里面的空格都刪除
    -------------------------------------------------------------
    在tomcat中jsp編譯成servlet之后在函數(shù)_jspService(HttpServletRequest request, HttpServletResponse response)的最后
    有一段這樣的代碼
    finally {
          if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
        }
    這里是在釋放在jsp中使用的對象,會調(diào)用response.getWriter(),因?yàn)檫@個方法是和
    response.getOutputStream()相沖突的!所以會出現(xiàn)以上這個異常。

    然后當(dāng)然是要提出解決的辦法,其實(shí)挺簡單的(并不是和某些朋友說的那樣--
    將jsp內(nèi)的所有空格和回車符號所有都刪除掉),

    在使用完輸出流以后調(diào)用以下兩行代碼即可:
    out.clear();
    out = pageContext.pushBody();

    --------------------------------------------------------
    分割線內(nèi)為引用~

     1<%@ page  import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
     2<%@ page import="java.io.OutputStream" %>
     3<%!
     4Color getRandColor(int fc,int bc){
     5Random random = new Random();
     6if(fc>255) fc=255;
     7if(bc>255) bc=255;
     8int r=fc+random.nextInt(bc-fc);
     9int g=fc+random.nextInt(bc-fc);
    10int b=fc+random.nextInt(bc-fc);
    11return new Color(r,g,b);
    12}

    13%>
    14<%
    15try{
    16response.setHeader("Pragma","No-cache");
    17response.setHeader("Cache-Control","no-cache");
    18response.setDateHeader("Expires"0);
    19int width=60, height=20;
    20BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    21OutputStream os=response.getOutputStream();
    22Graphics g = image.getGraphics();
    23Random random = new Random();
    24g.setColor(getRandColor(200,250));
    25g.fillRect(00, width, height);
    26
    27g.setFont(new Font("Times New Roman",Font.PLAIN,18));
    28g.setColor(getRandColor(160,200));
    29for (int i=0;i<155;i++)
    30{
    31int x = random.nextInt(width);
    32int y = random.nextInt(height);
    33int xl = random.nextInt(12);
    34int yl = random.nextInt(12);
    35g.drawLine(x,y,x+xl,y+yl);
    36}

    37String sRand="";
    38for (int i=0;i<4;i++){
    39String rand=String.valueOf(random.nextInt(10));
    40sRand+=rand;
    41g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
    42g.drawString(rand,13*i+6,16);
    43}

    44session.setAttribute("rand",sRand);
    45g.dispose();
    46
    47ImageIO.write(image, "JPEG",os);
    48os.flush();
    49os.close();
    50os=null;
    51response.flushBuffer();
    52out.clear();
    53out = pageContext.pushBody();
    54}

    55catch(IllegalStateException e)
    56{
    57System.out.println(e.getMessage());
    58e.printStackTrace();
    59}
    %>
    60


    沒有所謂的命運(yùn),只有不同的選擇!
    主站蜘蛛池模板: 亚洲午夜日韩高清一区 | 在线免费播放一级毛片| 免费看无码自慰一区二区| 国产亚洲sss在线播放| 日本免费网站视频www区| 亚洲国产精品成人久久久| 亚洲最大免费视频网| 亚洲精品免费在线视频| 日韩免费一区二区三区在线| 99久久婷婷国产综合亚洲| 妞干网手机免费视频| 日韩色日韩视频亚洲网站| 亚洲乱码国产一区网址| av片在线观看永久免费| 亚洲精品卡2卡3卡4卡5卡区| 青青操视频在线免费观看| 久久精品国产亚洲AV网站| 免费A级毛片无码视频| 亚洲天堂电影在线观看| 在线观看人成视频免费| 亚洲AV无码专区在线厂| 亚洲人成影院在线无码观看| a色毛片免费视频| 亚洲妓女综合网99| 国产一区二区三区在线免费 | 亚洲精品偷拍视频免费观看| 亚洲人成伊人成综合网久久久| 永久免费AV无码网站国产| 亚洲精品成人网站在线播放 | 亚洲无码视频在线| 久久国产精品2020免费m3u8| 亚洲免费视频网址| 亚洲成A人片77777国产| 久别的草原电视剧免费观看| 亚洲专区中文字幕| 亚洲国产中文v高清在线观看| 久久一本岛在免费线观看2020| 国产精品亚洲综合五月天| 亚洲Av无码乱码在线观看性色| 国产精成人品日日拍夜夜免费| 亚洲中文字幕久久精品无码VA|