利用java生成带有干扰线的网页验证码图片以及测试源根的初体验

  1. 在java–>controller–>新建CaptcheController类作为今天实验的容器。
  2. 继承HttpServlet类,重写其service方法。
  3. 我把自己需要注意的代码都做了注释,方便自己日后查看。


package cn.edu.mju.project1.controller;import javax.imageio.ImageIO;
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 java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Arrays;
import java.util.Random;@WebServlet("captche")
public class CaptcheController extends HttpServlet {private final int WIDTH = 100;//设置int型常量值,常量值不可更改,名称一般全大写private final int HEIGHT= 80;@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {BufferedImage img = new BufferedImage(100,80,BufferedImage.TYPE_INT_RGB);//申请内存空间,创建图片对象Graphics g =img.getGraphics();//得到画笔对象Random r=new Random();//设置一个随机变量g.setColor(new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256)));//获取随机一颜色g.fillRect(0,0,WIDTH,HEIGHT);//创建字体,字体的大小应该根据图片的高度来定g.setFont(new Font("黑体",Font.BOLD, 18));//字体为黑体,字体加粗,大小为18g.setColor(Color.RED);//设置其为红色String code = ranString(4);//调用ranString方法,通过更改count数目可以控制其生成个数g.drawString(code,10,20);//1.输出内容,2.在哪里输出 code为调用ranString的变量for(int i=0;i<12;i++){g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));//画线,干扰线的生成g.drawLine(r.nextInt(60), r.nextInt(30), r.nextInt(60), r.nextInt(30));}g.dispose();//将其合并,图片生成ServletOutputStream out = resp.getOutputStream();//输出为二进制数据流(用记事本打开为乱码)ImageIO.write(img,"jpg",out);//将图片以jpg格式输出到管道try{out.flush();//将缓冲区的东西全部刷到out中去,若没有这句话数据传到一半,数据口关闭}finally {out.close();//关闭}}public String ranString(int count){//定义方法,返回字符串 public对比private 在类外也可以访问StringBuilder builder =new StringBuilder();String str = "abcdefghijklmnpqrstuvwxy01234567890";//z,o不推荐用,容易和数字0,2混淆Random rnd = new Random();//生成随机变量for(int i =0;i<count;i++){//可以随机生成4个变量 count为传入的参数int pos = rnd.nextInt(str.length());//得到str的位置String s = str.substring(pos,pos+1);//0-19,取一个builder.append(s);}return builder.toString();//返回}}

实验结果

测试源根

  1. 作用:检验需要上传代码的可用性,提交远程仓库时,不会被提交。
  2. 在目录底下新建test文件,并将其标记为测试源根,否则在其底下无法创建java类。
    .
import cn.edu.mju.project1.controller.CaptcheController;
import org.junit.Test;public class TestCaptche {@Testpublic void testRandomString(){CaptcheController c = new CaptcheController();System.out.println(c.ranString(4));}
}

这个代码可以测试CaptcheController中的ranString方法。

