JSP处理页面:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"
import="java.awt.*,java.util.*,javax.imageio.*,java.awt.image.*"
%>
<%
response.setHeader("Cache-Control", "no-cache");
//在内存中创建图像,设置图像的宽和高
int width=60,height=20;
//实例化java.awt.image.BufferedImage,作用是访问图像数据缓冲区
BufferedImage image= new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //第三个参数:使用的颜色模式为RGB模式
//获得画笔
Graphics g= image.getGraphics();
//设置背景颜色 RGB
g.setColor(new Color(200,200,200));
g.fillRect(0, 0, width, height);
//取随机产生的验证码(4位数字)
Random rnd= new Random();
int randNum=rnd.nextInt(8999)+1000; //返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
String ranStr=String.valueOf(randNum);
//将验证码存到session中
session.setAttribute("randomString", ranStr);
//将验证码显示到图像中
g.setColor(Color.red);
g.setFont(new Font("",Font.PLAIN,20)); //名称 样式 磅值大小
g.drawString(ranStr, 10, 17);
//随机产生100个干扰点,使图像中的验证码不易被其他程序检测到
for(int i=0;i<100;i++){
int x=rnd.nextInt(width);
int y=rnd.nextInt(height);
g.drawOval(x, y, 1, 1);
}
//输出图像到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
out.clear();
out=pageContext.pushBody();
%>
JSP表单页面:
<form action="form" method="post">
用户名:<input type="text" name="username"> <br>
密码:<input type="password" name="password"> <br>
<input type="text" name="code" size="20"> <img name="img" src="yanzhengma.jsp" id="img" onclick="yanzheng()">
<a href="javascript:vord(0)" onclick="yanzheng()">看不清</a><br>
<input type="submit" value="提交">
</form>
<script type="text/javascript">
function yanzheng(){
img.src=img.src+'?'+Math.random();
}</script>
Servlet处理页面:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
String yanzheng=request.getParameter("code");
String username=request.getParameter("username");
String password=request.getParameter("password");
if(request.getSession(false).getAttribute("numberStr")!=null)
{
String numberStr=(String)request.getSession(false).getAttribute("numberStr");
if(yanzheng.equals(numberStr))
{
if(username.equals("admin")&&password.equals("1234"))
{
response.getWriter().println("恭喜登录成功");
}else
{
response.getWriter().println("账号或者密码错误登录失败");
}
}else
{
response.getWriter().println("验证码错误");
}
}
}