起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4309|回复: 6

[结贴] 图形验证码。第一次点击改变图片,第二次就不行,什么...

  [复制链接]

44

主题

81

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
QQ
发表于 2015-5-8 12:04:24 | 显示全部楼层 |阅读模式
图形验证码。第一 1.png 次点击改变图片,第二次就不行,什么原因
图形验证码。第一次点击改变图片,第二次就不行,什么原因
        //生成图形验证码
        Model.prototype.SCTxCodeClick = function(event) {
       
            var statusData   =   this.comp("statusData");
          
                var params = {"TxCodeUrl"   :   statusData.val("fImage")};
               
            var success = function(resultData)
        {
          //拿到从后台返回的验证码
          this._TxCode = resultData.CheckCode;
         // alert( this._TxCode);
        };
                Baas.sendRequest({
                        "url"     : "/takeout",
                        "action"  : "TxCode",
                        "params"  : params,
                        "success" : success
                });
               
                //var element =document.getElementById('image1');
         // element.src = "$UI/weixinapp/img/CheckCode.png";
     // var abc = this.getElementByXid("image1").src;

      // alert(abc);
                this.getElementByXid('image1').src=this.transURL('./img/')+statusData.val('fImage');
       
               
       
        };       

发表于 2015-5-8 15:51:03 | 显示全部楼层
Model.prototype.image2Click = function(event) {//图片点击事件
                $("#captcha_image").attr("src", "/baas/ImageRand?" + new Date().getTime());
        };

/baas/ImageRand为请求验证码的servlet地址
回复 支持 反对

使用道具 举报

44

主题

81

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
QQ
 楼主| 发表于 2015-5-9 17:43:01 | 显示全部楼层
暗夜的忧伤
  你好! /baas/ImageRand为请求验证码的servlet地址怎么写,我将代码贴出,麻烦你帮忙看以下。

//生成图形验证码图片的java程序
package com.justep.baas.takeout;

import java.awt.Color;  
import java.awt.Font;  
import java.awt.Graphics2D;  
import java.awt.image.BufferedImage;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.OutputStream;  
import java.util.Random;  
  
import javax.imageio.ImageIO;  
/**
* 验证码生成器
* @author dsna
*
*/  
public class ValidateCode {  
    // 图片的宽度。  
    private int width = 160;  
    // 图片的高度。  
    private int height = 40;  
    // 验证码字符个数  
    private int codeCount = 5;  
    // 验证码干扰线数  
    private int lineCount = 150;  
    // 验证码  
    private String code = null;  
    // 验证码图片Buffer  
    private BufferedImage buffImg=null;  
  
    private char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',  
            'K', 'L', 'M', 'N',  'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',  
            'X', 'Y', 'Z',  '1', '2', '3', '4', '5', '6', '7', '8', '9' };  
  
    public  ValidateCode() {  
        this.createCode();  
    }  
  
    /**
     *  
     * @param width 图片宽
     * @param height 图片高
     */  
    public  ValidateCode(int width,int height) {  
        this.width=width;  
        this.height=height;  
        this.createCode();  
    }  
    /**
     *  
     * @param width 图片宽
     * @param height 图片高
     * @param codeCount 字符个数
     * @param lineCount 干扰线条数
     */  
    public  ValidateCode(int width,int height,int codeCount,int lineCount) {  
        this.width=width;  
        this.height=height;  
        this.codeCount=codeCount;  
        this.lineCount=lineCount;  
        this.createCode();  
    }  
      
    public void createCode() {  
        int x = 0,fontHeight=0,codeY=0;  
        int red = 0, green = 0, blue = 0;  
         
        x = width / (codeCount +2);//每个字符的宽度  
        fontHeight = height - 2;//字体的高度  
        codeY = height - 4;  
         
        // 图像buffer  
        buffImg = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);  
        Graphics2D g = buffImg.createGraphics();  
        // 生成随机数  
        Random random = new Random();  
        // 将图像填充为白色  
        g.setColor(Color.WHITE);  
        g.fillRect(0, 0, width, height);  
        // 创建字体  
        ImgFontByte imgFont=new ImgFontByte();  
        Font font =imgFont.getFont(fontHeight);  
        g.setFont(font);  
         
        for (int i = 0; i < lineCount; i++) {  
            int xs = random.nextInt(width);  
            int ys = random.nextInt(height);  
            int xe = xs+random.nextInt(width/8);  
            int ye = ys+random.nextInt(height/8);  
            red = random.nextInt(255);  
            green = random.nextInt(255);  
            blue = random.nextInt(255);  
            g.setColor(new Color(red, green, blue));  
            g.drawLine(xs, ys, xe, ye);  
        }  
         
        // randomCode记录随机产生的验证码  
        StringBuffer randomCode = new StringBuffer();  
        // 随机产生codeCount个字符的验证码。  
        for (int i = 0; i < codeCount; i++) {  
            String strRand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);  
            // 产生随机的颜色值,让输出的每个字符的颜色值都将不同。  
            red = random.nextInt(255);  
            green = random.nextInt(255);  
            blue = random.nextInt(255);  
            g.setColor(new Color(red, green, blue));  
            g.drawString(strRand, (i + 1) * x, codeY);  
            // 将产生的四个随机数组合在一起。  
            randomCode.append(strRand);  
        }  
        // 将四位数字的验证码保存到Session中。  
        code=randomCode.toString();
        System.out.println("55555555555="+code);
    }  
      
    public void write(String path) throws IOException {  
            System.out.println("55555555555="+path);
        OutputStream sos = new FileOutputStream(path);  
            this.write(sos);  
    }  
      
    public void write(OutputStream sos) throws IOException {  
            ImageIO.write(buffImg, "png", sos);  
            sos.close();  
    }  
    public BufferedImage getBuffImg() {  
        return buffImg;  
    }  
      
    public String getCode() {  
        return code;  
    }  
}  

