通过Servlet的response绘制页面验证码

java部分

package com.servlet;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;public class IdentityServlet extends HttpServlet {//不包括0,O,1,I等难以辨认的字符public static final char[] CHARS={'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','U','V','W','X','Y','Z'};public static Random random=new Random();//获取随机码public static String getRandomString(){StringBuffer buffer=new StringBuffer();for(int i=0;i<6;i++){buffer.append(CHARS[random.nextInt(CHARS.length)]);}return buffer.toString();}//获取随机颜色public static Color getRandomColor(){return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));}//获取所给颜色的相反值public static Color getReverseColor(Color c){return new Color(255-c.getRed(),255-c.getGreen(),255-c.getBlue());}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("image/jpeg");//设置输出类型String randomString=getRandomString();//获取随机数request.getSession(true).setAttribute("randomString", randomString);//将随机数放入session中int width=100;//图片宽度int height=30;//图片高度
        Color color=getRandomColor();//获取颜色,用于背景色Color reverse=getReverseColor(color);//发色,用于前背景
        BufferedImage bi=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//创建一个彩色图片
        Graphics2D g=bi.createGraphics();//获取绘图对象g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,16));//设置字体g.setColor(color);//设置颜色g.fillRect(0, 0, width, height);//绘制背景
        g.setColor(reverse);g.drawString(randomString, 18, 20);//设置颜色//绘制遭点for(int i=0, n=random.nextInt(50);i<n;i++){g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);}ServletOutputStream out=response.getOutputStream();JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);encoder.encode(bi);out.flush();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {}}

web.xml部分

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><display-name></display-name><servlet><servlet-name>IdentityServlet</servlet-name><servlet-class>com.servlet.IdentityServlet</servlet-class></servlet><servlet-name>IdentityServlet</servlet-name><url-pattern>/servlet/IdentityServlet</url-pattern></servlet-mapping>    <welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

html部分

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><script type="text/javascript">function reloadImage(){document.getElementById('btn').disabled=true;document.getElementById('identity').src='servlet/IdentityServlet?ts='+new Date().getTime();}</script></head><body><img src="servlet/IdentityServlet" id='identity' οnclick="btn.disabled=false;"/><input type="button" value="换一个" οnclick="reloadImage()" id='btn'></body>
</html>

运行结果:

转载于:https://www.cnblogs.com/DeepBlues/p/3472311.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Datebase

1.datebase是数据库的意思.数据库是用来储存数据的,所有程序都依赖于Datebase进行储存.它是一个软件,有多种品牌. 2.品牌:微软的MS sqlserver ,Oracle(性能最好),Mysql(开源)包括阿里在使用,DB2(濒临pass) 3.数据库的扮演角色:无论哪个一个程序都是由UI程序逻辑Datebase组成,而…

写未来的电子计算机的畅想两百字,未来科技作文200字

相信大家都好奇&#xff0c;我们未来的科技会是怎么样的&#xff1f;现在就让我们一起来畅想未来。下面是由出国留学网小编为大家整理的“未来科技作文600字”&#xff0c;仅供参考&#xff0c;欢迎大家阅读。未来科技作文600字【一】随着人们生活水平的提高&#xff0c;汽车&a…

Ms sqlserver闪退----“转载的知识”

找到MSSMS安装位置&#xff0c;例如我是安装到了D:\Program Files (x86)\Microsoft SQL Server Management Studio 18 将D:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\PrivateAssemblies\Interop文件夹下的Microsoft.VisualStudio.Shell.In…

MVC + LigerUI 做后台管理还真是清爽

LigerUI是基于Jquery&#xff0c;轻量级UI框架。具体可以看官方演示 http://www.ligerui.com/ 我的简单后台 模拟Winodw桌面效果&#xff0c;挺不错呢。最喜欢的还是他的&#xff0c;下拉列表绑定Grid&#xff0c;主从表字段关联选择方便。 当然他也不是很好&#xff0c;也不少…

继续教育统考计算机和英语难度怎么样,网络教育英语统考90分的难度怎么样

网络教育本科生统考考90分是比较高的分值&#xff0c;考生报考网络教育难度并不是很大&#xff0c;考试科目分别是大学英语和计算机应用基础两门。网络教育统考考90分难不难网教统考英语考90分是比较有难度的&#xff0c;英语一总分100分&#xff0c;想考90很难很难&#xff0c…

sqlserver note

1.规范,写的代码标准 2.面向对象的思想 3.数据的完整性 4.不能非法牟利 关于数据的完整性,包括: a.域完整性:组成实体的各个部分都不缺失 b.实体完整性:各个个体都不同,唯一 c.引用完整性:数据之间借调时真实存在,有效 d.自定义完整性. 5.excel不能完全保证数据的完整性,但通过…

XAML 概述四

这一节我们来简单介绍一下XAML的加载和编译&#xff0c;它包括如下三种方式&#xff1a; 只使用代码 使用代码和未编译的XAML 使用代码和编译过的BAML 一. 只使用代码 我们首先创建一个简单的控制台应用程序。然后我们添加PresentationFramework.dll、PresentationCore.dll、…

怎样用计算机制作思维导图,如何使用电脑制作成思维导图,这个方法简单又实在...

原标题&#xff1a;如何使用电脑制作成思维导图&#xff0c;这个方法简单又实在我上周发现&#xff0c;其实我们办公室里面很多同事都不知道怎么制作思维导图的。起因是我们老板在烦恼一个项目&#xff0c;而这个项目的对接人就需要我们做一份思维导图给他的&#xff0c;说要让…

增删改

四句死代码 1.查询数据 select * from 表名 2.插入数据 insert into 表名 values (‘值1’,‘值2’) 3.删除数据 delete from 表名 where 条件 4.update 表名 set 列值 where 条件 5.重置,一般不要使用,数据难以恢复 truncate table 表名

【PHP入门到精通】:Ch05:字符串处理

Ch05: 字符串简介 5.1 字串说明 字符串是指由>0个字符构成的一串字符&#xff0c;所以叫字符串。这里所说的字符主要包括以下几种类型&#xff1a;数字类型&#xff1a;如1, 2, 3, 4等。字母类型&#xff1a;如果a, b, c, d等。特殊字符&#xff1a;如#, $, %, ^, &等。…

计算机桌面锁屏设置,怎么设置电脑锁屏

怎么设置电脑锁屏当在使用电脑的时候难免会遇到中途离开的情况&#xff0c;可能就是一小会&#xff0c;此时不想关机&#xff0c;也不想让别人在此期间操作电脑&#xff0c;因此就需要为电脑添加一个密码使它处于锁屏状态&#xff0c;那么具体怎样设置才能让电脑锁屏呢?第一步…

基本查询

--选择查询 select 列名,列名 from 表名select athlete from king --精确匹配 select * from 表名 where 条件select * from king where country 中国--多条件 select * from 表名 where 条件 连接符(or and) 条件 --!!!列名不同 考虑and连接 列名相同 考虑or 连接select * fr…

理解 JavaScript 作用域和作用域链

JavaScript作用域 任何程序设计语言都有作用域的概念&#xff0c;简单的说&#xff0c;作用域就是变量与函数的可访问范围&#xff0c;即作用域控制着变量与函数的可见性和生命周期。在JavaScript中&#xff0c;变量的作用域有全局作用域和局部作用域两种。 1. 全局作用域&…

关于计算机网络的英语演讲稿,幽默英语演讲稿

幽默英语演讲稿love your mother爱你的母亲why are you crying, a young boy asked his mom?你为什么哭?一个小男孩问他的妈妈."because im a woman," she told him.因为我是女人,她告诉他."i dont understand," he said.我不明白.他回答his mom just hu…

模糊查询与字符串的操作

select CAST (333 as varchar(20) )--函数转换--模糊查询:无法精确表达的部分,可以精确表达的部分 - 列名 like --无法精确表达的部分,用到通配符 -- % : 任意长度的字符串 -- select * from 表名 where 列名 like 李% --所有李开头的人的信息-- - : 长度单位为1的字符串 -- …

预科教育计算机基础知识重点归纳,民族预科班计算机教育论文

1少数民族预科教育中计算机课程与教学的特点分析1.1民族预科教育中计算机教学课程设置特点在民族预科教育中&#xff0c;计算机专业教学课程的设置主要以学生计算机应用能力培养为主&#xff0c;通常情况下&#xff0c;其开设课程主要包括计算机基础知识以及计算机网络基础知识…

聚合函数与分组查询

聚合函数 1,select count()-数量vt a. count(列名)里面有null&#xff0c;则不会计数 b. count(表名)里面有null&#xff0c;会计数&#xff0c;每行 2,sum(列名)求和 avg(列名)求平均值 数学列 3,max(列名)最大值 min(列名)最小值 排序算法 4,len(列)每行的字符长度 5,distinc…

Ubuntu查看磁盘空间命令(转载)

linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间&#xff0c;目前还剩下多少空间等信息。 1&#xff0e;命令格式&#xff1a; df [选项] [文件] 2&#xff0e;命令功能&#xff1a; 显示指定磁盘文件的可用…

台式计算机进入安全模式蓝屏,windows进入系统安全模式时蓝屏怎么办?

不管是普通进入系统还是进入系统安全模式都蓝屏。有时用着电脑正用着忽然蓝屏。内存原因引起的蓝屏&#xff0c;实在太多了&#xff0c;就一细说啥原因了&#xff0c;如果是台式电脑就直接拆开机箱&#xff0c;把内存拔掉&#xff0c;把内存金手指部分擦擦再重新插回去&#xf…

表连接查询

1.连接查询与引用关系有关 a.什么是引用关系? 一个表 引用了 另外一个表的数据,这就是引用关系 b.上述文字中出现了两个[表] 第一个表:外键表 第二个表:主键表 外键表引用主键表的数据 c.为什么要设计引用关系的表结构 减少数据冗余 d.主外键约束是一定要的嘛? 是一定要的,但…