路由执行两次

我的代码是从前台获取注册信心,包括邮箱
但是发送时候出现重复执行

public void registerstu(){

Iterator<String> it  = getParaMap().keySet().iterator();

Record stumsg=new Record();

while (it.hasNext()) {

String pName =  it.next();

stumsg.set(pName, getPara(pName));

}

stumsg.set("stustate", "2");

List<Record> s = Db.find("select * from t_stu where useraccount='"+stumsg.get("useraccount")+"'");

boolean ts = false;

if(s.size()>0){

setAttr("info", "0");

}else{

String buid = stumsg.get("bind");

System.out.println(buid);

stumsg.remove("bind");

setAttr("info", "1");

if(buid!=null&&buid.equals("1")){

try {

System.out.println(stumsg.get("stuemail").toString());

String head="绑定成功";

String auth = "恭喜您绑定成功,你可以通过这个邮箱找回您的账号密码";

//发送邮件程序

new Email(stumsg.get("stuemail").toString(),auth,head);

setAttr("info", "1");

ts=true;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

setAttr("info", "2");

}

}

}

if(ts){

Db.save("t_stu", "stuid",stumsg);

}

renderJson();

}

然后Ajax提交之后发现路由重复执行了两次
检测了IP发现两次路由执行的IP也不一样
执行情况

117.136.104.198

127.0.0.1

JFinal action report -------- 2018-06-11 18:19:08 ------------------------------

Url         : POST /register/registerstu

Controller  : com.controller.login.Register.(Register.java:1)

Method      : registerstu

Interceptor : com.intercptor.global.MyInterceptor.(MyInterceptor.java:1)

Parameter   : facultyid=2  classid=126  bind=1  classname=2017软件技术(软件)1班  userpwd=201552050107  stuemail=1617105926@qq.com  facultyname=信息工程学院(软件职业技术学院)  stuname=201552050107  stuno=201552050107  useraccount=201552050107  

--------------------------------------------------------------------------------

JFinal action report -------- 2018-06-11 18:19:25 ------------------------------

Url         : POST /register/registerstu

Controller  : com.controller.login.Register.(Register.java:1)

Method      : registerstu

Interceptor : com.intercptor.global.MyInterceptor.(MyInterceptor.java:1)

Parameter   : facultyid=2  classid=126  bind=1  classname=2017软件技术(软件)1班  userpwd=201552050107  stuemail=1617105926@qq.com  facultyname=信息工程学院(软件职业技术学院)  stuname=201552050107  stuno=201552050107  useraccount=201552050107  

--------------------------------------------------------------------------------

执行两次同样的路由但是第一次IP是对的,第二次就变成本地IP了

评论区

JFinal

2018-06-11 18:37

jfinal 开源 6 年多,有将近 8 个人左右碰到过 aciton 被请求两次的情况

99% 的原因是客户端真的发起了两次请求。解决办法无一例外,先打开 chrome 浏览器的开发者窗口观察是谁发起了两次请求,多数是 js 发起的

然后调试后端 java 代码,观察请求发起的源头在哪里

无论哪种原因引起的,但肯定是与 jfinal 无关的

几次历史经验表明,如果不采用我上面介绍的方法,想要找到源头并解决问题很不容易,有的人甚至找了两三天都找不到,最后还是通过 chrome 调试 js 代码,发现是 js 发起的请求

蓝色忧恋

2018-06-12 17:30

@JFinal 谢谢詹总,我查了一下是域名的事,我用本地局域网ip链接没问题,应该是内网穿透程序的问题,具体原因不详

JFinal

2018-06-12 18:03

@蓝色忧恋 jfinal 这头的事是可以排除的,请求 99.99% 的可能性是外部发起的,但找到这个源头并不容易

热门反馈

扫码入社