微软官方MSDN原版Win10系统下载

现在位置: 首页  > 系统教程  > 系统帮助

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系统之家独家♀使★用!』

相关文章

  • jsp页面如何制作验证码

    jsp页面如何制作验证码

    1.jsp如何设置验证码,我需要完成详细的代码和过程A生成验证码的java文件packagecn.com.data100.web.servlet;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.image.BufferedImag...
  • 如何制作关键词

    如何制作关键词

    1.关键词怎么做才好首先我们从网站发展的三个阶段来分析关键词:一,首先我们的网站在建设之初需要选取一个关键词来建设。二,当我们的网站关键词出现排名之后,为什么别人的站点比我们的排名要高。高质量站点的竞争对手...
  • EasyBoot制作启动盘不支持大于4G的文件如何解决

    EasyBoot制作启动盘不支持大于4G的文件如何解决


      有不少用户使用EasyBoot(EZBoot)制作系统启动盘,发现EZboot不能完美支持超过4G的单个文件。当ISO镜像中有大于4G的单个文件时,启动时会出现如下界面:
      面对这种情况除了尽可能减小GHO和WIM文件的体积,难道没有其它方法可以解决了吗?对于GHO我们都知道可以用Ghostexp设置一下分卷大小分割一下就可以了,点视图——选项,分割成两个文件,再文件——编...
  • 如何制作简单乐器

    如何制作简单乐器

    1.怎样制作简易乐器1、首先准备制作鼓座的物品,可以使用旧锅、碗、花瓶或水桶,选择一个坚固的深底容器作为鼓座,避免选用玻璃或其它易碎物品制成的容器。2、准备制作鼓面的气球,由于你可能在制造鼓的过程中弄破气球,所以...