JSP编写验证码

骑猪看日落 2022-05-19 13:09 307阅读 0赞

index.html

  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Insert title here</title>
  8. <script type="text/javascript">
  9. function reloadCode(){
  10. var time = new Date().getTime();//根据时间的不同来刷新
  11. document.getElementById("imagecode").src="<%=request.getContextPath() %>/servlet/ImageServlet?d="+time;
  12. }
  13. </script>
  14. </head>
  15. <body>
  16. <form action="<%=request.getContextPath() %>/servlet/LoginServlet" method="get">
  17. 验证码:<input type="text" name="checkcode"/>
  18. <img alt="验证码" id="imagecode" src="<%=request.getContextPath() %>/servlet/ImageServlet"/>
  19. <a href="javascript: reloadCode();">看不清楚</a><br>
  20. <input type="submit" value="提交">
  21. </form>
  22. </body>
  23. </html>

ImageServlet.java

  1. import java.awt.Color;
  2. import java.awt.Graphics;
  3. import java.awt.Image;
  4. import java.awt.image.BufferedImage;
  5. import java.io.IOException;
  6. import java.util.Random;
  7. import javax.imageio.ImageIO;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. public class ImageServlet extends HttpServlet{
  12. public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
  13. BufferedImage bi=new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);
  14. Graphics g=bi.getGraphics();//获取画笔
  15. Color c=new Color(200,150,255);//颜色
  16. g.setColor(c);
  17. g.fillRect(0, 0, 68, 22);//框
  18. char[] ch="QWERTYUIOPASDFGHJKLZXCVBNM1234567890".toCharArray();
  19. //获取四个字符
  20. Random r=new Random();
  21. int len=ch.length,index;//设置范围
  22. StringBuffer sb=new StringBuffer();
  23. for (int i = 0; i <4; i++) {
  24. index=r.nextInt(len);
  25. g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));//有字符后放在颜色上
  26. g.drawString(ch[index]+"",(i*15)+3,18);//字符转字符串 画字符
  27. sb.append(ch[index]);
  28. }//循环四次保存四次
  29. request.getSession().setAttribute("piccode", sb.toString());///字符保存到session里,要进行验证
  30. ImageIO.write(bi, "JPG",response.getOutputStream());
  31. }
  32. }

LoginServlet.java

  1. import java.io.IOException;
  2. import java.io.PrintWriter;
  3. import javax.servlet.http.HttpServlet;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. public class LoginServlet extends HttpServlet{
  7. public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException {
  8. String piccod=(String)request.getSession().getAttribute("piccode");//获得到原来的验证码信息
  9. String checkcode=request.getParameter("checkcode");//获取前台用户输入的数
  10. response.setContentType("text/html;charset=gbk");//防止乱码
  11. PrintWriter out=response.getWriter();//获得输出流
  12. if(piccod.equals(checkcode)){
  13. out.print("输入正确!");
  14. }else{
  15. out.print("输入错误!");
  16. }
  17. out.flush();//刷新
  18. out.close();
  19. }
  20. }

web.xml

  1. <servlet>
  2. <servlet-name>ImageServlet</servlet-name>
  3. <servlet-class>com.moke.ImageServlet</servlet-class>
  4. </servlet>
  5. <servlet>
  6. <servlet-name>LoginServlet</servlet-name>
  7. <servlet-class>com.moke.LoginServlet</servlet-class>
  8. </servlet>
  9. <!-- 映射关系 -->
  10. <servlet-mapping>
  11. <servlet-name>ImageServlet</servlet-name>
  12. <url-pattern>/servlet/ImageServlet</url-pattern>
  13. </servlet-mapping>
  14. <servlet-mapping>
  15. <servlet-name>LoginServlet</servlet-name>
  16. <url-pattern>/servlet/LoginServlet</url-pattern>
  17. </servlet-mapping>

运行结果图:

70

ps:更新了web.xml记得从新启动服务器。

发表评论

表情:
评论列表 (有 0 条评论,307人围观)

还没有评论,来说两句吧...

相关阅读

    相关 jsp验证代码

    在开发中验证码是比较常用到有效防止这种问题对某一个特定注册用户用特定程序破解方式进行不断的登陆尝试的方式。 此演示程序 [包][Link 1]括三个文件: 1.logi