image.png

生成图片验证码

1、前端调用Controller类中 验证码方法 的路径

  1. <div class="row">
  2. <label>验证码</label>
  3. <span>
  4. <input type="text" name="captcha" >
  5. <img src="/teacher/captcha" id="captcha">
  6. </span>
  7. </div>

image.png

2、验证码方法 实现

  • 获得当前的响应对象(HttpServletResponse)
  • 获得可以输出验证码图片的字节流 response.getOutputStream()
  1. @RequestMapping( path = "/captcha" )
  2. public void captcha( HttpSession session ){
  3. System.out.println( "= = = = = captcha = = = = =" );
  4. // 获得当前的响应对象(HttpServletResponse)
  5. HttpServletResponse response = ResponseHolder.getCurrentResponse();
  6. try {
  7. // 获得可以输出验证码图片的字节流
  8. OutputStream output = response.getOutputStream();
  9. // 调用 GraphicHelper 类中的 create方法生成验证码图片并通过 output 输出该图片
  10. // 同时将 验证码图片上的内容 记录到一个 String 变量中
  11. String code = GraphicHelper.create( 6 , false , 180 , 40 , output , 50 );
  12. System.out.println( "生成的图片验证码内容是: " + code );
  13. // 将生成的验证码图片的内容保存到当前会话对象中
  14. session.setAttribute( "CAPTCHA" , code );// code 所对应的字符串就是需要保存的内容
  15. } catch ( IOException e ) {
  16. e.printStackTrace();
  17. }
  18. }

3、通过js实现“img验证码的点击切换照片”

()()立即执行的函数表达式,自执行函数表达式(IFE)

  1. <script type="text/javascript">
  2. // 立即执行的函数表达式 ( IIFE )
  3. ( function(){
  4. // 注意 let 之后的 image 只是一个变量名称而已
  5. let image = document.querySelector( "#captcha" ); // 根据CSS选择器选择匹配的首个元素
  6. if( image ) { // 若 image 存在则为 true,否则就是 false
  7. image.setAttribute( "title" , "点击刷新验证码" ); // 为 img 元素设置 title 属性
  8. // 将一个函数作为取值赋值 给一个局部变量(以后该变量即可当做函数来使用)
  9. let action = function(){ // function 和 () 之间没有名称的函数就是 匿名函数
  10. let path = "/teacher/captcha?time=" + Date.now() ;
  11. console.log( path );
  12. // 当 img 元素的 src 属性变化时,浏览器认为图片发生改变就会重新加载新的图片
  13. image.setAttribute( "src" , path ); // 重新设置 img 元素的 src 属性
  14. }
  15. // 为 img 元素 绑定 点击事件 ( click ) 对应的处理函数 ( action )
  16. image.addEventListener( "click" , action , false );
  17. }
  18. } )();
  19. </script>