欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【JavaWeb】Servlet登录验证小结

程序员文章站 2022-05-08 16:03:40
...

流程:
在html 的from表单中 使用get方法,并在img的src属性设为自动生成图片servlet的映射,从而访问到自动生成图片的控制器GenerateServlet,在GenerateServlet的doGet方法中,引用封装好的工具类(GenerateIamge)用来随机生成验证码图片,将生成的随机数存放在会话session中,给多个程序共享,通过ImageIO和ServletOutputStream将随机数图片返回给前端页面。

简述:
1.在form表单中设置get方法
2.设置img属性src为GenerateServlet(这里一定要是servlet的注意路径映射,不需要/)
3.把自动生成随机数图片的一些方法封装成一个java工具类,以便在servlet中调用
4.在GenerateServlet的doget方法调用该工具类,并通过ImageIO返回给前端页面。

注意!!!!!!超链接只能使用doGet()方法
敲了三小时问了老师才知道是这个问题!!!印象深刻!!

以下贴几张关键地方的代码
1.html 的form中

                      <p>
  
                         <input type="text"  id="checkCode" placeholder="验证码">
                         <img src="servlet/GenerateServlet" onclick="changeCode()" id="verifyCode"
                              TITLE="看不清,换一张" />
                     </p>

2.html 的表头js

    <script>
        function changeCode() {
            var codeImg =document.getElementById("verifyCode");//得到img图片标签
            codeImg.src="servlet/GenerateServlet?t="+Math.random();//给该标签下的src属性赋值,这里URL追加随机数,使程序每次
            //每次访问的都是不同的资源路径,防止浏览器缓存导致的验证码数字不变,即产生不同的验证码。
        }
    </script>

3.GenerateServlet的doGet方法

 //将生成验证码图片的过程封装在了GenerateImage类中,然后在servlet中进行调用
        GenerateImage generateImage = new GenerateImage();
        //得到vCode随机数
        String vCode = generateImage.createCode();
        
        //通过request请求得到啊Httpsession对象,
        HttpSession session=request.getSession();
        //将产生的四位随机数字符串存入到session会话中,存放在session中的数据在一个会话范围内,可以给多个程序共享访问
        session.setAttribute("verifyCode",vCode);
        //设置返回的内容种类
        response.setContentType("img/jpeg");
        //浏览器不缓存内容,点击验证码图片一次就要刷新一次,这里其实可以不再设置,因为在js操作中追加了随机数访问
//        response.setHeader("Pragma","No-cache");
//        response.setHeader("Cache-Control","no-cache");
        //设置验证码失效时间 那么(Expires,0)是多少时间???
        response.setDateHeader("Expires",0);
        BufferedImage image = generateImage.createImg(vCode);
        ServletOutputStream out = response.getOutputStream();
        ImageIO.write(image,"JPEG",out);
        out.flush();
        out.close();

相关标签: 新人