2020.3.31Java学习笔记
利用java生成带有干扰线的网页验证码图片以及测试源根的初体验
- 在java–>controller–>新建CaptcheController类作为今天实验的容器。
- 继承HttpServlet类,重写其service方法。
- 我把自己需要注意的代码都做了注释,方便自己日后查看。
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();//返回}}
实验结果
测试源根
- 作用:检验需要上传代码的可用性,提交远程仓库时,不会被提交。
- 在目录底下新建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学习笔记相关推荐
- 2020年安卓学习笔记目录
文章目录 一.讲课笔记 二.安卓案例 三.安卓实训项目 四.学生安卓学习博客 五.安卓课后作业 (一)界面设计练习 1.制作登录界面 2.制作部队管理界面 3.制作灭火救援界面 4.制作交付界面 5. ...
- 2020.4.20学习笔记
今天学习笔记 学习了 交叉熵函数 学习了为什么使用激活函数 学习深度学习在tensorflow中的一些应用 交叉熵函数 怎样理解交叉熵 作者的大概提了这几个方面(具体公式见链接) 信息量:表示信息的含 ...
- 2020校招求职学习笔记
深度学习部分 过拟合与欠拟合 欠拟合指模型不能在训练集上获得足够低的训练误差: 过拟合指模型的训练误差与测试误差(泛化误差)之间差距过大: 反映在评价指标上,就是模型在训练集上表现良好,但是在测试集和 ...
- python实验题第四章_「Python」2020.03.16学习笔记 | 第四章列表、元组、字典-习题(11-13)...
学习测试开发的Day74,真棒! 学习时间为1H 第四章列表.元组.字典-习题(11-13) 11.求两个集合的交集和并集 代码 list1=[1,2,3,4] list2=[2,3,5,5] def ...
- 李宏毅2020机器学习深度学习 笔记1(理论上持续更新中)
我真的超能鸽
- 2020/6/5 学习笔记
1.bin目录下是mysql本身一些主要的可执行程序. mysqld.exe是数据库服务端的程序,运行在服务端,由它具体地管理一个个数据库仓库.管理每个仓库里的表. mysql.exe是客户端的程序, ...
- 2020/4/20 学习笔记
5.3 1.在windows xp系统没有用sp2升级的情况下,打开控制面板是找不到安全中心的,所以为了打开或者关闭Internet防火墙,需要: 打开控制面板中的网络连接,会有拨号.LAN或高速In ...
- [软件工程]软件生存周期过程与管理————(2020.6.29学习笔记)
目录 第一节 软件生存周期过程概述 第二节 过程描述 第三节 应用说明 第四节 软件生存周期模型 第五节 过程规划与管理 第一节 软件生存周期过程概述 软件生存周期(SDLC,软件生命周期) 是软件的 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
最新文章
- SQLite 基本命令使用方式
- DDD理论学习系列(11)-- 工厂
- 推荐一份基于Docker的DevOps实战培训教程
- POJ 3172 (认真读题的题)
- ubuntu10.4的更新源因过期无法更新的解决方法
- 奖品好low !! -- 说说开源中国oschina的年度评选
- Linux安装java(jdk8)
- 总结1---CPU之上
- 通过kafka提供的命令来查看offset消费情况
- desktop viewer
- ie调试html代码,IE下的调试工具IE WebDeveloper
- SCSI设备IO栈与块设备并发机制
- cad文字宽度因子_为什么CAD中无法修改文字的宽度比例?
- 【工控】脉冲当量怎么算?
- 2022电大国家开放大学网上形考任务-中外政治思想史非免费(非答案)
- 用matlab解根3乘根2,MATLAB应用.ppt
- SwiftUI应用开屏广告界面项目(一)
- Latex 伪代码、三线表与多线表
- C++ 什么是多态,多态的用途
- CGB2109-Day12-用户模块管理
热门文章
- json文件批量转换xml
- PHP字体间距设置,wps字间距怎么调整
- python tkinter progressbar_Tkinter 之ProgressBar进度条标签
- Win 10 开机出现no bootable device
- 语句摘抄——第11周
- android usb投影win10,分享win10投影到安卓平板上的方法
- 如何通过发送短信唤起三方app?
- HDU 6438 Buy and Resell【贪心】
- 对方启用和留言是什么意思_美国人老说“How so”?到底啥意思?“怎么这样”吗?...
- byte最大值最小值的问题