JavaEE动态图片验证

Form.jsp

<%@ 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>
    <base href="<%=basePath%>">
    
    <title>My JSP ‘Confirm.jsp‘ starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

<script type="text/javascript">
	function changeImage(img)
	{
		//document.getElementsByName("img");
		//alert("aaaa");
		img.src = img.src + "?"+ new Date().getTime();
	}
</script>
  </head>
  
  <body>
    <form name="form" action="/ConfirmDynamicPictureDemo/servlet/ImageCheckServlet" method="post">
    	验证码: <input type="text" name="info"><image name ="img" src="/ConfirmDynamicPictureDemo/servlet/ImageProduceServlet" alt="图片" onclick="changeImage(this)"/>
    	<br/>
    	<input type="submit" value="提交" >
    </form>
  </body>
</html>

ImageProduceServlet.java

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
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 ImageProduceServlet extends HttpServlet {

	private static final int WIDTH = 120;
	private static final int HIGHT = 35;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException 
	{
		BufferedImage image = new BufferedImage(WIDTH, HIGHT, BufferedImage.TYPE_INT_RGB);

		Graphics g = image.getGraphics();

		//设置背景颜色
		setBackGroud(g);

		//设置边框
		setBorder(g);

		//画干扰线
		drawRandomLine(g);

		//写随机数,并且存入session
		String random = drawRandomNum((Graphics2D)g);
		request.getSession().setAttribute("imageCode", random);

		//图形写给浏览器
		response.setContentType("image/jpeg");
		ImageIO.write(image, "jpg", response.getOutputStream());

	}

	private void setBackGroud(Graphics g) 
	{
		g.setColor(Color.GRAY);
		g.fillRect(0, 0, WIDTH, HIGHT);
	}

	private void setBorder(Graphics g) 
	{
		g.setColor(Color.BLUE);
		g.drawRect(1,1,WIDTH-2,HIGHT-2);
	}

	private void drawRandomLine(Graphics g) 
	{
		g.setColor(Color.GREEN);

		for(int i=0;i<5;i++)
		{
			int x1 = new Random().nextInt(WIDTH);
			int y1 = new Random().nextInt(HIGHT);

			int x2 = new Random().nextInt(WIDTH);
			int y2 = new Random().nextInt(HIGHT);

			g.drawLine(x1,y1,x2,y2);
		}

	}

	private String drawRandomNum(Graphics2D g) 
	{
		g.setColor(Color.RED);
		g.setFont(new Font("宋体",Font.BOLD,20));

		String base = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
		StringBuffer sb = new StringBuffer();
		int x =5;
		for(int i=0; i<4;i++)
		{
			int degree = new Random().nextInt()%30;  //-30度~30度之间

			String ch = base.charAt(new Random().nextInt(base.length()))+"";
			sb.append(ch);
			g.rotate(degree*Math.PI/180,x,20);
			g.drawString(ch, x, 20);
			g.rotate(-degree*Math.PI/180,x,20); //保证旋转不是累加的

			x+=30;
		}
		return sb.toString();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

ImageCheckServlet.java

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ImageCheckServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
            doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=UTF-8");
		response.setCharacterEncoding("UTF-8");
		request.setCharacterEncoding("UTF-8");
		//校验认证码是否有效
		String client_code = request.getParameter("info");
		String server_code = (String) request.getSession().getAttribute("imageCode");

		//没有忽略大小写
		if(client_code==null || server_code==null || !server_code.equals(client_code))
		{
			System.out.println("验证码不正确...");
			return;
		}
		System.out.println("处理客户机请求...");

	}

}

JavaEE动态图片验证

时间: 2024-10-29 19:09:40

JavaEE动态图片验证的相关文章

用struts做一个带有随机数字的图片验证登录模块

在我们平常的工作中,登录模块有一个小的功能,就是图片验证模块,今天我就把步骤一步一步写出来. 1.新建一个web service,然后再WebRoot写,一个contentType="image/jpeg"格式的image.jsp页面,最后一句代码是将页面以图片输出. 1 <%@ page language="java" pageEncoding="UTF-8"%> 2 <%@ page contentType="im

