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

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>
分享到:
评论

相关推荐

    Ext3.0 实现验证码

    服务器端,这里使用的是Apache Tomcat,这是一个流行的Java Servlet容器,可以处理HTTP请求并生成验证码图片。验证码的生成可以通过Java的图像处理库来完成,例如Java 2D API。生成的验证码字符串应该存储在一个临时...

    BookStore.zip

    《基于原生Servlet3.0的书店系统详解》 在当今互联网时代,Web应用程序的开发技术日新月异,而Java Servlet技术作为其中的核心部分,始终保持着强大的生命力。本项目"BookStore.zip"是一个利用原生Servlet3.0实现的...

    jsp 上传 下载 验证码

    - **Servlet API**: 在JSP中,文件上传通常借助于Servlet API,特别是`java.servlet.http.Part`接口,它是Servlet 3.0引入的,用于处理表单中的文件字段。 - **MultiPartRequest**: 对于更方便的处理,可以使用第...

    免费开源!!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的项目实例学习

    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 验证码 ...

    基于jsp+servlet实现的图书管理系统(源码+数据库 )

    servlet My SQL 5.7 JUnit4 Spring-test 等,详情见Maven的配置文件 运行环境 本系统在如下环境下开发调试并运行成功 操作系统: Windows 7 JDK 1.8 Maven 3.0 Tomcat 8.0 My SQL 5.7 主要功能 用户登录 用户输入账户...

    java文件上传组件包

    Java的Servlet 3.0及以上版本支持直接解析这种格式的数据。如果使用的是旧版本Servlet,或者需要更高级的控制,可以引入第三方库,如Apache Commons FileUpload,它提供了一个强大的Multipart解析器。 3. **Apache ...

    Java大文件上传(1GB,图片,视频,Flash文件,音频文件)

    Java的Servlet 3.0及以上版本引入了AsyncContext,可以异步处理请求,使得大文件上传更高效。通过设置合适的缓冲区大小,可以控制每次读取和写入的数据量,减少内存压力。 在处理大文件上传时,还需要关注以下关键...

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

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

    myeclipse实现用户登录的详细教程

    右键点击项目“sample”,选择“myeclipse”-&gt;“添加SpringCapabilities”,并选择“Spring 3.0 core Libraries”、“Spring 3.0 AOP Libraries”和“Spring 3.0 Persistence Core Libraries”。 五、配置web.xml ...

    java web网站常用抓取其他网站内容

    Java Web应用可以通过实现异步处理,如使用Servlet 3.0的Asynchronous Processing特性,或者使用Reactor、Akka等反应式编程库,提高抓取效率。 4. **处理JavaScript**:很多现代网站使用JavaScript动态加载内容,...

    jcaptcha 验证完整jar包

    5. **jcaptcha-integration-simple-servlet-2.0-alpha-1-SNAPSHOT.jar**:这是一个简化版的Servlet集成包,方便在Servlet容器中部署和使用jCaptcha。 6. **jcaptcha-api-1.0.jar**:jCaptcha的API接口定义,提供给...

Global site tag (gtag.js) - Google Analytics