 public String ranString(int count){//定义方法,返回字符串 public对比private 在类外也可以访问StringBuilder builder =new StringBuilder();String str = "abcdefghijklmnpqrstuvwxy01234567890";//z,o不推荐用,容易和数字0,2混淆Random rnd = new Random();//生成随机变量for(int i =0;i<count;i++){//可以随机生成4个变量 count为传入的参数int pos = rnd.nextInt(str.length());//得到str的位置String s = str.substring(pos,pos+1);//0-19,取一个builder.append(s);}return builder.toString();//返回}

点击下面的运行的小绿标即可开始测试

成功生成四个随机范围内的字符,测试成功。

2020.3.31Java学习笔记相关推荐

  1. 2020年安卓学习笔记目录

    文章目录 一.讲课笔记 二.安卓案例 三.安卓实训项目 四.学生安卓学习博客 五.安卓课后作业 (一)界面设计练习 1.制作登录界面 2.制作部队管理界面 3.制作灭火救援界面 4.制作交付界面 5. ...

  2. 2020.4.20学习笔记

    今天学习笔记 学习了 交叉熵函数 学习了为什么使用激活函数 学习深度学习在tensorflow中的一些应用 交叉熵函数 怎样理解交叉熵 作者的大概提了这几个方面(具体公式见链接) 信息量:表示信息的含 ...

  3. 2020校招求职学习笔记

    深度学习部分 过拟合与欠拟合 欠拟合指模型不能在训练集上获得足够低的训练误差: 过拟合指模型的训练误差与测试误差(泛化误差)之间差距过大: 反映在评价指标上,就是模型在训练集上表现良好,但是在测试集和 ...

  4. python实验题第四章_「Python」2020.03.16学习笔记 | 第四章列表、元组、字典-习题(11-13)...

    学习测试开发的Day74,真棒! 学习时间为1H 第四章列表.元组.字典-习题(11-13) 11.求两个集合的交集和并集 代码 list1=[1,2,3,4] list2=[2,3,5,5] def ...

  5. 李宏毅2020机器学习深度学习 笔记1(理论上持续更新中)

    我真的超能鸽

  6. 2020/6/5 学习笔记

    1.bin目录下是mysql本身一些主要的可执行程序. mysqld.exe是数据库服务端的程序,运行在服务端,由它具体地管理一个个数据库仓库.管理每个仓库里的表. mysql.exe是客户端的程序, ...

  7. 2020/4/20 学习笔记

    5.3 1.在windows xp系统没有用sp2升级的情况下,打开控制面板是找不到安全中心的,所以为了打开或者关闭Internet防火墙,需要: 打开控制面板中的网络连接,会有拨号.LAN或高速In ...

  8. [软件工程]软件生存周期过程与管理————(2020.6.29学习笔记)

    目录 第一节 软件生存周期过程概述 第二节 过程描述 第三节 应用说明 第四节 软件生存周期模型 第五节 过程规划与管理 第一节 软件生存周期过程概述 软件生存周期(SDLC,软件生命周期) 是软件的 ...

  9. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

最新文章

  1. SQLite 基本命令使用方式
  2. DDD理论学习系列(11)-- 工厂
  3. 推荐一份基于Docker的DevOps实战培训教程
  4. POJ 3172 (认真读题的题)
  5. ubuntu10.4的更新源因过期无法更新的解决方法
  6. 奖品好low !! -- 说说开源中国oschina的年度评选
  7. Linux安装java(jdk8)
  8. 总结1---CPU之上
  9. 通过kafka提供的命令来查看offset消费情况
  10. desktop viewer
  11. ie调试html代码,IE下的调试工具IE WebDeveloper
  12. SCSI设备IO栈与块设备并发机制
  13. cad文字宽度因子_为什么CAD中无法修改文字的宽度比例?
  14. 【工控】脉冲当量怎么算?
  15. 2022电大国家开放大学网上形考任务-中外政治思想史非免费(非答案)
  16. 用matlab解根3乘根2,MATLAB应用.ppt
  17. SwiftUI应用开屏广告界面项目(一)
  18. Latex 伪代码、三线表与多线表
  19. C++ 什么是多态,多态的用途
  20. CGB2109-Day12-用户模块管理

热门文章

  1. json文件批量转换xml
  2. PHP字体间距设置,wps字间距怎么调整
  3. python tkinter progressbar_Tkinter 之ProgressBar进度条标签
  4. Win 10 开机出现no bootable device
  5. 语句摘抄——第11周
  6. android usb投影win10,分享win10投影到安卓平板上的方法
  7. 如何通过发送短信唤起三方app?
  8. HDU 6438 Buy and Resell【贪心】
  9. 对方启用和留言是什么意思_美国人老说“How so”?到底啥意思?“怎么这样”吗?...
  10. byte最大值最小值的问题