Java struts 2 web应用程序中使用计时器api的自动邮件发送错误
我正在开发一个Struts2 web应用程序,目前的任务是以CSV、EXCEL、PDF格式发送自动邮件。 我启动了计时器api来发送自动邮件(它可以为将来的执行安排任务) 所有格式都准备好了,但是我在发送邮件时出错,因为HttpServletRequest对象在run()方法中给我空值 HttpServletRequest=ServletActionContext.getRequest() 我需要获取请求对象,以便在发送邮件时获取语言和会话。 这是我的课程(我正在使用GoogleGuice注入服务) 我还尝试过在Bean中传递请求对象(在本例中为taskbean),通过这样做,我获得了请求对象,但会话为null 不知道请求对象为什么变为null?使用ServletActionContext 如果有人能给我推荐其他发送自动邮件的api,我会很有帮助的Java struts 2 web应用程序中使用计时器api的自动邮件发送错误,java,multithreading,email,timer,struts2,Java,Multithreading,Email,Timer,Struts2,我正在开发一个Struts2 web应用程序,目前的任务是以CSV、EXCEL、PDF格式发送自动邮件。 我启动了计时器api来发送自动邮件(它可以为将来的执行安排任务) 所有格式都准备好了,但是我在发送邮件时出错,因为HttpServletRequest对象在run()方法中给我空值 HttpServletRequest=ServletActionContext.getRequest() 我需要获取请求对象,以便在发送邮件时获取语言和会话。 这是我的课程(我正在使用GoogleGuice注入服
谢谢。读一下:是的。意味着我不能在这里使用ServletActionContext?。现在我已经实现了ServletRequestAware,并从上一页设置了请求。但我得到的会话为空。抱歉,我不明白。如果这是一个自动任务,那么您正在谈论哪个请求和会话?;)事实上,我已经使用了两种不同语言的邮件正文部分免费标记temple,例如英语和德语,模板文件夹位于web目录中。因此,每次在发送邮件之前发送时,它都会通过请求检查语言,并通过使用request.getSession().getServletContext().getRealPath(邮件)的会话找到文件夹路径(其中包含免费标记模板)。(我创建了一个通用类,用于使用模板发送邮件)
public class MailTimerTask extends TimerTask{
private final Utility mails;
private final MailService mailsrv;
private MailTimerTaskBean taskbean = new MailTimerTaskBean();
@Inject
MailTimerTask(Utility mails, MailService mailsrv) {
this.mails= mails;
this.mailsrv= mailsrv;
}
public void run() {
System.out.println("Mails-- Start");
mailList();
System.out.println("Mails-- Finished");
}
public void mailList() {
ByteArrayOutputStream outputStream = null;
HttpServletRequest request = ServletActionContext.getRequest(); // ERROR request object
for (Customer customer : taskbean.getPdfBean().getListCustomers()) {
outputStream = crt.generateOutputStream(taskbean, customer.getIdCustomer());
if (outputStream != null) {
MailBean mailBean = setMailBean(request, customer, outputStream, taskbean.getSite());
mailsrv.sentMail(mailBean);
}
}
}
public MailTimerTaskBean getMailtimertaskbean() {
return taskbean;
}
public void setMailtimertaskbean(MailTimerTaskBean mailtimertaskbean) {
this.taskbean = mailtimertaskbean;
}