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>
分享到:
相关推荐
服务器端,这里使用的是Apache Tomcat,这是一个流行的Java Servlet容器,可以处理HTTP请求并生成验证码图片。验证码的生成可以通过Java的图像处理库来完成,例如Java 2D API。生成的验证码字符串应该存储在一个临时...
《基于原生Servlet3.0的书店系统详解》 在当今互联网时代,Web应用程序的开发技术日新月异,而Java Servlet技术作为其中的核心部分,始终保持着强大的生命力。本项目"BookStore.zip"是一个利用原生Servlet3.0实现的...
- **Servlet API**: 在JSP中,文件上传通常借助于Servlet API,特别是`java.servlet.http.Part`接口,它是Servlet 3.0引入的,用于处理表单中的文件字段。 - **MultiPartRequest**: 对于更方便的处理,可以使用第...
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 简易网络爬虫
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 验证码 ...
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的Servlet 3.0及以上版本支持直接解析这种格式的数据。如果使用的是旧版本Servlet,或者需要更高级的控制,可以引入第三方库,如Apache Commons FileUpload,它提供了一个强大的Multipart解析器。 3. **Apache ...
Java的Servlet 3.0及以上版本引入了AsyncContext,可以异步处理请求,使得大文件上传更高效。通过设置合适的缓冲区大小,可以控制每次读取和写入的数据量,减少内存压力。 在处理大文件上传时,还需要关注以下关键...
本项目是一个简单的图书管理系统,本博客在tomcat中采用servlet 和vue和mybatis技术实现如下功能: * 用户登陆,输入用户名,密码,登陆成功后保存到session中,跳转到首页; * 用户注册,输入相关信息,以及验证码...
右键点击项目“sample”,选择“myeclipse”->“添加SpringCapabilities”,并选择“Spring 3.0 core Libraries”、“Spring 3.0 AOP Libraries”和“Spring 3.0 Persistence Core Libraries”。 五、配置web.xml ...
Java Web应用可以通过实现异步处理,如使用Servlet 3.0的Asynchronous Processing特性,或者使用Reactor、Akka等反应式编程库,提高抓取效率。 4. **处理JavaScript**:很多现代网站使用JavaScript动态加载内容,...
5. **jcaptcha-integration-simple-servlet-2.0-alpha-1-SNAPSHOT.jar**:这是一个简化版的Servlet集成包,方便在Servlet容器中部署和使用jCaptcha。 6. **jcaptcha-api-1.0.jar**:jCaptcha的API接口定义,提供给...
不同服务商的协议可能有所不同,如中国移动的CMPP2.0、CMPP3.0等。 2. **通过硬件设备发送**:这种方法需要特定的硬件支持,例如使用手机模块或上网卡等设备,并通过调用COM接口发送短信。此外,还可以购买短信猫等...