-
jsp页面如何制作验证码
- 时间:2024-11-23 07:53:50
大家好,今天Win10系统之家小编给大家分享「jsp页面如何制作验证码」的知识,如果能碰巧解决你现在面临的问题,记得收藏本站或分享给你的好友们哟~,现在开始吧!
1.jsp如何设置验证码,我需要完成详细的代码和过程
A 生成验证码的java文件
package cn.com.data100.web.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
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;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Title: 生成验证码
* Description: data100 website
* Copyright: Copyright (c) 2011
* Company: km100
* @author anshufa
* @version 1.0
*/
public class RandomCodeServlet extends HttpServlet {
private static final Log log = LogFactory.getLog(RandomCodeServlet.class);
private Color getRandColor(int fc, int bc) {
Random random = new Random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
Random random = new Random();
// 定义数组存放加减乘除四个运算符
// char[] arr = { +, -,*, / };
char[] arr = { +, -,*};
// 生成10以内的随机整数num1
int num1 = random.nextInt(10);
// 生成一个0-4之间的随机整数operate
int operate = random.nextInt(3);
// 生成10以内的随机整数num1
int num2 = random.nextInt(10);
//避免出现负数情况
if(operate == 1){//减法运算
//如果减数小于被减数 再次生成num1
while(num1<num2){
num1 = random.nextInt(10);
}
}
// // 避免出现除数为0的情况
// if (operate == 3) {
// // 如果是除法,那除数必须不能为0,如果为0,再次生成num2
// while (num2 == 0) {
// num2 = random.nextInt(10);
// }
// }
// 运算结果
int result = 0;
// 假定position值0/1/2/3分别代表"+","-","*","/",计算前面操作数的运算结果
switch (operate) {
case 0:
result = num1 + num2;
break;
case 1:
result = num1 - num2;
break;
case 2:
result = num1 * num2;
break;
// case 3:
// result = num1 / num2;
// break;
}
log.info("验证码:"+num1 + "," + num2 + "," + operate + "," + result);
// 将生成的验证码值(即运算结果的值)放到session中,以便于后台做验证。
HttpSession session = request.getSession();
session.setAttribute("rand", String.valueOf(result));
int width = 60, height = 20;
//创建BufferedImage对象,设置图片的长度宽度和色彩。
BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
OutputStream os = response.getOutputStream();
//取得Graphics对象,用来绘制图片
Graphics g = image.getGraphics();
//绘制图片背景和文字,释放Graphics对象所占用的资源。
g.setColor(getRandColor(199, 250));
//设置内容生成的位置
g.fillRect(0, 0, width, height);
//设置内容的字体和大小
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
//设置内容的颜色:主要为生成图片背景的线条
g.setColor(getRandColor(160, 200));
//图片背景上随机生成155条线条,避免通过图片识别破解验证码
for (int i = 0; i < 355; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}
//构造运算表达式
String content = num1+" "+ arr[operate]+" "+num2+" = ";
//设置写运算表达的颜色
g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
//在指定位置绘制指定内容(即运算表达式)
g.drawString(content,5,16);
//释放此图形的上下文以及它使用的所有系统资源,类似于关闭流
g.dispose();
//通过ImageIO对象的write静态方法将图片输出。
ImageIO.write(image, "JPEG", os);
os.close();
}
}
B 页面调用
<span class="tabboder" id="rands"><img
src="../RandomCodeServlet" id="auth" name="auth" border=0></span>
2.怎么用jsp做出验证码的那种效果
(转载blog的)
1、新建一个验证码生成页面,里面的内容可以不用做任何修改 看你喜欢哪种样式了 yanzhengma.jsp (随便在网上搜的)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%
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 >
<title>My JSP MyJsp.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">
<!--
<link rel="stylesheet" type="text/css" >
-->
</head>
<body>
<%!
Color getRandColor(int fc,int bc){//给定范围获得随机颜色
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc);
int g=fc+random.nextInt(bc-fc);
int b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
}
%>
<%
//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
// 在内存中创建图象
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
//生成随机类
Random random = new Random();
// 设定背景色
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
// 取随机产生的认证码(4位数字)
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
// 将认证码显示到图象中
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}
// 将认证码存入SESSION
session.setAttribute("rand",sRand);
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
%>
<a></a>
</body>
</html>
2、对于第一步,你可以先运行下这个页面,看是否有图片生成,没有的话,找其他的。在你的 zhuce.jsp 注册页面加上JS和验证码图片
<script type="text/javascript">
function changge(){
var img=document.getElementById("yanzheng");
img.src=img.src+"?"; //意思是让图片重新加载一次 效果类似与直接刷新yanzhengma.jsp有了这个,就能让图片重新加载了
}
</script>
....密码:<input type="password"/>
验证码:<img src="yanzhengma.jsp" id="yanzheng"/> <a onclick="changge();">看不清 换一张 </a>
<!--关键就是在这里,以前我们加图片,现在是加页面 ,注意页面路径-->
3、Action 取验证码判断
String yanzhengma=requet.getSession.getAttribute("rand");//该参数可以在yanzhengma.jsp里面找到
String userYanzhengma=用户输入的验证码
if(yanzhengma.equals(userYanzhengma)){
}else{
syso "验证码错误"
}
4、第一步也可以找其他好看的样式,以上代码部分手写!
以上就是关于「jsp页面如何制作验证码」的全部内容,本文讲解到这里啦,希望对大家有所帮助。如果你还想了解更多这方面的信息,记得收藏关注本站~
『Win10系统之家独家♀使★用!』
相关文章
-
1.jsp如何设置验证码,我需要完成详细的代码和过程A生成验证码的java文件packagecn.com.data100.web.servlet;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.image.BufferedImag...
-
1.关键词怎么做才好首先我们从网站发展的三个阶段来分析关键词:一,首先我们的网站在建设之初需要选取一个关键词来建设。二,当我们的网站关键词出现排名之后,为什么别人的站点比我们的排名要高。高质量站点的竞争对手...
-
有不少用户使用EasyBoot(EZBoot)制作系统启动盘,发现EZboot不能完美支持超过4G的单个文件。当ISO镜像中有大于4G的单个文件时,启动时会出现如下界面:
面对这种情况除了尽可能减小GHO和WIM文件的体积,难道没有其它方法可以解决了吗?对于GHO我们都知道可以用Ghostexp设置一下分卷大小分割一下就可以了,点视图——选项,分割成两个文件,再文件——编... -
1.怎样制作简易乐器1、首先准备制作鼓座的物品,可以使用旧锅、碗、花瓶或水桶,选择一个坚固的深底容器作为鼓座,避免选用玻璃或其它易碎物品制成的容器。2、准备制作鼓面的气球,由于你可能在制造鼓的过程中弄破气球,所以...