java - Servlet 间通信

标签 java servlets

我有两个 servlet:LoginServlet 和 MailServlet。 LoginServlet 使用 jdbc 查询 mysql 表以获取字符串(电子邮件)。我想要的是将这个字符串转发到 MailServlet,然后 MailServlet 将向 LoginServlet 发送的电子邮件 ID 发送一封电子邮件。

我的问题是如何从 LoginServlet 调用变量 eMail 并将其发送到 MailServlet?我想创建一个 MailServlet 实例:

MailServlet servlet = new MailServlet();

然后使用Servlet对象调用MailServlet中的函数doGet()。 但我觉得这有一些错误,因为这不是调用 servlet 的正确方法。那么如何调用变量并将其传递给 MailServlet?

最佳答案

servlet 的目的是响应 HTTP 请求。您应该做的是重构您的代码,以便将您想要的逻辑与其他 servlet 分开,并且您可以独立地重用它。例如,您最终可能会得到一个 Mailman 类和一个使用 Mailman 来完成其工作的 MailServlet。从另一个 servlet 调用一个 servlet 是没有意义的。

如果您需要在点击第一个页面后转到另一个页面,请使用重定向:

http://www.java-tips.org/java-ee-tips/java-servlet/how-to-redirect-a-request-using-servlet.html

编辑:

例如,假设您有一个类似以下的 servlet:

public class MailServlet extends HttpServlet {
    public  void doPost(HttpServletRequest request,HttpServletResponse response)
                                  throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        response.setContentType("text/html");

        Message message =new MimeMessage(session1);

        message.setFrom(new InternetAddress("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0774686a626869624774686a62736f6e69602964686a" rel="noreferrer noopener nofollow">[email protected]</a>"));
        message.setRecipients(...);
        message.doSomeOtherStuff();
        Transport.send(message);

        out.println("mail has been sent");
    }
}

相反,做这样的事情:

public class MailServlet extends HttpServlet {
    public  void doPost(HttpServletRequest request,HttpServletResponse response)
                                  throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        response.setContentType("text/html");

        new Mailer().sendMessage("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="45362a28202a2b2005362a2820312d2c2b226b262a28" rel="noreferrer noopener nofollow">[email protected]</a>", ...);

        out.println("mail has been sent");
    }
}

public class Mailer {
    public void sendMessage(String from, ...) {
        Message message =new MimeMessage(session1);
        message.setFrom(new InternetAddress("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4d3e2220282223280d3e222028392524232a632e2220" rel="noreferrer noopener nofollow">[email protected]</a>"));
        message.setRecipients(...);
        message.doSomeOtherStuff();
        Transport.send(message);
    }
}

关于java - Servlet 间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2840638/

相关文章:

java - Spring Boot连接Mongodb Atlas问题

Java - url.openConnection() 和 httpsUrlConnection.connect() 首次调用时运行缓慢

java - Servlet REST API 和线程数据交换

java - 对获取使用 Servlet 写入文本文件的路径感到困惑

java - Spring:让 ServeltDispatcher 上下文等待直到另一个上下文完成加载

java - 将文档从一个集合移动到另一个集合会覆盖该文档

java - 用java构建二叉搜索树

java - 一个应用程序中 Spring-Security 配置中的安全 Web 客户端和 API

java - 如何在 java 和 servlet 中按天计算网站点击率..?

spring - 当我设置 hbm2ddl.auto 创建时,为什么 Hibernate 会抛出 SQLGrammarException 并说表/ View 不存在?