/*
 * 创建日期 2005-6-22
 *
 * TODO 要更改此生成的文件的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
package wl.util;import java.awt.*;
import java.awt.image.*;
import java.io.IOException;
import java.util.*;
import javax.imageio.*;
import javax.servlet.http.HttpServletResponse;/**
 * @author Administrator
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class CodeImage 
{
private static CodeImage instance;
public static synchronized CodeImage getInstanse()
{
if (instance == null) 
{
instance = new CodeImage();
}
return instance;
}

private 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);
}

public void getImage(HttpServletResponse response,String sRand)
{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
//  在内存中创建图象
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//  获取图形上下文
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.PLAIN,18));// 画边框
// g.setColor(new Color());
// g.drawRect(0,0,width-1,height-1);//  随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
 int x = random.nextInt(width);
 int y = random.nextInt(height);
        int xl = random.nextInt(12);
        int yl = random.nextInt(12);
 g.drawLine(x,y,x+xl,y+yl);
}//  取随机产生的认证码(4位数字)
for (int i=0;i<sRand.length();i++)
{
    String rand=String.valueOf(sRand.charAt(i));
    // 将认证码显示到图象中
    g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
    g.drawString(rand,13*i+6,16);
}//  将认证码存入SESSION//  图象生效
g.dispose(); try {
//  输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}CodeImage.jsp<%@ page language="java" import="java.util.*,wl.util.*"%>
<%
Random random = new Random();
String sRand = "";
for (int i=0;i<4;i++){
    String rand=String.valueOf(random.nextInt(10));
    sRand+=rand;
    // 将认证码显示到图象中
}
session.setAttribute("ImageCode",sRand);
CodeImage.getInstanse().getImage(response,sRand);
%>;

解决方案 »

  1.   

    C:\resin\doc\WEB-INF\classes\w1\util>javac *.java
    CodeImage.java:8: package javax.servlet.http does not exist
    import javax.servlet.http.HttpServletResponse;
                              ^
    CodeImage.java:39: cannot resolve symbol
    symbol  : class HttpServletResponse
    location: class wl.util.CodeImage
            public void getImage(HttpServletResponse response,String sRand)
                                 ^
    2 errors
      

  2.   

    这种问题..............
    系统编译找不到HttpServletResponse类
    你需要把tomcat自带的servlet.jar包引入CLASSPATH中(tomcat5以上为Tomcat 5.5\common\lib\servlet-api.jar)
    javac -CLASSPATH ".;D:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar" *.java
    你的不一定在d盘上
      

  3.   

    我把zrla() 你说的加上了编译正常但是,调用192.168.0.2/codeimage.jsp 出现的全部是乱码。
    以下就是乱码内容
    ?JFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222<" ?}!1AQa"q2亼?#B绷R佯$3br? %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz儎厗噲墛挀敃枟槞殺¥ウЖ┆渤吹斗腹郝媚牌侨墒矣哉肿刭卺忏溴骁栝犟蝮趱鲼? ?w!1AQaq"2?B憽绷 #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz們剠唶垑姃摂晼棙櫄ⅲぅΗī炒刀犯购旅呐魄壬室釉罩棕仝忏溴骁栝牝篝貊鼬 ?舡[T:uびJ2???1邞字?v第圯?ss?Y<紗鄎弱席J5柟{Y(?FX汶糿?忒A訴>忎圮*Y煻[鵊t嶗?€枨#g甇5)+ S?鎸酚盱謠?蚼蝙J[瀤濦=狗り[L呔刐蝝?麛?濭8鐑?p:V埈bmJ??vJ艸u(?%鄥邘衃禜悭i鴌炪F媡kj瘾$L办巟y"B橓wd熥斧q\?宕/袁?擸 \殛44G鰺8檝d?嵿実v9舤:澨閔%傌L響?寕r[ 郎>?$鐡i&庳xH締驟濷2In?yA0bド C7'5趈:寰嚘Ky=膇釙bz"?撓凌9.琤??缪輹?蟱╦w慅炩蟕e3y埨瓵 ???巶揿??7`}褞絨誰/?谂揸蜾櫑u堚`F亰侤^s祲苢],7峮?輨a仧?奧DS│瑲榧玨2s?C驕馪F^-KjH罊6闔?ⅸ{栢"}.m?P@苲G鍤?話軨??齇?J(柸u虒?0?06?鄓湶?)驗盖<黠憡(燢vU??讹3pl`?槔猙v醕珙?;
      

  4.   

    不是这样调用的!
    你调用方式错了!
    新建一个页面如:
    index.jsp<%@page contentType="text/html; charset=gb2312" language="java" import="wl.web.*" errorPage="" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>物流系统管理登录</title>
    <link rel="Shortcut Icon" href="1.ico"> 
    <!--默认风格--> 
    <!--论坛页面开始代码--> 
    </head>
    <body>
        <img src="join/CodeImage.jsp">
    </body>
    </html>这样来调用
      

  5.   

    楼主,你不要只拷贝呀,有个路径问题在的!
    你应该研究研究的,只靠别人给你答案,你学不到多少东西的~!
    你要看看我给你的路径是<img src="join/CodeImage.jsp">
    证明CodeImage.jsp是在join 目录下的!
    你要显示就的把CodeImage.jsp放在join目录下!
    要不你就用:<img src="CodeImage.jsp">
      

  6.   

    还有这些乱码
    ?JFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222<" ?}!1AQa"q2亼?#B绷R佯$3br? %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz儎厗噲墛挀敃枟槞殺¥ウЖ┆渤吹斗腹郝媚牌侨墒矣哉肿刭卺忏溴骁栝犟蝮趱鲼? ?w!1AQaq"2?B憽绷 #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz們剠唶垑姃摂晼棙櫄ⅲぅΗī炒刀犯购旅呐魄壬室釉罩棕仝忏溴骁栝牝篝貊鼬 ?舡[T:uびJ2???1邞字?v第圯?ss?Y<紗鄎弱席J5柟{Y(?FX汶糿?忒A訴>忎圮*Y煻[鵊t嶗?€枨#g甇5)+ S?鎸酚盱謠?蚼蝙J[瀤濦=狗り[L呔刐蝝?麛?濭8鐑?p:V埈bmJ??vJ艸u(?%鄥邘衃禜悭i鴌炪F媡kj瘾$L办巟y"B橓wd熥斧q\?宕/袁?擸 \殛44G鰺8檝d?嵿実v9舤:澨閔%傌L響?寕r[ 郎>?$鐡i&庳xH締驟濷2In?yA0bド C7'5趈:寰嚘Ky=膇釙bz"?撓凌9.琤??缪輹?蟱╦w慅炩蟕e3y埨瓵 ???巶揿??7`}褞絨誰/?谂揸蜾櫑u堚`F亰侤^s祲苢],7峮?輨a仧?奧DS│瑲榧玨2s?C驕馪F^-KjH罊6闔?ⅸ{栢"}.m?P@苲G鍤?話軨??齇?J(柸u虒?0?06?鄓湶?)驗盖<黠憡(燢vU??讹3pl`?槔猙v醕珙?;用image 格式输出实际上是一个图片的!
    就跟你把一个图片用记事本或者类似工具打开看到的效果差不多的,全是乱码!
    只有用对应的程序或组件打开才会显示!
    所以在web浏览器上要用<img>标签才会正常显示你能看到乱码证明CodeImage类 ,CodeImage.jsp是正常运行的!
    出现红差,是说没找到图片源!就是路径问题了!
      

  7.   

    有一个问题需要请高手们帮忙解决:
    每调用一次程序codeimage.jsp生成的java都会有exception错误,程序是正常的请看log信息2005-6-30 15:05:59 org.apache.catalina.core.StandardWrapperValve invoke
    严重: Servlet.service() for servlet jsp threw exception
    java.lang.IllegalStateException: getOutputStream() has already been called for this response
    at org.apache.catalina.connector.Response.getWriter(Response.java:596)
    at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:186)
    at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:124)
    at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:117)
    at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:191)
    at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:115)
    at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
    at org.apache.jsp.join.CodeImage_jsp._jspService(org.apache.jsp.join.CodeImage_jsp:69)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at wl.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:122)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:743)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Unknown Source)