Java servlet间通信
我有两个servlet:LoginServlet和MailServlet。LoginServlet使用jdbc查询mysql表以获取字符串(电子邮件)。我想要的是将这个字符串转发到MailServlet,MailServlet将向LoginServlet发送的电子邮件ID发送一封电子邮件 我的问题是如何从LoginServlet调用变量电子邮件并将其发送到MailServlet?我想创建一个MailServlet实例,如下所示: MailServlet=新的MailServlet() 然后使用servlet对象调用MailServlet中的函数doGet()。Java servlet间通信,java,servlets,Java,Servlets,我有两个servlet:LoginServlet和MailServlet。LoginServlet使用jdbc查询mysql表以获取字符串(电子邮件)。我想要的是将这个字符串转发到MailServlet,MailServlet将向LoginServlet发送的电子邮件ID发送一封电子邮件 我的问题是如何从LoginServlet调用变量电子邮件并将其发送到MailServlet?我想创建一个MailServlet实例,如下所示: MailServlet=新的MailServlet() 然后使用s
但是我觉得这里面有一些错误,因为这不是调用servlet的正确方法。那么如何调用变量并将其传递给MailServlet?servlet的目的是响应HTTP请求。您应该做的是重构代码,以便将所需的逻辑与其他servlet分离,并且可以独立地重用它。例如,您可能会得到一个Mailman类和一个使用Mailman完成其工作的MailServlet。从另一个servlet调用servlet是没有意义的 如果您需要在点击第一个页面后转到其他页面,请使用重定向: 编辑: 例如,假设您有一个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("someone@something.com"));
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("someone@something.com", ...);
out.println("mail has been sent");
}
}
public class Mailer {
public void sendMessage(String from, ...) {
Message message =new MimeMessage(session1);
message.setFrom(new InternetAddress("someone@something.com"));
message.setRecipients(...);
message.doSomeOtherStuff();
Transport.send(message);
}
}
我想这可能就是您最初想要的:一个请求调度器。来自Sun示例文档:
public class Dispatcher extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) {
request.setAttribute("selectedScreen",
request.getServletPath());
RequestDispatcher dispatcher =
request.getRequestDispatcher("/template.jsp");
if (dispatcher != null)
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) {
request.setAttribute("selectedScreen",
request.getServletPath());
RequestDispatcher dispatcher =
request.getRequestDispatcher("/template.jsp");
if (dispatcher != null)
dispatcher.forward(request, response);
}
}
这似乎是为同一容器中的不同servlet、JSP或其他资源指定一个新URL,以生成响应,而不是当前servlet
从这里的教程:
您可以使用
因此,代码如下所示:
LoginServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
String emailID = "abc@abc.com"; //Write code to retrieve email id from MySql and store in emailID variable
request.setAttribute("emaiID", emailID);
RequestDispatcher rd = request.getRequestDispatcher("MailServlet");
rd.forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
String value = (String) request.getAttribute("emaiID");
pw.println("The value of email id is: " + value);
}
MailServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
String emailID = "abc@abc.com"; //Write code to retrieve email id from MySql and store in emailID variable
request.setAttribute("emaiID", emailID);
RequestDispatcher rd = request.getRequestDispatcher("MailServlet");
rd.forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
String value = (String) request.getAttribute("emaiID");
pw.println("The value of email id is: " + value);
}
如果你不清楚这个答案,请告诉我。你的观点很好,但我宁愿以
LoginServlet
和Mailer
结束。整个MailServlet
是不必要的。我的项目涉及applet作为前端,servlet作为后端。由于MailServlet需要电子邮件ID,LoginServlet提供了它。因此需要进行servlet间的通信。我同意-您可能不需要MailServlet。您应该有一个LoginServlet,然后是一个servlet,用于用户登录时将要访问的页面。邮件可以由另一个servlet在后台完成。您想要MailServlet的唯一原因是,用户必须转到特定屏幕来配置其邮件首选项,或者设置要发送的邮件。有一个基于servlet的体系结构是有意义的,但这并不意味着每个操作都需要自己的servlet。@mithun:只有当您想控制/预处理/后处理HTTP请求时,servlet才有用。在基本的扁平化JSP/Servlet设置中,每个JSP页面应该只考虑一个Servlet。您有一个登录JSP。所以你需要一个登录服务。您没有邮件JSP。因此,您不需要MailServlet。让它成为一个普通的Java类。例如,Mail-Mail=新邮件(发件人、收件人、主题、邮件);Mailer-Mailer=新的Mailer();发送(邮件)代码>左右。在任何情况下,如果您真的需要从一个servlet转到另一个servlet,重定向是实现这一点的方法。这似乎超出了我的理解,因为我对servlet不太熟悉。不管怎样,你的第一个答案解决了这个问题。这并不是我所期望的答案,但它还是成功了。