我有两个 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/