写了几次博客之后发现自己的代码块的代码都是一个颜色,看到别人的代码都是彩色的,满心羡慕,原来在代码块的三个点后边加上自己的语言就行了(例如```java)现在我的也是彩色的了,哈哈哈哈。。。
下面来介绍一下我的验证码,搞了一下午。。。。。。
<%@ page contentType="image/jpeg" import="java.awt.*,
java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
Color getRandColor(int fc,int bc) //用于随机生成RGB颜色的方法
{
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc); //随机生成R值
int g=fc+random.nextInt(bc-fc); //随机生成G值
int b=fc+random.nextInt(bc-fc); //随机生成B值
return new Color(r,g,b); //返回RGB的值
}
%>
<%
out.clear(); //清除缓存
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(); //生成image类的getGraphics,用于绘制操作
Random random = new Random(); //实例化一个Random对象,生成随机类
g.setColor(getRandColor(200,250)); //设置getGraphics类的背景颜色
g.fillRect(0, 0, width, height); //填充矩形背景的XY坐标和宽高,起始坐标为(0,0)
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//设置验证码的字体 Font.PLAIN为普通字体,如果要使字体加粗的话应该使用Font.BOLD
g.setColor(getRandColor(160,200)); //设置线条颜色
for (int i=0;i<155;i++) //随机产生155条干扰线
{
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); //在背景图上绘制直线,四个参数表示X坐标,Y坐标,宽,高
}
String sRand=""; //输出随机的验证码
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
//rand是生成0-10之间的数,包括0不包括10,即生成的数为0-9
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.setAttribute("random",sRand); //将验证码保存到session当中
g.dispose();
//销毁图片类的对象,如果在使用了graphics获得windows一些图形资源,而不进行关闭的话,由于后期多人使用就会造成内存溢出的情况的,导致程序卡死。
ImageIO.write(image, "JPEG", response.getOutputStream()); //指定图片的格式为JPEG
%>
打开WEB-INF/web.xml文件,在该文件中配置生成验证码的servlet。在配置该servlet时,主要是通过<servlet>
标记先配置servlet文件,然后再通过<servlet-mapping>
标记配置一个映射路径,用于使用该servlet。
<servlet>
<servlet-name>QRCode</servlet-name>
<servlet-class>servlet.QRCode</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>QRCode</servlet-name>
<url-pattern>/QRCode</url-pattern>
</servlet-mapping>
在前端页面上:
<tr>
<td style="width:200px;height:60px">
<span class="STYLE9"><font color="black" size="4">验证码:</font></span>
</td>
<td style="width:100px;height:60px">
<input name="pagerandom" type="text" id="pagerandom" style=" height:30px;width:90px; border:solid 1px #000000; color:#666666; " >
</td>
<td width="102">
<a style="margin-left:10px" href="javascript:loadimage();">
<img alt="看不清请点我!" name="randImage" id="randImage" src="image.jsp" width="70" height="20" border="1" align="absmiddle"> </a>
</td>
</tr>
页面显示效果: