【问题标题】:Java servlet synchronize doGet inside doPostJava servlet 在 doPost 中同步 doGet
【发布时间】:2014-05-23 01:59:22
【问题描述】:

我正在处理注册的电子邮件确认。

首先,我从doPost() 创建随机值并将其作为激活链接发送到最终电子邮件:

int token = new Random().nextInt(999999-100000) + 100000;
sendMail mailAgent = new sendMail("Hello!", "Hello, Link: "+ request.getRequestURL().toString()+"?Sender="+nick+"&Token="+token);
mailAgent.to = "target@mail.com";
mailAgent.send();

...消息发送正常,但我也必须取回这个值。

唯一的想法如何 - 在mailAgent.send() 方法之后开始监听 GET 请求。这意味着在那里冻结脚本的执行。

我想做这样的事情:

mailAgent.send();
doGet(request,response); 
// Will fire right after call, but i want to listen requests from here

有什么建议吗?

【问题讨论】:

  • 你的问题不清楚。你想协调(不要说同步,它暗示别的东西)doGetdoPost 在同一个 servlet 中的执行?
  • 对不起。我想在doPost 中创建一个doGet 监听器。冻结 doPost 直到我收到新的 GET 查询。需要明确的是,我很乐意接受任何其他解决方案。
  • @Vossen 如果你这样做,你所有的用户都会生气。相信我:)
  • @Vossen 提示:您可能想了解一下容器(例如 Tomcat)和 servlet 如何协同工作 - 接受请求不是 servlet 所做的事情,它只是被容器调用收到请求时。
  • @fvu,我会考虑的。

标签: java email servlets


【解决方案1】:

如果我理解正确,您希望在用户单击链接后注册用户,该链接包含一个随机令牌,通过电子邮件发送。在您发送邮件后,用户可能会在很长很长时间后单击此链接。您的服务器可能已重新启动,可能发生了很多事情。

因此,在通过邮件将其发送给用户之前,将随机令牌与用户 ID 一起存储在您的数据库中。

当用户阅读邮件,点击链接并发送回令牌时,检查他发送的令牌是否与存储在数据库中的令牌相同。如果是,则将用户标记为已注册。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-09
    • 2011-01-21
    • 2011-08-18
    • 2012-02-27
    • 2020-11-07
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    相关资源
    最近更新 更多