package com.justep.baas.takeout;

//import java.io.File;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;



import com.alibaba.fastjson.JSONObject;
import com.justep.baas.data.Table;
import com.justep.baas.data.Transform;
import com.justep.baas.data.Util;
import java.util.Random;
import com.justep.baas.takeout.Send;


//图形验证Servlet
public class TakeoutServlet extends HttpServlet  {

        private static final long serialVersionUID = 5506302727994136101L;

        private static final String DATASOURCE_TAKEOUT = "jdbc/takeout";
       
        private static final String TABLE_TAKEOUT_FOOD = "takeout_food";
        private static final String TABLE_TAKEOUT_USER = "takeout_user";
        private static final String TABLE_TAKEOUT_ORDER = "takeout_order";
       
          
        public void service(ServletRequest request, ServletResponse response) throws ServletException {
                try {
                        String action = request.getParameter("action");
                        if ("queryFood".equals(action)) {
                                queryFood(request, response);
                        } else if ("queryUser".equals(action)) {
                                queryUser(request, response);
                        } else if ("queryOrder".equals(action)) {
                                queryOrder(request, response);
                        } else if ("save".equals(action)) {
                                save(request, response);
                    } else if ("DuanXinCheck".equals(action)) {
                            DuanXinCheck(request, response);
                } else if ("TxCode".equals(action)) {
                        TxCode(request, response);
                }
                } catch (Exception e) {
                        e.printStackTrace();
                        throw new ServletException(e);
                }
               
        }


private static void TxCode(ServletRequest request, ServletResponse response) throws SQLException, IOException, NamingException , Exception
        {
                JSONObject params = (JSONObject) JSONObject.parse(request.getParameter("params"));
                String TxCodeUrl = params.getString("TxCodeUrl");
                System.out.println(TxCodeUrl);
                File directory = new File("");//参数为空
                String courseFile = directory.getCanonicalPath() ;
               
                courseFile= new File(courseFile).getParent(); //获取上一级目录
                TxCodeUrl=courseFile+"\\model\\UI2\\weixinapp\\img\\"+TxCodeUrl;
                ValidateCode vCode = new ValidateCode(120,40,5,100);
                try {  
            System.out.println(vCode.getCode()+" >"+TxCodeUrl);  
            vCode.write(TxCodeUrl);  
            JSONObject jsonObj = new JSONObject();
            jsonObj.put("CheckCode", vCode.getCode());
            Util.writeJsonToResponse(response, jsonObj);
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
       
       
        }
       
}


//前段调用后端js

        //生成图形验证码
        Model.prototype.SCTxCodeClick = function(event) {
       
            var statusData   =   this.comp("statusData");
          
                var params = {"TxCodeUrl"   :   statusData.val("fImage")};
               
            var success = function(resultData)
        {
          //拿到从后台返回的验证码
          this._TxCode = resultData.CheckCode;
          alert( this._TxCode);
        };
                Baas.sendRequest({
                        "url"     : "/takeout",
                        "action"  : "TxCode",
                        "params"  : params,
                        "success" : success
                });
                this.getElementByXid('image1').src=this.transURL('./img/')+statusData.val('fImage');
        };       


//web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        id="WebApp_ID" version="2.5">
        <display-name>X5 Baas Server</display-name>
       
        <servlet>
                <servlet-name>X5 Baas Takeout Servlet</servlet-name>
                <servlet-class>com.justep.baas.takeout.TakeoutServlet</servlet-class>
                <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
                <servlet-name>X5 Baas Takeout Servlet</servlet-name>
                <url-pattern>/takeout</url-pattern>
        </servlet-mapping>
</web-app>



回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35920
发表于 2015-5-11 10:14:29 | 显示全部楼层
this.transURL('./img/')+statusData.val('fImage')在它后面加上时间戳就可以
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

44

主题

81

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
QQ
 楼主| 发表于 2015-5-11 11:29:38 | 显示全部楼层
        this.getElementByXid('image1').src="/baas/dsna.images?"+ new Date().getTime();
成功了,可以结贴了
               
回复 支持 反对

使用道具 举报

53

主题

313

帖子

1134

积分

金牌会员

Rank: 6Rank: 6

积分
1134
QQ
发表于 2016-9-10 14:35:18 | 显示全部楼层
回复

使用道具 举报

33

主题

373

帖子

916

积分

高级会员

Rank: 4

积分
916
QQ
发表于 2019-4-29 12:24:28 | 显示全部楼层
学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-5 14:36 , Processed in 0.119003 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表