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项目 swagger2-启动-启动器 SpringBoot-Shiro ...tomcatServlet3.0 Web服务器 ServletAjax JspChat jsp 聊天室 eStore图书馆系统 checkcode Java 验证码生成器 IMOOCSpider 简单的互联网蜘蛛
Java项目 swagger2-启动-启动器 SpringBoot-Shiro ...tomcatServlet3.0 Web服务器 ServletAjax JspChat jsp 聊天室 eStore图书馆系统 checkcode Java 验证码生成器 IMOOCSpider 简单的互联网蜘蛛
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项目练习...tomcatServlet3.0 Web 服务器 ServletAjax 原生 js 实现搜索框智能提示 JspChat jsp 聊天室 eStore 图书管理系统 checkcode Java 制作验证码 IMOOCSpider 简易网络爬虫
Java的项目实例学习 ...tomcatServlet3.0 Web 服务器 ServletAjax 原生 js 实现搜索框智能提示 JspChat jsp 聊天室 eStore 图书管理系统 checkcode Java 制作验证码 IMOOCSpider 简易网络爬虫
tomcatServlet3.0 Web服务器 ServletAjax JspChat jsp 聊天室 eStore图书馆系统 checkcode Java 验证码生成器 IMOOCSpider 简单的互联网蜘蛛 最后的 如果上述任何项目能够帮助您,请点击右上角网站的“关注”...
技术选择说明:管理 maven依赖和项目管理 git/svn 版本控制后端 Spring SpringMVC Spring data jpa(hibernate实现) Shiro 验证框架 hibernate validator 缓存 ehcache 数据源 druid servlet 3.0+前端 jsp 验证码 ...
本项目是一个简单的图书管理系统,本博客在tomcat中采用servlet 和vue和mybatis技术实现如下功能: * 用户登陆,输入用户名,密码,登陆成功后保存到session中,跳转到首页; * 用户注册,输入相关信息,以及验证码...
第18章 hibernate分页系统(hibernate 3.0) 18.1 hibernate分页系统原理 18.2 封装javabean的commons-beanutils组件 18.3 关于hibernate框架中一些通用类 18.4 实现hibernate分页系统前期准备 18.5 ...