实验1_验证码的Java实现

实验1_验证码的Java实现
实验1_验证码的Java实现

南昌航空大学实验报告

2015年月日

课程名称:信息安全概论实验名称:验证码的Java实现

学号:姓名:

指导老师评定:签名:

一、实验目的

通过实验了解验证码的原理,掌握Java语言验证码的实现。

二、实验原理

1.验证码的定义

验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。

2.验证码的作用:

可以防止恶意破解密码、刷票、论坛灌水,有效防止黑客对注册用户用特定程序暴力破解方式进行不断地登录尝试,实际上用验证码是现在很多网站通行的方式。利用比较简易的方式实现这个功能,虽然登录麻烦一点,但是对用户的密码安全来说这个功能还是很有必要,也很重要。

3.验证码的使用

大多数网站的验证码都是需要点击一下填写框,然后会自动弹出验证码图片。由于验证码是随机产生的,有很大几率会出现无法清楚识别的验证码图片,所以需要注意的是,一般网站都会有相应的提示,如“看不清,换一张”等,如果没有提示,则直接点击当前的验证码图片,可以完成验证码的更换。(1)登录时使用:防止暴力破解密码

(2)注册时使用:防止自动批量注册

(3)发帖时使用:防止自动灌水、发广告

三、实验环境

开发工具:JDK、Eclipse

参考资料:JDK API文档

java.awt包

java.awt.event包

javax.swing包

四、实验内容和任务

使用Java语言编程,实现登录时生成验证码的功能。

五、实验要求

(1)登录时,系统随机生成验证码,并显示在图片中;

(2)用户输入用户名、密码和验证码后,系统先判断验证码是否正确,如果不正确,则重新随机生成一个新的验证码,等待用户再次输入;

(3)如果输入的验证码正确,再判断用户名和密码是否正确,判断是否登录成功。

六、程序代码

(1)创建RandomImageGenerator.java类,实现验证码图片的生成。

package com.tenghu.code;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics2D;

import java.awt.image.BufferedImage;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Random;

import javax.imageio.ImageIO;

/**

* 验证码生成类

* @author xiaohu

*

*/

public class RandomImageGenerator {

//创建Random对象

static Random random=new Random();

//随机生成包含验证码字符串

public static String random(int num){

String[] str={"0","1","2","3","4","5","6","7","8","9",

"a","b","c","d","e","f","g","h","i","j",

"k","l","m","n","p","q","r","s","t"};

int number=str.length;

//接收随机字符

String text = "";

//随机产生4个字符的字符串

for(int i=0;i

text+=str[random.nextInt(number)];

}

return text;

}

/**

* 随机产生定义的颜色

*

* @return

*/

private static Color getRandColor() {

Random random = new Random();

Color color[] = new Color[10];

color[0] = new Color(32, 158, 25);

color[1] = new Color(218, 42, 19);

color[2] = new Color(31, 75, 208);

color[3] = new Color(0, 102, 182);

color[4] = new Color(171, 0, 85);

return color[random.nextInt(5)];

}

/**

* 产生随机字体

*

* @return

*/

private static Font getFont() {

Random random = new Random();

Font font[] = new Font[5];

font[0] = new Font("Ravie", Font.BOLD, 30);

font[1] = new Font("Antique Olive Compact", Font.BOLD, 30);

font[2] = new Font("Forte", Font.BOLD, 30);

font[3] = new Font("Wide Latin", Font.BOLD, 30);

font[4] = new Font("Gill Sans Ultra Bold", Font.BOLD, 30);

return font[random.nextInt(5)];

}

/**

* 生成图片

* @throws IOException

*/

public static void render(String randomStr,OutputStream out,int

width,int height) throws IOException{

//在内存中创建图像

BufferedImage bi=new BufferedImage(width, height, BufferedImage.TYPE_BYTE_INDEXED);

//获取图形上下文

Graphics2D g=(Graphics2D) bi.getGraphics();

//话边框

g.setColor(Color.white);

g.fillRect(0, 0, width, height);

g.setFont(getFont());

g.setColor(Color.BLACK);

//画认证码,每个认证码在不同的水平位置

String str1[]=new String[randomStr.length()];

for(int i=0;i

str1[i]=randomStr.substring(i,i+1);

int w=0;

int x=(i+1)%3;

//随机生成验证码字符水平偏移量

if(x==random.nextInt(7)){

w=30-random.nextInt(7);

}else{

w=30+random.nextInt(7);

}

//随机生成颜色

g.setColor(getRandColor());

g.drawString(str1[i], 20*i+10, w);

}

//随机产生干扰点,并用不同的颜色表示,事图像的认证码不易被其他程序探测到 for(int i=0;i<100;i++){

int x=random.nextInt(width);

int y=random.nextInt(height);

Color color=new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255));