PHP生成GIF动态图片验证码

<?php /** * 调用示例 * */ session_start(); $randCode = ''; //验证码随机 $str="abcdefghjkmnpqrstuvwsyzABCDEFGHJKMNPQRSTUVWSYZ23456789"; for($i=0;$i<4;$i++){ $safe.=substr($str,rand(0,strlen($str)),1); } $_SESSION["imgcode"]=$safe; ImageCod

动态图片 gif

简介 android不推荐使用gif图片,一般都是png的,对于gif的图片解析比较消耗资源,但是对于一些动态gif图片的播放,如果比较小的话还是可以的,要是大的话,建议还是把gif图片转换成一帧一帧的png图片,然后通过animation播放. 对于小的gif动态图片,可以通过Movie来播放. 注意,不能再布局中以自定义view的形式使用. Activity public class MainActivity extends Activity {     LinearLayout root;

atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js

atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js 1. 图片按钮的效果总结 1 1.1. 按钮图片自动缩放的. 1 1.2. 不要边框,如果用自定义图片做按钮背景可以设为 false. 2 1.3. 异形按钮 2 1.4. 不绘制焦点 2 1.5. 鼠标经过时的图标 2 1.6. 选中时的图标 2 1.7. 禁用时显示的图标 2 1.8. 可能需要按钮半透明效果 2 2. 图片按钮的实现 2 2.1. 优先模式:button控

如何在html5的canvas画布中绘制gif动态图片

我们都知道如何在html5的canvas画布上绘制静态图片(jpeg, png等),直接用canvas中的drawImage方法即可,那么如何绘制动态图片(gif)? 相信大家都知道动态图片之所以动态,是因为它是由很多图片按一定的帧数顺序播放而成的,因此我们是否也可以模拟这样的帧数,每隔一定的时间重新 绘制图片,就能画出动态图片呢?答案当然是YES.下面就是我自己测试的一个例子,代码如下: 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 &l

微信分享文本、图片(本地、二进制、网络图片)、音频、视频、Gif动态图片、网页信息--大汇总

首先是申请微信开放平台https://open.weixin.qq.com/ 根据提示在管理中心创建一个移动应用,最好是自己的公司的上线APP,这样审批容易通过, 审批通过后,会为创建的移动应用下发APP_ID.AppSecret 另外在网站上下载android版本的jar包即可libammsdk.jar 即可进行操作了 ~~~~~~~~~~~~~~~~开始吧,用的测试机,没有sd卡,另外我的台式机没有wifi,所以代码没测试,我后期会补上的~~~~~~~~~~~~~~~~~ activity_

展示动态图片(播放一组图片)

//展示动态图片(播放一组图片)    //创建做动画的图片,存储到数组中    NSMutableArray * animationImages = [NSMutableArray array];    for (int i = 0 ; i < 7 ; i ++) {        UIImage * image1 = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString string

Android之动态图片

在Android中,比起静态图片来动态图片会更加生动更加酷炫,因为这种视觉效果,你应该会发现我们手机中大多数应用软件的导航页面也都是采用动态图片来展示.动态图片的格式有gif.png格式等等. 我们就来看看动态图片,我们可以先自定义SurfaceView视图,然后在MainActivity中添加显示方法就行了. MainActivity: package com.cdp.dongtaitupian;; import android.app.Activity; import android.os.

【Mac】使用PicGIF制作gif动态图片

动态图片是我们常常需要的,mac系统下制作gif图片,可以使用PicGIF,AppStore中有一个简单版本免费的 环境与工具 1.mac系统 2.PicGIF Lite(可以在AppStore下载) 使用方法 1.下载并装好PicGIF Lite后,打开软件 2.选择添加图片(也可以添加视频),并添加图片 3.设置gif图片的属性,以及特效 4.设置完成,点击播放,预览效果 5.生成gif图片,并保存 作品