Tomcat工程Java文件生成图片加载不出来&&Java文件生成随机四位验证码教程
2020-08-07 12:01
1176 查看
Java文件生成随机四位验证码代码及教程
package cn.itcast.chapter06.session.example; import sun.net.www.content.text.Generic; import javax.imageio.ImageIO; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; @WebServlet("/check") public class ChesckServlet extends HttpServlet { private static int WIDTH=60; private static int HEIGHT=20; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session =req.getSession(); resp.setContentType("image/jpeg"); ServletOutputStream sos = resp.getOutputStream(); //静止缓存此图片 resp.setHeader("pragma","No-cache"); resp.setHeader("Cache-Control","no-cache"); resp.setDateHeader("Expires",0); //创建内存,并获取图像上下文 BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); //产生随机验证码 char[]rands = generateCheckCode(); //产生图像 drawBcakground(g); drawRands(g, rands); //结束绘图过程,完成图像 g.dispose(); //将图像发给客户端 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ImageIO.write(image, "JPEG",bos); byte[]buf =bos.toByteArray(); resp.setContentLength(buf.length); //将下面的语句也改为bos.weiteTo(sos) sos.write(buf); bos.close(); sos.close(); session .setAttribute("check_code",new String(rands) ); } private char[] generateCheckCode() { //定义验证码的字符表 String chars = "0123456789zxcvbnmlkjhgfdsaqwertyuiop"; char[] rands = new char[4]; for (int i = 0; i < 4; i++) { int rand = (int)(Math.random()*36); rands[i] = chars.charAt(rand); } return rands; } private void drawRands(Graphics g, char [] rands){ g.setColor(Color.BLACK); g.setFont(new Font(null,Font.ITALIC|Font.BOLD,18)); //在不同高度输出验证码 g.drawString(""+rands[0],1,7); g.drawString(""+rands[1],16,15); g.drawString(""+rands[2],31,18); g.drawString(""+rands[3],46,16); System.out.println(rands); } private void drawBcakground(Graphics g){ g.setColor(new Color(0xDCDCDC)); g.fillRect(0, 0, WIDTH,HEIGHT); //产生120个干扰点 for(int i=0;i<100;i++){ int x = (int)(Math.random()*WIDTH ); int y = (int)(Math.random()*HEIGHT); int red = (int)(Math.random()*225); int green = (int)(Math.random()*225); int blue = (int)(Math.random()*225); g.setColor(new Color(red,green,blue)); g.drawOval(x,y,1,0); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } }
代码不懂查看此处资料((Tomcat资料一)Servlet资料总结)
问题现状
验证码图片加载不出来
原因如下:
一、HTML代码错误
<form name = "reg" action="/login" method="post"> <meta charset="UTF-8"> 账号:<input type="text" name="username"/><br> 密码:<input type="password" name="passward"/><br> 验证码:<input type="text" name="check_code"> <img src="/chapter06/CheckServlet"><br> <input type="submit" value="提交" id="bt"> </form>
正确的代码
<form name = "reg" action="/login" method="post"> <meta charset="UTF-8"> 账号:<input type="text" name="username"/><br> 密码:<input type="password" name="passward"/><br> 验证码:<input type="text" name="check_code"> <img src="/check"> <input type="submit" value="提交" id="bt"> </form>
< img src="/check" >此处的路由对应上方Java文件的路由
对于客户端来说,由java文件生成的图片需要访问Java文件,而客户端不能直接访问Java文件,如果要访问Java文件需要配置路由,配置路由方法(点击查看)
二、Java代码书写错误
代码见上方第一个标题
相关文章推荐
- Java随机生成验证码图片,并且保存到文件系统中
- Java随机生成验证码图片,并且保存到文件系统中
- Java随机生成验证码,并且转化成图片
- java随机生成四位字符验证码(使用Graphics绘图类)
- Java随机生成四位数字的验证码
- java生成随机数字验证码图片
- java随机动态生成汉字验证码图片的实例代码分享
- Java生成随机验证码图片
- Java生成随机验证码图片并进行Base64编码
- java实现随机生成验证码图片
- Java生成随机汉字验证码图片
- 随机生成验证码图片并将之输出为一个png文件。
- Java随机生成验证码图片
- JAVA生成随机验证码图片
- javaweb之response随机生成图片验证码加载到web页面中(本实例使用了禁止浏览器缓存头),并且单击使用javascript换图片
- java图片验证码生成教程详解
- TensorFlow入门教程(十四):生成验证码图片并转化为tfrecoder文件
- 小白都能看得懂的教程 看完这篇还不会生成随机验证码图片,你来打我!!!
- java随机动态生成汉字验证码图片的实例代码分享
- Java生成随机验证码图片并进行Base64编码