我正在实施cron作业计划,以便在Web应用程序中定期发送带附件的电子邮件。
问题描述: 为了在java代码中创建一个文件(将附加邮件),我需要会话对象来获取文件的绝对路径。
例如:
request.getSession().getServletContext().getRealPath("/");
我们用来获取路径。
那么如何实现/获取会话对象?或者有没有其他方法来获取文件的相对路径?
注意:我需要在WebContent / MyFolder中创建attachmnet文件。
答案 0 :(得分:1)
Cron在不同的线程和不同的时间启动作业,因此作业运行,会话可能已经不存在。您应该使用所有参数(即路径为字符串)创建cron作业,或者只使用其他方法来检索路径(例如,使用java resources或明确定义的路径)。
答案 1 :(得分:1)
由于cron作业中没有HTTP会话,因此无法获取HTTP会话。此作业是异步的,它在自己的线程中运行,与会话没有任何关系。即使没有用户连接到您的服务器,它也会运行。
所以,你的问题实际上是如何获得文件路径。
答案就在你的问题中。注意getServletContext()
。您可以从servlet中提取servlet上下文:servlet.getServletConfig().getServletContext()
。因此,如果应用程序中至少有一个servlet,则可以将servlet上下文(或从中提取的更好的文件路径)放到静态变量或系统属性中,然后在cron作业中使用它。