//随机画各种颜色的线

g.setColor(color);

g.drawOval(x, y, 0, 0);

}

//画干扰线

for(int i=0;i<15;i++){

int x=random.nextInt(width);

int y=random.nextInt(height);

int x1=random.nextInt(width);

int y1=random.nextInt(height);

Color color=new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255));

//随机画各种颜色线

g.setColor(color);

g.drawLine(x, y, x1, y1);

}

//图像生效

g.dispose();

//输出页面

ImageIO.write(bi, "jpg", out);

}

public static void main(String[] args) throws

FileNotFoundException, IOException {

//获取随机字符串

String randomStr=random(5);

System.out.println(randomStr);

//生成图片

render(randomStr, new FileOutputStream("D:\\test.jpg"),130,40); }

}

(2).创建RandomImageServlet.java,将生成的验证码输出到页面

ackage com.tenghu.code.servlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import com.tenghu.code.RandomImageGenerator;

public class RandomImageServlet extends HttpServlet {

//图片宽度

int width=0;

//图片高度

int height=0;

//图片上随机字符个数

int randomStrNum=0;

public void destroy() {

}

public void doGet(HttpServletRequest request, HttpServletResponse

response)

throws ServletException, IOException {

doPost(request, response);

}

public void doPost(HttpServletRequest request, HttpServletResponse

response)

throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

//获取HttpSession对象

HttpSession session=request.getSession();

//获取随机字符串

String randomStr=RandomImageGenerator.random(randomStrNum);

if(null!=session){

//设置参数

session.setAttribute("randomStr", randomStr);

//设置响应类型,输出图片客户端不缓存

response.setDateHeader("Expires", 1L);

response.setHeader("Cache-Control", "no-cache, no-store, max-

age=0");

response.addHeader("Pragma", "no-cache");

response.setContentType("image/jpeg");

//输出到页面

RandomImageGenerator.render(randomStr, response.getOutputStream

(), width, height);

}

}

public void init() throws ServletException {

//获取宽度

width=Integer.parseInt(this.getInitParameter("width"));

//获取高度

height=Integer.parseInt(this.getInitParameter("height"));

//获取个数

randomStrNum=Integer.parseInt(this.getInitParameter("num"));

}

}

(3).创建LoginAction.java类,控制登录

package com.tenghu.code.action;

import java.io.ByteArrayInputStream;

import java.io.InputStream;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{

//用户名

private String userName;

//密码

private String password;

//验证码

private String code;

private InputStream inputStream;

public InputStream getResult(){

return inputStream;

}

//成功

public String success() throws Exception{

return SUCCESS;

}

//测试登录

public String testLogin() throws Exception{

//获取图片的验证码

String randomStr=(String) ActionContext.getContext().getSession

().get("randomStr");

if(code.trim().equalsIgnoreCase(randomStr)){

if("admin".equals(userName.trim())&&"admin".equals(password.trim

())){

//成功

inputStream=new ByteArrayInputStream("1".getBytes("UTF-8"));

}else{

//用户名或密码错误

inputStream=new ByteArrayInputStream("2".getBytes("UTF-8"));

}

}else{

//验证码错误

inputStream=new ByteArrayInputStream("0".getBytes("UTF-8"));

}

return "result";

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

https://www.360docs.net/doc/aa3045518.html,erName = userName;

}

public String getPassword() {

return password;

}

public void setPassword(String password) { this.password = password;

}

public String getCode() {

return code;

}

public void setCode(String code) {

this.code = code;

}

}

七、小结

通过本次实验我了解了验证码的原理

