您的位置:首页 > 运维架构 > Tomcat

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代码书写错误

代码见上方第一个标题

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: