实现
生成验证码<%
//设置页面不缓存
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(ImageTools.getRandColor(200,250));
g.fillRect(0,0,width,height);//设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(ImageTools.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位数字)
String sRand="";
for (int i=0;i<4;i++){
     String rand=String.valueOf(random.nextInt(10));
     sRand+=rand;
     // 将认证码显示到图象中
     g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
     g.drawString(rand,13*i+6,16);
}// 将认证码存入SESSION
session.setAttribute("rand",sRand);// 图象生效
g.dispose();// 输出图象到页面
ImageIO.write(image,"JPEG",response.getOutputStream());
out.clear();
out = pageContext.pushBody();%>
java部分package benz.tools;import java.awt.Color;
import java.util.Random;public class ImageTools {
public static 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);
}
}
jsp包含<img src="image.jsp" alt="验证码" name="img1"/> <a href="javascript:reloadImage();">看不清,点击换一张</a>
一直在没有问题。但是现在在内网测试的时候 是好的,验证码出现,而且没有任何问题。
但是外网上以前一直好的,最近发展验证码为X,不能读取到。
而且报异常java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.checkAndCreate(File.java:1704)
at java.io.File.createTempFile(File.java:1792)
at javax.imageio.stream.FileCacheImageOutputStream.<init>(FileCacheImageOutputStream.java:67)
at com.sun.imageio.spi.OutputStreamImageOutputStreamSpi.createOutputStreamInstance(OutputStreamImageOutputStreamSpi.java:50)
at javax.imageio.ImageIO.createImageOutputStream(ImageIO.java:393)
at javax.imageio.ImageIO.write(ImageIO.java:1558)
at org.apache.jsp.image_jsp._jspService(image_jsp.java:118)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at benz.tools.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:43)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:548)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:619)
找不到问题的所在,非常郁闷。
同样的工程测试执行没有任何问题。但是外网上一直同样的代码也没有问题。
有没有遇到相同问题的~~

解决方案 »

  1.   

    No such file or directory
    描述很清楚啊,文件或目录有问题,仔细找找
      

  2.   

    会不会跟环境变量有关系?还有 以前用的是jdk1.5 现在是1.6
      

  3.   

    而且所有jsp都在这个目录下,只有这个报这个异常,应该不是找不到jsp的问题吧
      

  4.   

    工程目录下面有文件不代表系统就能找到。
    上一次我是做了大量测试才发现是新的服务器不认原有的数据文件(*.json),把这种后缀文件添加到服务器列表里面才能顺利执行。
    我在本地运行以前的服务器软件,公司的服务器上运行新的服务器软件测试的。
    你的问题,有可能是同样的原因吧。换jdk也有可能,debug测试一下吧,看看是哪句出的问题。
      

  5.   

    解决了。网管把外网Linux的代码权限只读了。
    写内存不允许。赋下权就好了
      

  6.   

    问一下你是怎么在 jsp拿到 随机产生的验证码的呢 又是怎样判断验证码正确的的啊》