实验5 JAVA常用类

山西大学计算机与信息技术学院 实验报告 姓名学号专业班级 课程名称 Java实验实验日期成绩指导教师批改日期 实验5 JAVA常用类实验名称 一.实验目的: (1)掌握常用的String,StringBuffer(StringBuilder)类的构造方法的使用;(2)掌握字符串的比较方法,尤其equals方法和==比较的区别; (3)掌握String类常用方法的使用; (4)掌握字符串与字符数组和byte数组之间的转换方法; (5)Date,Math,PrintWriter,Scanner类的常用方法。 二.实验内容 1.二进制数转换为十六进制数(此程序参考例题249页9. 2.13) 程序源代码 import java.util.*; public class BinToHexConversion{ //二进制转化为十六进制的方法 public static String binToHex(String bin){ int temp; //二进制转化为十六进制的位数 if(bin.length()%4==0) temp = bin.length()/4; else temp = bin.length()/4 + 1; char []hex = new char[temp]; //十六进制数的字符形式 int []hexDec = new int[temp];//十六进制数的十进制数形式 int j = 0; for(int i=0;i=0&&dec<10) return (char)('0'+dec-0); else if(dec>=10&&dec<=15) return (char)('A'+dec-10); else return '@'; }

自动生成验证码图片的工具类,收藏起来备用。

[原]自动生成验证码图片的工具类,收藏起来备用。用法:直接调用其静态方法即可。 Map map = ImageUtil.getImage();//获取图片,将图片转换成InputStream流 String key = map.keySet().iterator().next();//获取图片上的字符 BufferedImage image = map.get(key);//获取BufferedImage,赋值给imageStream其中,String为验证码的值,BufferedImage为验证码的图片。 该工具类的代码如下:ImageUtil.java package action; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.HashMap; import java.util.Map; import java.util.Random; public final class ImageUtil { private static final String[] chars = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "东", "南", "西", "北", "中", "发", "白" }; private static final int SIZE = 5;//验证码长度 private static final int LINES = 20;//干扰线条数 private static final int WIDTH = 200;//图片宽度 private static final int HEIGHT = 100;//图片高度 private static final int FONT_SIZE = 60;//字体高度 public static Map getImage() { StringBuffer sb = new StringBuffer(); BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics graphic = image.getGraphics(); graphic.setColor(Color.LIGHT_GRAY); graphic.fillRect(0, 0, WIDTH, HEIGHT); Random ran = new Random(); //画随机字符 for(int i=1;i<=SIZE;i++){ int r = ran.nextInt(chars.length); graphic.setColor(getRandomColor()); graphic.setFont(new Font(null,Font.BOLD+Font.ITALIC,FONT_SIZE));

实验一java基础知识

实验一:java基础知识 实验目的: 1.掌握jave中变量的类型。 2.掌握常用的运算符 3.程序流程控制:顺序,选择和分支 实验内容: 1、回文数: 编写一个Java程序。用户从键盘输入一个1-9999之间的数,程序将判断这个数是几位数,并判断这个数是否回文数。回文数是指该数含有的数字逆序排列后得到的数和原数相同。 实验类别:验证性 2、猜数字游戏 编写一个Java应用程序,实现如下功能: 程序随机分配给客户一个1-100之间的整数 用户在输入对话框中输入自己的猜测 程序返回提示信息,提示信息分别是:“猜大了”、“猜小了”、和“猜对了”用户可以根据提示信息再次输入猜测,直到提示信息是“猜对了” 实验类别:设计性 3、输出希腊字母表 为了输出希腊字母表,首先获取希腊字母表的第一个字母和最后一个字母在unicode表中的位置,然后使用循环输出剩余的希腊字母 要观察一个字符在uniclde表中的顺序位置 实验类别:设计性

实验二类和对象 实验目的: 1.理解类的基本概念。 2.掌握如何定义类,定义类的成员变量和成员方法.创建和使用对象。 3.掌握定义重载方法和构造方法,方法参数的传递。 4. static变量和方法的使用。 实验内容: 1、定义一个名为Rectangle的类表示矩形,其中含有length,width两个double型 的成员变量表示矩形的长和宽。要求为每个变量定义访问方法和修改方法,定义求矩形周长的方法peremeter和求面积的方法area。定义一个带参数构造方法,通过给出的长和宽创建矩形对象。定义默认构造方法,在该方法中调用有参构造方法,将矩形长宽设置为1.0。 实验类别:验证性 2、方法重载: 编写一个Java程序,反映方法重载的使用特点,该程序包含多个重载的加法的运算,如整型加法,实型加法。 实验类别:验证性 3、学生类的创建: 1)创建一个student类,包括的域有学号、班号、姓名、性别、年龄等 2)声明一个构造方法,以初始化对象的所有域 3)声明分别获得各属性(学号、班号、姓名、性别、年龄)的各个public方法。4)声明修改各属性(学号、班号、姓名、性别、年龄)的各个public方法。5)创建一个具体学生对象,进行输出。 实验类别:设计性 4、定义一个类,类中有两个整型变量x和y,并定义构造函数初始化这两个变量。(通过构造函数传数据,数据值自定) 类中还可定义以下方法: 求两个数的和(x+y)并返回结果,求两个数的差(x-y)并返回结果,求两个数商(x/y)并返回结果,求两个数的余数(x%y)并返回结果,求两个数的最大值并返回结果。 编写应用程序,测试上面定义的类,使用类中定义的各个方法并将其结果输出。实验类别:验证性 5、用set()、get()方法传递数据: 本工程共有三个类,Person类、Employee类、和Test类,其中Test类 为测试类,其中有main()方法。 调用的是默认的构造方法,参数为空。 实验类别:设计性

c#生成验证码的方法

新建一个WaterMark.ASHX文件,将如下代码Copy进去 <%@ WebHandler Language="C#" Class="WaterMark" %> using System; using System.Web; using System.Drawing; using System.Drawing.Drawing2D; using System.Web.SessionState; public class WaterMark : IHttpHandler, IRequiresSessionState // 要使用session必须实现该接口,记得要导入System.Web.SessionState命名空间 { public void ProcessRequest(HttpContext context) { string checkCode = GenCode(5); // 产生5位随机字符 context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证 System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22); Graphics g = Graphics.FromImage(image); try { //生成随机生成器 Random random = new Random(); //清空图片背景色 g.Clear(Color.White); // 画图片的背景噪音线 int i; for (i = 0; i < 25; i++) { int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); } Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold)); System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true); g.DrawString(checkCode, font, brush, 2, 2);

JAVA实验报告一

Java语言程序设计实验报告一 班级:姓名:学号: 一、实验教学目的与基本要求 Java程序设计的实验是Java程序设计课程重要的实践教学环节。实验的目的不仅仅是验证理论知识,更重要的是通过上机加强学生的动手能力,掌握常用Java开发环境的使用方法,培养学生分析问题、解决问题、应用知识的能力和创新精神。充分放手让学生自行设计、自主调试,真正培养学生的实践动手能力,全面提高学生的综合素质。 本课程是一门程序设计语言课程,通过本课程的学习,学生能够掌握Java 语言程序的基本特点、基本编程方法和基本开发技巧,培养学生阅读、分析、设计和调试Java语言的能力,并具备一定的面向对象程序设计思想。 本课程的主要任务是在已学习的编程语言基础上,讲述Java语言的数据结构和语法规则;基本控制结构和编程技巧;Java语言面向对象的特点、编程方法和程序设计思路;Java语言的GUI程序和文件及I/O流的编程方法;能够正确配置Java开发环境,并使用相关的编辑、编译、调试、运行命令。 (1)掌握Java语言的编程技巧,能够独立进行面向对象的开发能力。 (2)具有根据编程需求独立查询Java类库文档及相关资料,完成系统的能力。 (3)具有分析、寻找和排除程序中常见问题的能力。

