今天遇到一个问题,部署环境时验证码不出来,一直报image的io异常:
解决1:换一种输出方式
<%@ page language="java" contentType="image/jpeg" pageEncoding="GBK"%> <%@ page import="java.awt.*"%> <%@ page import="java.awt.image.*"%> <%@ page import="java.util.*"%> <%@ page import="javax.imageio.*"%> <%@ page import="com.sun.image.codec.jpeg.JPEGCodec,com.sun.image.codec.jpeg.JPEGImageEncoder"%> <html> <body> <%! 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); } %> <% 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(getRandColor(160,200)); for(int i=0;i<155;i++){ int x=random.nextInt(width); int y=random.nextInt(height); int x1=random.nextInt(12); int y1=random.nextInt(12); g.drawLine(x,y,x+x1,y+y1); } //get the random number 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); } //put the checkNumber into session session.setAttribute("verify_code",sRand); response.reset(); //如果不加此句,在weblogic下,验证码不显示。 g.dispose(); // ImageIO.write(image,"JPEG",response.getOutputStream()); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream()); encoder.encode(image); %> </body> </html>
解决2:在tomcat里目录下加一个temp文件夹
javax.imageio.IIOException: Can't create output stream! javax.imageio.ImageIO.write(ImageIO.java:1521) 网上搜此问题,有说法是与JDK有关,并给出解决方案: 把 ImageIO.write(image, "jpeg", response.getOutputStream()); 修改为 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream()); encoder.encode(image); //jsp上要增加com.sun.image.codec.jpeg.JPEGCodec,com.sun.image.codec.jpeg.JPEGImageEncoder这些类的import 经验证,是可以解决问题的。 但是。。。,原因怎会是JDK?我这个环境几分钟前还是正常的,中间没有安装过JDK或者修改环境变量 检查tomcat的日志,终于真相大白: javax.imageio.IIOException: Can't create output stream! at javax.imageio.ImageIO.write(ImageIO.java:1521) Caused by: javax.imageio.IIOException: Can't create cache file! at javax.imageio.ImageIO.createImageOutputStream(ImageIO.java:395) at javax.imageio.ImageIO.write(ImageIO.java:1519) ... 34 more Caused by: java.io.IOException: 系统找不到指定的路径。 原来是ImageIO.write(image, "jpeg", response.getOutputStream()); 需要写缓冲文件,但是写文件不成功。 手动创建temp目录,问题解决!
相关推荐
用户提交表单时,Struts2会调用预先配置的验证码验证拦截器,比较session中的验证码值与用户输入,若不匹配则抛出异常或返回错误信息。 ### 其他相关知识点 1. **.jar包**: 提供的.jar包可能包含了验证码生成所...
前端页面通常会通过JavaScript异步请求后端接口来获取验证码图片,并显示在页面上。例如,可以使用AJAX或fetch API等方式发起GET请求。 ```javascript fetch('/verify/makeVerifyCode', { method: 'GET' }) .then...
- **比较验证码**:对用户输入的验证码和session中的验证码进行比较,注意大小写不敏感。 #### 总结 以上就是使用SSM框架实现登录页面验证码功能的完整过程。这种方法简单且易于实现,同时也能够有效提高网站的...
7. 输出验证码图像:将BufferedImage对象通过ImageIO.write方法输出到客户端。 知识点四:验证码的存储与验证 在本例中,生成的验证码字符串被存储在session中。在用户提交表单后,需要在后端代码中(例如check.jsp...
这里将请求发送到服务器上的`CheckCode`处理程序,生成验证码图片并将其显示在页面上。 #### 四、安全性与优化建议 - **提高安全性**:可以考虑增加图形扭曲、噪点等元素来提高识别难度。 - **扩展验证码类型**:...
在JSP中显示Servlet生成或读取的图片是一项常见的任务,尤其在动态网站开发中,例如用户上传的图片处理、验证码生成等场景。本篇将详细介绍如何实现这一功能,涉及的知识点包括Java Servlet、JSP、HTTP协议以及文件I...
6. **异常处理**:为了确保程序的健壮性,`PictureCheckCode`可能会包含异常处理机制,以处理可能出现的错误情况,如文件不存在、内存不足等问题。 7. **单元测试**:为了确保代码的正确性,开发者可能还编写了单元...
这可能涉及到Java的`java.awt`和`javax.imageio`包,用于创建和操作图像。 - 用户点击验证码图片可以刷新验证码,这可能通过重置验证码字符串并重新绘制图像来实现。 4. **事件监听**: - Swing中的组件可以通过...
\n - 验证码的刷新功能通过监听器`jl4.addMouseListener(new addEvent())`实现,用户可以点击“看不清”标签来更换验证码。\n\n3. **界面布局**\n - 采用`null`布局,允许精确控制组件的位置和大小。这种方式虽然...
- 设置默认错误页为空,这通常意味着任何异常都将在当前页面处理。 2. **登录逻辑**: - 通过`request.getParameter`方法获取用户提交的用户名和密码。 - 为了简化示例,这里没有显示具体的登录验证逻辑,但在...
- 为“瞧不清”标签添加鼠标监听器,以便用户可以刷新验证码。 ### 6. 文件操作 - **读取文件中的图像资源:** - 使用`File`类表示文件路径。 - 使用异常处理确保文件读取过程中出现错误时能够正常处理。 ### ...
在IT行业中,Java-...在实际应用中,还需要考虑异常处理、等待元素加载、动态加载内容的处理以及如何处理登录后的会话保持等问题。同时,为了遵守网站的使用协议和避免被封IP,应确保合理、合法地进行自动化操作。