我有两个servlet:LoginServlet和MailServlet。 LoginServlet使用jdbc查询mysql表以获取字符串(eMail)。我想要的是将此字符串转发给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("[email protected]"));
        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("[email protected]", ...);

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

public class Mailer {
    public void sendMessage(String from, ...) {
        Message message =new MimeMessage(session1);
        message.setFrom(new InternetAddress("[email protected]"));
        message.setRecipients(...);
        message.doSomeOtherStuff();
        Transport.send(message);
    }
}

10-01 21:31