导航:首页 > 万维百科 > jsp淘宝网站验证码设计

jsp淘宝网站验证码设计

发布时间:2020-09-07 10:19:22

1、JSP 图形验证码 设计完整的程序?

答案补充:(接上)

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),40+random.nextInt(110),60+random.nextInt(110)));
//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}

// 将认证码存入SESSION
session.setAttribute("rand",sRand);

// 图象生效
g.dispose();

// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
%>

2、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>

3、怎么用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 href="<%=basePath%>">

<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" href="styles.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 href="javascript:void(0);" onclick="changge();">看不清 换一张 </a>
<!--关键就是在这里,以前我们加图片,现在是加页面 ,注意页面路径-->
3、Action 取验证码判断
String yanzhengma=requet.getSession.getAttribute("rand");//该参数可以在yanzhengma.jsp里面找到
String userYanzhengma=用户输入的验证码
if(yanzhengma.equals(userYanzhengma)){
}else{
syso "验证码错误"
}
4、第一步也可以找其他好看的样式,以上代码部分手写!

4、jsp验证码是怎么实现?

1 服务器端随机产生一串字符串,保存在缓存(session)中,
2 服务器端用程序自动生成一张图片,并把随机产生的字符串写在图片上,
3 把图片发送到浏览器端
4 浏览者把图片上看到的文字写到文本框里,
5 表单提交时,这些文字被发送到服务器端,
6 服务器端验证发送来的文字和保存在缓存(session)中的字符串是否一致,是则通过验证,否则为非法操作

5、有可以直接写在jsp页面中实现验证码的方法吗,求代码

你要这样理解jsp,它虽是用于展示的,但本质是java为基础的,在编译时都会被编译成servlet。所以,你的想法没有问题,完全可以用一个jsp来写好验证码,无非就是生成图形和随机数,然后由另一个jsp来调用。

6、用jsp实现一个简单的登录界面,主要是验证码

<html>
<head>
<title>简单页面</title>
<script>
function yzm(){
var Num="";
for(var i=0;i<4;i++)
{
Num+=Math.floor(Math.random()*10);
}
document.getElementById("yzphoto").value=Num;
document.getElementById("yzm").value=Num;
}

function userLogin(){
var userName = document.getElementById("userName").value;
var password = document.getElementById("password").value;
var yztext = document.getElementById("yztext").value;
var yzm = document.getElementById("yzm").value;
if(userName != "jq"){
alert("用户名错误");
}else if(password != "123"){
alert("密码错误");
}else if(yztext != yzm){
alert("验证码错误");
}else{
alert("登陆成功");
}
location.reload();
}
</script>
</head>
<body onLoad="yzm()">
<div style="width:100%;text-align:center">
<h1>用户登录</h1>
<table>
<tr>
<td>用户名:</td>
<td><input id="userName" type="text" value=""/></td>
</tr>
<tr>
<td>密码:</td>
<td><input id="password" type="password" value=""/></td>
<tr>
<tr><td>
验证码:
</td>
<td><input id="yztext" type="text" value=""/><input style="width:50px;background-
color:red;color:blue" type="text" id="yzphoto" value=""/><input type="hidden" id="yzm"
value=""></td></tr>
<tr>
<td colspan="2" align="center"><input onclick="userLogin()" type="button" value="登陆"/></td>
</tr>
</table>
</div>
</body>
</html>

