javaWeb验证码技术
2016-07-16 12:03
465 查看
前言:java验证码技术主要依赖于图片,下面就把随机生成的验证码嵌入到图片中,添加删除线和旋转缩放功能
用到的类:
下面在web下实现验证码技术
如图:
功能点击看不清即可进行切换
1.建立一个servlet在post方法中写入如下代码
2.在index.jsp下页面下的代码如下
用到的类:
java.awt.Graphics; java.awt.Graphics2D; java.awt.geom.AffineTransform; java.awt.image.BufferedImage;
@Test//可以旋转和放缩的验证码 public void imgDemo3() throws IOException{ int width = 60; int height = 40; BufferedImage img=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g2d=(Graphics2D) img.getGraphics(); g2d.setColor(Color.white); g2d.fillRect(0, 0, width, height);//画背景 Random r=new Random(); g2d.setFont( new Font("黑体",Font.BOLD,20) ); for(int i=0;i<4;i++){ Color c=new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)); g2d.setColor(c); String str=""+r.nextInt(10); AffineTransform aff=new AffineTransform(); aff.rotate(Math.random(),i*15,20);//连接此变换与绕锚点旋转坐标的变换。旋转 // aff.scale(0.6+Math.random(), 0.6+Math.random());//缩放 g2d.setTransform(aff); g2d.drawString(str, i*width/4, 20); } for(int i=0;i<4;i++){//加干扰线 Color c=new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)); g2d.setColor(c); g2d.drawLine(0, r.nextInt(height), width, r.nextInt(height)); } g2d.dispose();//释放此图形的上下文以及它使用的所有系统资源。调用 dispose 之后,就不能再使用 Graphics 对象。 ImageIO.write(img, "jpeg",new FileOutputStream("e:/a/a.jpg")); }
下面在web下实现验证码技术
如图:
功能点击看不清即可进行切换
1.建立一个servlet在post方法中写入如下代码
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //告诉客户端,输出格式 response.setContentType("image/jpeg"); int width=60,height=40; BufferedImage img=new BufferedImage(60, 40, BufferedImage.TYPE_INT_RGB); Graphics g=img.getGraphics(); g.setColor(Color.white); g.fillRect(0, 0, width, height);//画背景 g.setFont(new Font("宋体", Font.ITALIC, 20)); Random r=new Random(); for(int i=0;i<4;i++){ int a=r.nextInt(10); int y=20+r.nextInt(20); Color c=new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)); g.setColor(c); g.drawString(""+a, 5+i*width/4, y); } for(int i=0;i<4;i++){ Color c=new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)); g.setColor(c); g.drawLine(0, r.nextInt(height), width, r.nextInt(height)); } g.dispose();//释放此图形的上下文以及它使用的所有系统资源。调用 dispose 之后,就不能再使用 Graphics 对象。 ImageIO.write(img, "jpeg",response.getOutputStream()); }
2.在index.jsp下页面下的代码如下
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html> <head> <script type="text/javascript"> function changeImg(){ var img=document.getElementById("img"); var date=new Date() var t=date.getTime(); img.src="/helloWeb/servlet/ImageSevrlet?"+t;//小技巧?+t是传参 }; </script> </head> <body> <a href="a/a.jsp">导向a.jsp页面</a><br/> <a href="b/b.jsp">导向b.jsp页面</a><br/> <a href="/helloWeb/cc">导向c.jsp页面</a><br/> <img id="img" src="/helloWeb/servlet/ImageSevrlet"><a href="javascript:changeImg();">看不清</a> </body> </html>
相关文章推荐
- dubbo服务调用产生AbstractMethodError与解决方法
- Java之用继承进行设计详解(附源码)
- Java并发编程——Executor接口及线程池的使用
- eclipse 如何引入本地dtd
- Spring杂记之--Spring配置文件
- Java EJB JBoss
- 集合(Collections)
- eclipse安装完PyDev后不显示
- eclipse如何新建一个maven项目
- [JavaWeb]JavaSocket获取网页源代码遇见的问题
- [JavaWeb]JavaSocket获取网页源代码遇见的问题
- 泛型(一)之定义说明
- Java-IO之DigestInputStream
- java容器基本概念
- Java之协变返回类型详解(附源码)
- springVS javaee
- 以SpringMVC框架为中心疯狂扩展-06、MessageListener实时监听ActiveMQ中的消息
- eclipse常用设置
- java web开发中遇到的问题小记
- 实例解析如何正确使用Java数组