`
Luob.
  • 浏览: 1576892 次
  • 来自: 上海
社区版块
存档分类
最新评论

Servlet3.0 验证码

    博客分类:
  • JSP
阅读更多
package com.lee;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

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 javax.servlet.http.HttpSession;

//Servlet 3.0的 Annoation

/*			@WebServlet 支持的常用属性
asyncSupported    否               指定该 Servlet 是否支持异步操作模式 .
displayname       否		  指定 该servlet 的显示名称
initparams		      否              为该servlet 配置参数
loadOnStartup	     否		 将该serlvet 配置成 load-on-startup类型的servlet
name              否	 	指定 该servlet的名称
urlPatterns/ value 否           这两个属性 的作用完全相同,都指定该Servlet 的 处理 URL

如果使用 Annotation 
   1:不需要在 web.xml 根元素 <web-app>中加入  metadata-complete="true".
   2:不要在web.xml中配置该serlvet 
   
Servlet 中的 不写 doGet 或者 doPost  可以统一交给 serlvet中  service方法处理.
*/
@WebServlet(name="ImageServlet",urlPatterns={"/ImageServlet"})
public class ImageServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		int width=80;
		int height=30;
		
		BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
		Graphics2D g=image.createGraphics();
	
		//画背景  选取颜色,然后画大小
		g.setColor(getRandColor(240,255));  //偏淡色
		g.fillRect(0, 0, width, height);
		
		//画边框
		g.setColor(getRandColor(200,255));  
		g.fillRect(0, 0, width-1, height-1);
		
		//画 干扰线 8条
		g.setColor(getRandColor(100,255));  
		Random random=new Random();
		
		for(int i=0;i<8;i++){  //两点确定一条直线,
			int x1=random.nextInt(width);
			int y1=random.nextInt(height);
			
			int x2=random.nextInt(width);
			int y2=random.nextInt(height);
			
			g.drawLine(x1, y1, x2, y2);
		}
		
		//画 干扰 点
		for(int i = 0;i<50;i++) 
		{ 
			int x = random.nextInt(width); 
			int y = random.nextInt(height); 
			g.setColor(new Color(x+100,y+100,100)); 
			g.drawOval(x, y, 1, 0); 
		} 
		Font font=new Font("Times New Roman",Font.ITALIC,24);
		g.setFont(font);
		
		int length=4;
		int x = width / length;  //字体间隔宽度
		int codeY = height-font.getSize();  // 字体 高度
	
		String s="qwertyuiopl0123456987kjhgfdsazxcvbnm0123456987QWERTYUIOPLKJH0123456987GFDSAZXCVBNM";
		String code="";
		for(int i=0;i<length;i++){
			g.setColor(new Color(85+random.nextInt(110),85+random.nextInt(110),85+random.nextInt(110)));
			String ch=String.valueOf(s.charAt(random.nextInt(s.length())));
			code+=ch;
			g.drawString(ch, i*x+5, font.getSize()+random.nextInt(codeY));
		}
		System.out.println(code);
		//存储字符串到 session中
		HttpSession session =req.getSession();
		session.setAttribute("checkcode", code);
		g.dispose();
		
		resp.setHeader("Pragma", "No-cache");
		resp.setHeader("Cache-Control", "No-cache");
		resp.setDateHeader("Expires", 0);
		resp.setContentType("image/jpeg");
		
		//输出到流中
		ServletOutputStream out=resp.getOutputStream();
		ImageIO.write(image, "jpeg",out);
		out.flush();
		out.close();
		
	}
	

	public Color getRandColor(int lower,int upper){ 
	  Random random = new Random(); 
	  if(upper>255) 
	   upper=255; 
	  if(upper<1) 
	   upper=1; 
	  if(lower<1) 
	   lower=1; 
	  if(lower>255) 
	   lower=255; 
	  int r=lower+random.nextInt(upper-lower); 
	  int g=lower+random.nextInt(upper-lower); 
	  int b=lower+random.nextInt(upper-lower); 
	  return new Color(r,g,b); 
	} 
	
}



<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="system/error.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<%!
public int mcount;

%>

<script type="text/javascript" language="javascript"> 
  function changeImg(){ 
  	 var a=document.getElementById("mySpan"); 
  	  a.innerHTML='<img align="middle" src="ImageServlet"/>  <a href="#" onclick="changeImg();">看不清</a>'; 
  } 
</script> 
<body>
<%-- <%@ include file="system/include.jsp"%> --%>
<jsp:include page="system/include.jsp"/>
使用 子页面中变量<br/>
<%
response.sendRedirect("anyScope.jsp");
%>
<span id="mySpan"><img align="middle" src="ImageServlet" />
<a href="#" onclick="changeImg();">看不清</a></span> 
</body>
</html>
分享到:
评论

相关推荐

    免费开源!!java项目实战练习

    Java项目 swagger2-启动-启动器 SpringBoot-Shiro ...tomcatServlet3.0 Web服务器 ServletAjax JspChat jsp 聊天室 eStore图书馆系统 checkcode Java 验证码生成器 IMOOCSpider 简单的互联网蜘蛛

    10个非常实用的Java项目实战练习源码

    Java项目 swagger2-启动-启动器 SpringBoot-Shiro ...tomcatServlet3.0 Web服务器 ServletAjax JspChat jsp 聊天室 eStore图书馆系统 checkcode Java 验证码生成器 IMOOCSpider 简单的互联网蜘蛛

    优质Java项目实战练习

    Java项目 swagger2-启动-启动器 SpringBoot-Shiro ...tomcatServlet3.0 Web服务器 ServletAjax JspChat jsp 聊天室 eStore图书馆系统 checkcode Java 验证码生成器 IMOOCSpider 简单的互联网蜘蛛

    北大青鸟易买网

    北大青鸟易买网实战项目,完成度百分之95以上,MVC三层架构、Ajax无刷新、canvas生成验证码、Servlet3.0,内含数据库文件,开发环境为myeclipse10 mysql5.7 tomcat7.0x,欢迎下载学习。

    项目介绍 本项目是个人的一些java项目练习源码,分享给大家,希望可以和大家一起进步!

    项目介绍 本项目是个人的一些java项目练习...tomcatServlet3.0 Web 服务器 ServletAjax 原生 js 实现搜索框智能提示 JspChat jsp 聊天室 eStore 图书管理系统 checkcode Java 制作验证码 IMOOCSpider 简易网络爬虫

    Java的项目实例学习

    Java的项目实例学习 ...tomcatServlet3.0 Web 服务器 ServletAjax 原生 js 实现搜索框智能提示 JspChat jsp 聊天室 eStore 图书管理系统 checkcode Java 制作验证码 IMOOCSpider 简易网络爬虫

    java经典项目实战练习

    tomcatServlet3.0 Web服务器 ServletAjax JspChat jsp 聊天室 eStore图书馆系统 checkcode Java 验证码生成器 IMOOCSpider 简单的互联网蜘蛛 最后的 如果上述任何项目能够帮助您,请点击右上角网站的“关注”...

    init-spring:旧项目

    技术选择说明:管理 maven依赖和项目管理 git/svn 版本控制后端 Spring SpringMVC Spring data jpa(hibernate实现) Shiro 验证框架 hibernate validator 缓存 ehcache 数据源 druid servlet 3.0+前端 jsp 验证码 ...

    图书项目3.0:Mybatis + vue + axios + js + mysql + log4j 技术栈实现

    本项目是一个简单的图书管理系统,本博客在tomcat中采用servlet 和vue和mybatis技术实现如下功能: * 用户登陆,输入用户名,密码,登陆成功后保存到session中,跳转到首页; * 用户注册,输入相关信息,以及验证码...

    JAVA WEB典型模块与项目实战大全

    第18章 hibernate分页系统(hibernate 3.0)  18.1 hibernate分页系统原理  18.2 封装javabean的commons-beanutils组件  18.3 关于hibernate框架中一些通用类  18.4 实现hibernate分页系统前期准备  18.5 ...

Global site tag (gtag.js) - Google Analytics