0

Webアプリケーションに添付ファイル付きの定期的な電子メールを送信するためにcronジョブスケジュールを実装しています。

問題の説明: Javaコードでファイル(メールに添付される)を作成するには、ファイルの絶対パスを取得するためのセッションオブジェクトが必要です。

例えば ​​:

request.getSession().getServletContext().getRealPath("/");

パスを取得するために使用します。

では、どうすればセッションオブジェクトを実装/取得できますか?または、ファイルの相対パスを取得する他の方法はありますか?

注: WebContent/MyFolderにattachmnetファイルを作成する必要があります。

4

2 に答える 2

1

cronは異なるスレッドで異なる時間にジョブを起動するため、ジョブが実行されると、セッションがすでに存在していない可能性があります。すべてのパラメーター(つまり、文字列としてのパス)を使用してcronジョブを作成するか、他の方法を使用してパスを取得する必要があります(たとえば、Javaリソースまたは明示的に定義されたパスを使用します)。

于 2012-07-24T16:06:08.253 に答える
1

cronジョブにHTTPセッションがないため、HTTPセッションを取得できません。このジョブは非同期であり、独自のスレッドで実行されており、セッションとの関係はありません。サーバーに接続しているユーザーがいない場合でも実行されます。

だから、あなたの質問は実際にはファイルへのパスを取得する方法です。

そして答えはあなたの質問にあります。に注意してgetServletContext()ください。サーブレットからサーブレットコンテキストを抽出できますservlet.getServletConfig().getServletContext()。したがって、アプリケーションに少なくとも1つのサーブレットがある場合は、サーブレットコンテキスト(またはそこから抽出されたより適切なファイルパス)を静的変数またはシステムプロパティに配置して、cronジョブで使用できます。

于 2012-07-24T16:06:45.180 に答える