二、实验内容与收获 (1)Java的安装与配置。熟悉语言环境及简单程序设计的使用练习,正确配置Java 开发环境(Eclipse 集成开发环境的安装、配置与使用) a)安装JDK Sun公司为所有的Java程序员提供了一套免费的Java开发和运行环境。 可以通过IE或Netscape浏览器浏览网址:https://www.360docs.net/doc/aa3045518.html,/j2se,根据提示可以下载支持Microsoft Windows操作系统的jdk-1_5_0-windows-i586.exe到本地硬盘。 安装的时候可以选择安装到任意的硬盘驱动器上,例如安装到D:\jdk1.5.0目录下,如图1-2。正确安装后,在JDK目录下有bin、demo、lib、jre等子目录,如图1-3,其中bin目录保存了javac、java、appletviewer等命令文件,demo目录保存了许多java的例子,lib目录保存了Java的类库文件,jre目录保存的是Java的运行时环境(JRE)。 图1-2

实验5Java常用类(一)

实验5 Java类库和常用类(一) 一. 实验目的及实验环境 1理解类库的概念,掌握分析、应用类库中的类的方法。 2熟练掌握Math类的常用方法。熟悉Random类的常用方法。 3理解String类的特性,熟练掌握String类的常用方法。 4能用Date类创建对象,熟练掌握Date类的常用方法。 5熟练掌握SimpleDateFormat解析日期和设置日期输出格式。 6学会查阅Java API在线参考文档和离线文档的方法。 二. 实验内容 1 基本内容(实验前请及时熟悉如下相关内容) 1)练习使用Math类的常用方法。 2)应用String类编程练习。 3)编写程序应用Random类生成随机数。 4)练习使用Date类的常用方法。 5)查阅Java API在线参考文档和下载Java API离线文档。 示例1. 应用SimpleDateFormat类的程序示例如下,共同学们模仿参考。 import java.text.*; import java.util.Date; public class FormatDateTime { public static void main(String[] args) { SimpleDateFormat myFmt = new SimpleDateFormat("yyyy年MM月dd日 HH 时mm分ss秒"); SimpleDateFormat myFmt1 = new SimpleDateFormat("yy/MM/dd HH:mm"); SimpleDateFormat myFmt2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 等价于now.toLocaleString() SimpleDateFormat myFmt3 = new SimpleDateFormat("yyyy年MM月dd日 HH 时mm分ss秒 E "); SimpleDateFormat myFmt4 = new SimpleDateFormat("一年中的第 D 天一年中第w个星期一月中第W个星期在一天中k时 z时区"); Date now = new Date();//当前时间 System.out.println(myFmt.format(now)); System.out.println(myFmt1.format(now)); System.out.println(myFmt2.format(now)); System.out.println(myFmt3.format(now)); System.out.println(myFmt4.format(now)); System.out.println(now.toGMTString());//The method toGMTString() from the type Date is deprecated. System.out.println(now.toLocaleString()); System.out.println(now.toString()); } }

登录校验,生成随机图形验证码

package com.env.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class RandomValidateCode { public static final String RANDOMCODEKEY = "RANDOMVALIDATECODEKEY";//放到session 中的key private Random random = new Random(); private String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机产生的字符串 private int width = 80;//图片宽 private int height = 26;//图片高 private int lineSize = 40;//干扰线数量 private int stringNum = 4;//随机产生字符数量 /* * 获得字体 */ private Font getFont(){ return new Font("Fixedsys",Font.CENTER_BASELINE,18); } /* * 获得颜色 */ private Color getRandColor(int fc,int bc){ if(fc > 255) fc = 255; if(bc > 255) bc = 255; int r = fc + random.nextInt(bc-fc-16); int g = fc + random.nextInt(bc-fc-14); int b = fc + random.nextInt(bc-fc-18); return new Color(r,g,b); }

实验四 Java知识

实验四java知识 本实验目的是练习如何创建Java 的基本语法,以及面向对象的知识,为后续的实验作好准备工作。 【课堂练习】一 (1)对数组排序 【实验效果】 根据实验要求,您必须在浏览器的地址栏中输入:Tomcat服务器的IP地址和端口号,如:http://localhost:8080/sort.jsp 【课堂练习】Java面向对象思想 课堂练习——包创建和引用 案例:新建Project项目,在该项目中创建aa.bb包,然后再引入java.util包中的Date类,并创建ShiJian类,练习包的创建和引用。 课堂练习——相同包之间的访问 案例:在已经建立Project项目中创建mr.bbb包,然后在该包中创建Test和ImpTest两个类,测试同包之间类的访问。 课堂练习——不同包中类之间的访问 案例:在已经建立Project项目中创建mr.aaa包和mr.zzk包,然后分别在包中创建Exam 和ImpExam两个类,测试不同包之间类的访问。 课堂练习——final变量 案例:在已经建立Project项目中创建mingri包,并在该包中创建T1类,在该类中定义一个final变量,然后再主方法中创建T1类的实例,并测试能否改变final变量的值。

课堂练习——final方法 案例:在已创建的项目Project的包mingri中创建T1类的之类ExT1,然后再ExT1类中测试是否能重写父类T1中的final方法。 课堂练习——继承性 案例:在项目的包aaa中创建A和B两个类,使类B是类A的子类,然后在子类B中创建B的实例,并通过该实例分别调用类A和类B的方法,掌握继承的原理。 课堂练习——抽象类 案例:在项目的包aaa中创建抽象类Example及其子类SubExample,在抽象类Example 中分别定义一个成员方法和一个抽象方法,并在子类中进行测试。 课堂练习——权限访问 案例:在项目的包aaa中创建类Exm,在该类中分别定义4种权限修饰符的成员变量并附初值,然后在主方法中创建类的实例,并分别输出这4个成员变量的值,测试上述4种权限修饰符的成员变量在当前类中的可见性。 案例:在项目的包aaa中创建类SameExm,也就是和前一个例子中创建的Exm类都放在同一个包aaa中,然后在SameExm类的主方法中创建类Exm的实例,并分别输出类Exm中4个成员变量的值,测试上述4种权限修饰符的成员变量在相同包的其他类中的可见性。

生成随机的5位登录验证码

生成随机的5位登录验证码 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; static String code=""; publicclass checkService { publicvoid checkCode(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ //绘制画布 BufferedImage bf=new BufferedImage(80,30,BufferedImage.TYPE_INT_BGR); //获得画笔 Graphics g=bf.getGraphics(); //给画笔设置颜色 g.setColor(new Color(255,255,255)); //填充背景色 g.fillRect(0, 0, 80, 30); //随机获得前景色 Random r=new Random(); g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255))); //设置字体 Font f=new Font("",Font.BOLD,22); //获得字体 g.setFont(f); //以当前颜色和字体绘制干扰线 checkService.code=checkService.getstr(); g.drawString(checkService.code,10,25); for(int i=0;i<10;i++){ g.drawLine(r.nextInt(80), r.nextInt(30), r.nextInt(80), r.nextInt(30));

验证码生成器

packagecom.lizhou.tools; importjava.awt.Color; importjava.awt.Font; importjava.awt.Graphics; import java.awt.Graphics2D; importjava.awt.image.BufferedImage; importjava.util.Random; /** * 验证码生成器 * * @author bojiangzhou */ public class VCodeGenerator { /** * 验证码来源 */ final private char[] code = { '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; /** * 字体 */ final private String[] fontNames = new String[]{ "黑体", "宋体", "Courier", "Arial", "Verdana", "Times", "Tahoma", "Georgia"}; /** * 字体样式 */ final private int[] fontStyles = new int[]{ Font.BOLD, Font.ITALIC|Font.BOLD }; /** * 验证码长度 * 默认4个字符 */

图片验证码生成Servlet源代码

图片验证码生成: 摆渡恋人 Web.xml文件配置: This is the description of my J2EE component This is the display name of my J2EE component ImageCheckServlet check.servlet.ImageCheckServlet width 800 height 400 codeCount 4 ImageCheckServlet /servlet/ImageCheckServlet Package check.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.util.Random; import javax.imageio.ImageIO;

使用JAVA生成四位随机验证码图片

使用JAVA生成四位随机验证码图片 效果:是第一位和第三位是随机数字,第二位和第四位是随机字母,图片中还有随机干扰线,这些数字,字母,干扰线的颜色均随机 package cn.itcast.web.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.awt.image.BufferedImageOp; import java.io.IOException; import java.io.PrintWriter; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //生成验证码图片 public class Demo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { int WIDTH = 100; int HIGHT = 30; //在内在中创建一幅图片 BufferedImage image = new BufferedImage(WIDTH,HIGHT,BufferedImage.TYPE_INT_RGB); //取得一个画笔 Graphics g = image.getGraphics(); //设置字符串格式 g.setFont(new Font("黑体",Font.BOLD,24)); //画干扰线 for(int i=0;i<7;i++){ Random r = new Random(); int x1 = r.nextInt(WIDTH); int x2 = r.nextInt(WIDTH); int y1 = r.nextInt(HIGHT); int y2 = r.nextInt(HIGHT); Color color = new Color( (new Double(Math.random() * 128)).intValue() + 128, (new Double(Math.random() * 128)).intValue() + 128, (new Double(Math.random() * 128)).intValue() + 128); g.setColor(color); g.drawLine(x1, y1, x2, y2);

作业1—java基础实验——参考答案

1、从键盘上输入10个整数,并将其放入一个一维数组中,然后将其前5个元素与后5个元素对换,即:第1个元素与第10个元素互换,第2个元素与第9个元素互换…第5个元素与第6个元素互换。分别输出数组原来各元素的值和对换后各元素的值。 参考答案 具体代码实现如下: 1.package programe; 2. 3.import java.io.BufferedReader; 4.import java.io.IOException; 5.import java.io.InputStreamReader; 6. 7.public class HuHuanDemo { 8.public static void main(String args[]) { 9. print(); 10. 11. } 12. 13.public static int[] write() { 14. BufferedReader[] buf = new BufferedReader[10];/* 申请缓冲数组 */ 15.int n;/* 开关量和中间量 */ 16.int array[] = new int[10]; 17.for (int i = 0; i < 10; i++)/* 赋值 */ 18. { 19. buf[i] = new BufferedReader(new InputStreamReader(System.in)); 20./* 给每个缓冲区定义 */ 21.do/* 判断是否是空串,如是则重新输入 */ 22. { 23. n = 1; 24. System.out.print("请输入第" + (i + 1) + "个整 数:"); 25.try/* 建立一个异常捕获 */ 26. { 27. array[i] = Integer.parseInt (buf[i].readLine());/* 执行串变整数 */ 28./* 29. * Integer.parseInt(str) - str 转成 int型 buf[i].readLine() - 30. * 从系统输入缓冲区读入字符流给 buf缓冲区并返回字符串 31. */

实验一 Java编程环境使用(汽院含答案)

实验一Java编程环境使用 实验目的 1.掌握Java运行环境的配置 2.掌握Java程序的编写、编译、运行等过程 3.熟悉Java语言的基本语法和运行原理 4.掌握Java的基本数据类型、表达式和程序控制结构 5.熟悉Eclipse开发环境的基本使用方法 实验导读 1.Java的标准输入和输出流 https://www.360docs.net/doc/aa3045518.html,ng.System类提供了三种有用的标准流:标准输入流(System.in)、标准输出流(System.out)和标准出错流(System.err)。通过他们可以实现数据的输入输出操作。 1)标准输入流(System.in) 通常用于读取用户从键盘输入或用户定义的输入设备的输入。类java.util.Scanner 结合System.in实现对指定数据的输入。 2)标准输出流(System.out) 用于程序的输出,通常用来在屏幕或用户指定的输出设备上显示信息。有两种典型用法:System.out.print(data)实现在当前位置输出数据,System.out.println(data)实现换行输出数据到屏幕或用户定义的输出设备。 3)标准出错流(System.err) 用于显示出错信息,采用System.err.print(data)或System.err.println(data)将指定的data输出到指定的输出设备,默认设备为屏幕。 2.javax.swing.JOptionPane 对话框式的输入和输出,可以提供较好的界面处理。能通过弹出一个标准对话框,来提示用户。可以通过这个性质来实现具有对话框显示效果的数据输入和输出。例如:String str=JOptionPane.showInputDialog("输入您的猜测:"); 3.java.util.Scanner java.util.Scanner类可将文本转换成原语或字符串。Scanner对象通过next()系列方法将文本标识转换成不同类型的值。通常和标准输入流(System.in)结合,允许用户通过标准输入流读入数据。Scanner类提供的方法:nextByte()、nextshort()、nextLong()、nextDouble()、nextFloat()、nextInt()等。例如: Scanner scanner=new Scanner(System.in); int i=https://www.360docs.net/doc/aa3045518.html,Int(); //从键盘输入一个整数 scanner.close(); 4.Java Applet小应用程序 Java Applet必须由浏览器来运行,因此必须编写一个超文本文件(含有applet标记的Web页),通知浏览器来运行这个Java Applet。下面是一个简单的HTML文件,使用记事本编辑如下:

随机生成验证码

package login.validate; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Random; import javax.imageio.ImageIO; import javax.imageio.stream.ImageOutputStream; public class RandomNum { private ByteArrayInputStream image;//图像 private String str;//验证码 /* public static final char[] code = {'a','b','c','d','e','f','g', 'h','i','j','k','l','m','n', 'o','p','q','r','s','t', 'u','v','w','x','y','z', 'A','B','C','D','E','F','G', 'H','I','J','K','L','M','N', 'O','P','Q','R','S','T', 'U','V','W','X','Y','Z', '0','1','2','3','4', '5','6','7','8','9'}; */ private RandomNum(){ init();//初始化属性 } /* * 取得RandomNumUtil实例 */ public static RandomNum Instance(){ return new RandomNum(); } /* * 取得验证码图片 */ public ByteArrayInputStream getImage(){ return this.image; } /* * 取得图片的验证码 */ public String getString(){ return this.str;

Java基础学习知识检验测试实验检查题(内容规范标准答案)

1. 有以下程序片段,下列哪个选项不能插入到行1。( D ) 1. 2.public class Interesting{ 3.//do sth 4. } (只能有一个public修饰的class) A、import java.awt.*; B、package mypackage; C、class OtherClass{ } D、public class MyClass{ } 2. 以下哪项是接口的正确定义?( B D ) A、interface B { void print(){};} (接口里的方法都是抽象的,不能有方法体) B、abstract interface B { void print() ;} C、abstract interface B extends A1,A2 //A1、A2为已定义的接口 { abstract void print(){ };} (同上) D、interface B { void print();}

3. 下面哪个函数是public void aMethod(){...}的重载函数?( D ) A、void aMethod( ){...} B、public int aMethod(){...} C、public void aMethod ( ){...} D、public int aMethod ( int m){...} (重载:定义同名的方法,方法的形式参数个数、类型或顺序各不相同,传回的值也可以不相同) 4. A派生出子类B,B派生出子类C,并且在Java源代码中有如

下声明: 1. A a0=new A(); 2. A a1 =new B(); 3. A a2=new C(); 问以下哪个说法是正确的?( D ) A、只有第1行能通过编译 B、第1、2行能通过编译,但第3行编译出错 C、第1、2、3行能通过编译,但第2、3行运行时出错 D、第1行、第2行和第3行的声明都是正确的 (A是B的父类,也算是C的父类) 5. 假设A类有如下定义,设a是A类的一个实例,下列语句调用哪个是错误的?( C ) A a = new A(); class A { int i; static String s; void method1() { } static void method2() { } } A、System.out.println(a.i); B、a.method1(); C、A.method1(); D、A.method2() ;(A是类名,应该调用对象a) 6. 有如下代码段: 1)

JAVA基础实验编程

Java实验报告 实验日期:2011年10月17日实验机房与机号:___________ 实验班级: ________ 组员姓名学号:指导教师:刘寿强 第三单兀 实验目的:掌握陈述面向对象的思想,通过创建类的实力来体现 实验内容:第三单元; 实验步骤: 3-2 class Dog{ String color; int weight; public Dog(String color,int weight){ this.color=color; this.weight=weight; } public void showd(){ System.out.println(”这是体重为"+weight+"斤,"+"颜色为"+color+"的狗"); } } class Cat{ String color; int weight; public Cat(String color,int weight){ this.color=color; this.weight=weight; } public void showc(){ System.out.println(”这是体重为"+weight+"斤,"+"颜色为"+color+"的猫"); } } public class A{ public static void main(String[] args){ Dog d1= new Dog("黄色",100); Cat c1= new Cat(" 白色",200); d1.showd(); c1.showc(); } } 3-3 class Car{ String ping; double price; String date; public Car(String ping,double price,String date){ this.ping=ping; this.price=price;