如何用JSP生成验证码?
我需要的是细节,不需要生成验证码的类,我有,但我不知如何嵌入HTML中,主要是我的类是写在哪?是写在出现验证码的页面的<%%>中还是写在applet中?还是另写一个JSP...
我需要的是细节,不需要生成验证码的类,我有,但我不知如何嵌入HTML中,主要是我的类是写在哪?是写在出现验证码的页面的<% %>中还是写在applet中?还是另写一个JSP文件?还有,我看别人的验证码程序时,发现在页面显示验证码是用的<img 标签,那样的话,img标签中的src参数应该怎样设置?
请各位说的越详细越好!
只要能让我明白我在加50分高分!
我邮箱 wei.hualiang@163.com 展开
请各位说的越详细越好!
只要能让我明白我在加50分高分!
我邮箱 wei.hualiang@163.com 展开
展开全部
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<%@ page import="java.awt.*" %>
<%@ page import="java.awt.image.*" %>
<%@ page import="java.util.*" %>
<%@ page import="javax.imageio.*" %>
<%!
Color getRandColor(int fc,int bc){
Random r = new Random();
if(fc > 255)
fc = 255;
if(bc > 255)
bc = 255;
int red = fc + r.nextInt(bc - fc);
int green = fc + r.nextInt(bc - fc);
int blue = fc + r.nextInt(bc - fc);
return new Color(red,green,blue);
}
%>
<%
//设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//下面开始了--生成图像
Random r = new Random();
int width = 60,height = 20;
BufferedImage pic = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics gc = pic.getGraphics();
gc.setColor(getRandColor(200,250));
gc.fillRect(0, 0, width, height);
gc.setFont(new Font("Times New Roman",Font.PLAIN,18));
gc.setColor(getRandColor(160,200));
for(int i=0;i<200;i++){
int x1 = r.nextInt(width);
int y1 = r.nextInt(height);
int x2 = r.nextInt(15);
int y2 = r.nextInt(15);
gc.drawLine(x1, y1, x2, y2);
}
gc.setColor(getRandColor(120,240));
for(int i=0;i<100;i++){
int x = r.nextInt(width);
int y = r.nextInt(height);
gc.drawOval(x, y, 0,0);
}
String rs="";
String rn="";
for(int i = 0;i<4;i++){
rn = String.valueOf(r.nextInt(10));
rs += rn;
gc.setColor(new Color(20+r.nextInt(110),20+r.nextInt(110),20+r.nextInt(110)));
gc.drawString(rn,13*i+6,16);
}
gc.dispose();
try{
session.setAttribute("code", rs);//设置session的属性code为生成的验证码(String类型),JSP中一般靠session等来传递并获得参数
}catch(Throwable t){
getServletContext().log(t.getMessage());//这里是写log,但要抓异常
}
ImageIO.write(pic,"JPEG",response.getOutputStream());//输出图片到一页面,就是流
out.clear();//后面一定要关闭流,因为在其他页面会有冲突
out = pageContext.popBody();
%>
上面时code.jsp
另一页面只写一句话就能看到图片:
<img src="code.jsp">
因为code.jsp可以向某个jsp页面输送一个图片,当然是验证码图片~
pageEncoding="GBK"%>
<%@ page import="java.awt.*" %>
<%@ page import="java.awt.image.*" %>
<%@ page import="java.util.*" %>
<%@ page import="javax.imageio.*" %>
<%!
Color getRandColor(int fc,int bc){
Random r = new Random();
if(fc > 255)
fc = 255;
if(bc > 255)
bc = 255;
int red = fc + r.nextInt(bc - fc);
int green = fc + r.nextInt(bc - fc);
int blue = fc + r.nextInt(bc - fc);
return new Color(red,green,blue);
}
%>
<%
//设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//下面开始了--生成图像
Random r = new Random();
int width = 60,height = 20;
BufferedImage pic = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics gc = pic.getGraphics();
gc.setColor(getRandColor(200,250));
gc.fillRect(0, 0, width, height);
gc.setFont(new Font("Times New Roman",Font.PLAIN,18));
gc.setColor(getRandColor(160,200));
for(int i=0;i<200;i++){
int x1 = r.nextInt(width);
int y1 = r.nextInt(height);
int x2 = r.nextInt(15);
int y2 = r.nextInt(15);
gc.drawLine(x1, y1, x2, y2);
}
gc.setColor(getRandColor(120,240));
for(int i=0;i<100;i++){
int x = r.nextInt(width);
int y = r.nextInt(height);
gc.drawOval(x, y, 0,0);
}
String rs="";
String rn="";
for(int i = 0;i<4;i++){
rn = String.valueOf(r.nextInt(10));
rs += rn;
gc.setColor(new Color(20+r.nextInt(110),20+r.nextInt(110),20+r.nextInt(110)));
gc.drawString(rn,13*i+6,16);
}
gc.dispose();
try{
session.setAttribute("code", rs);//设置session的属性code为生成的验证码(String类型),JSP中一般靠session等来传递并获得参数
}catch(Throwable t){
getServletContext().log(t.getMessage());//这里是写log,但要抓异常
}
ImageIO.write(pic,"JPEG",response.getOutputStream());//输出图片到一页面,就是流
out.clear();//后面一定要关闭流,因为在其他页面会有冲突
out = pageContext.popBody();
%>
上面时code.jsp
另一页面只写一句话就能看到图片:
<img src="code.jsp">
因为code.jsp可以向某个jsp页面输送一个图片,当然是验证码图片~
展开全部
不知道你得类是怎么样的,
应该有0-9
10个数字的图片,然后在该类中随机生成一个n位的验证码,根据这个验证码获取到相应的数字图片的地址,存入一个数组,然后在类中人return该数组。这样在jsp中根据数组获得验证码相应的数字图片
应该有0-9
10个数字的图片,然后在该类中随机生成一个n位的验证码,根据这个验证码获取到相应的数字图片的地址,存入一个数组,然后在类中人return该数组。这样在jsp中根据数组获得验证码相应的数字图片
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给我 邮箱
发一个给你!
发一个给你!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询