7、jsp中显示验证码的代码怎么写?

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;
/*生成验证码图片
*/
public class MakeCertPic {
 //验证码图片中可以出现的字符集,可以根据需要修改
 private char mapTable[]={
   'a','b','c','d','e','f',
   'g','h','i','j','k','l',
   'm','n','o','p','q','r',
   's','t','u','v','w','x',
   'y','z','0','1','2','3',
   '4','5','6','7','8','9'
 };
/* 功能:生成彩色验证码图片
 参数wedth为生成图片的宽度,参数height为生成图片的高度,参数os为页面的输出流
*/
 public String getCertPic(int width,int height,OutputStream os){
  if(width<=0)
   width=60;
  if(height<=0)
   height=20;
  BufferedImage image= new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
  //获取图形上下文
  Graphics g = image.getGraphics();
  //设定背景颜色
  g.setColor(new Color(0xDCDCDC));
  g.fillRect(0,0,width,height);
  //画边框
  g.setColor(Color.black);
  g.drawRect(0,0,width-1,height-1);
  //随机产生的验证码
  String strEnsure = "";
  //4代表4为验证码,如果要产生更多位的验证码,则加大数值
  for(int i = 0;i<4;++i){
   strEnsure += mapTable[(int) (mapTable.length*Math.random())];
  }
  //将认证码显示到图像中,如果要生成更多位的验证码,增加drawString语句
  g.setColor(Color.black);
  g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));
  String str = strEnsure.substring(0,1);
  g.drawString(str,8,17);
  str = strEnsure.substring(1,2);
  g.drawString(str, 20, 15);
  str = strEnsure.substring(2,3);
  g.drawString(str, 35, 18);
  str = strEnsure.substring(3,4);
  g.drawString(str, 45, 15);
  //随机产生15个干扰点
  Random rand = new Random();
  for(int i=0; i<10; i++){
   int x = rand.nextInt(width);
   int y = rand.nextInt(height);
   g.drawOval(x,y,1,1);
  }
  //释放图形上下文
  g.dispose();
  try{
   //输出图形到页面
   ImageIO.write(image, "JPEG", os);
   
  }catch (IOException e){
   return "";
  }
  return strEnsure;
 }
}


makeCertPic.jsp页面用于调用生成验证码图片的JavaBean,并在客户端显示,源代码如下:
<%@page contentType="image/jpeg" %><%@page language="java" pageEncoding="utf-8"%><jsp:useBean id="image" scope="page" class="securityCode.pic.MakeCertPic"/><%
 String str = image.getCertPic(0,0,response.getOutputStream());
 //将验证码存入session中
 session.setAttribute("certCode",str);
%>


下边是登录页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>验证码测试登录页面</title>
  <script type="text/javascript">
function changeimg()
{

var myimg = document.getElementById("code"); 
now = new Date(); 
myimg.src="makeCertPic.jsp?code="+now.getTime();

</script>
</head>
<body>
<center>
 <form action="loginCheck.jsp" method="post" />
 用户名:<input type="text" name="username" /><br>
 密&nbsp;&nbsp;码:<input type="password" name="password"/><br>
 &nbsp;验证码:<input type="text" name="certCode"/>
 <img id="code" src="makeCertPic.jsp"><a href="javascript:changeimg()">看不清,换一张 </a><br>
 <input type="submit" value="登录"/>
 </form>
</center>
</body>
</html>

8、jsp做验证码的生成

用Serverlet编写!以下是验证码的产生代码!你可以研究一下!

public class ValidateCodeServlet extends HttpServlet {

/**
*
*/
private static final long serialVersionUID = 4008416931787800531L;

/**
* Constructor of the object.
*/
public ValidateCodeServlet() {
super();
}

/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
}

/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//设置页面不缓存
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();
// 设定背景色
g.setColor(getRandColor(225, 250));
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font("Times New Roman", Font.BOLD, 20));

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
Random random = new Random();
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
HttpSession session = request.getSession();
session.setAttribute("valicode", sRand);

// 图象生效
g.dispose();

// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());

}

/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}

/**
* 给定范围获得随机颜色
* @param fc
* @param bc
* @return
*/
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);
}

}

9、jsp做的验证码如何实现换一张的功能?

javascript实现点击验证码无刷新重新加载验证码图片
在需要使用验证码的网页javascript:;" onClick="javascript:tagshow(event, '%E6%96%87%E4%BB%B6');" target="_self">文件头部加上这句
<script language="JavaScript">
function reloadcode(){
var verify=document.getElementById('safecode');
verify.setAttribute('src','images/chknumber.asp?'+Math.random());
//这里必须加入随机数不然地址相同我发重新加载
}
</script>

然后再验证码图片里面写onclick呼出上面的函数重新加载.

<img src="images/chknumber.asp" id="safecode" border="0" onclick="reloadcode()" style="cursor:hand;padding:2px 8px 0pt 3px;" />

与jsp淘宝网站验证码设计相关的知识