/*
* 创建日期 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);
%>;
* 创建日期 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);
%>;
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
系统编译找不到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盘上
以下就是乱码内容
?JFIFC $.' ",#(7),01444'9=82<.342C 2!!22222222222222222222222222222222222222222222222222<" ?}!1AQa"q2亼?#B绷R佯$3br? %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz儎厗噲墛挀敃枟槞殺¥ウЖ┆渤吹斗腹郝媚牌侨墒矣哉肿刭卺忏溴骁栝犟蝮趱鲼? ?w!1AQaq"2?B憽绷 #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz們剠唶垑姃摂晼棙櫄ⅲぅΗī炒刀犯购旅呐魄壬室釉罩棕仝忏溴骁栝牝篝貊鼬 ?舡[T:uびJ2???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│瑲榧玨2s?C驕馪F^-KjH罊6闔?ⅸ{栢"}.m?P@苲G鍤?話軨??齇?J(柸u虒?0?06?鄓湶?)驗盖<黠憡(燢vU??讹3pl`?槔猙v醕珙?;
你调用方式错了!
新建一个页面如:
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>这样来调用
你应该研究研究的,只靠别人给你答案,你学不到多少东西的~!
你要看看我给你的路径是<img src="join/CodeImage.jsp">
证明CodeImage.jsp是在join 目录下的!
你要显示就的把CodeImage.jsp放在join目录下!
要不你就用:<img src="CodeImage.jsp">
?JFIFC $.' ",#(7),01444'9=82<.342C 2!!22222222222222222222222222222222222222222222222222<" ?}!1AQa"q2亼?#B绷R佯$3br? %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz儎厗噲墛挀敃枟槞殺¥ウЖ┆渤吹斗腹郝媚牌侨墒矣哉肿刭卺忏溴骁栝犟蝮趱鲼? ?w!1AQaq"2?B憽绷 #3R?br?$4??&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz們剠唶垑姃摂晼棙櫄ⅲぅΗī炒刀犯购旅呐魄壬室釉罩棕仝忏溴骁栝牝篝貊鼬 ?舡[T:uびJ2???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│瑲榧玨2s?C驕馪F^-KjH罊6闔?ⅸ{栢"}.m?P@苲G鍤?話軨??齇?J(柸u虒?0?06?鄓湶?)驗盖<黠憡(燢vU??讹3pl`?槔猙v醕珙?;用image 格式输出实际上是一个图片的!
就跟你把一个图片用记事本或者类似工具打开看到的效果差不多的,全是乱码!
只有用对应的程序或组件打开才会显示!
所以在web浏览器上要用<img>标签才会正常显示你能看到乱码证明CodeImage类 ,CodeImage.jsp是正常运行的!
出现红差,是说没找到图片源!就是路径问题了!
每调用一次程序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)