- - PR -
HttpServletRequestが無い時にHttpSessionを取得する方法
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-27 22:01
Strutsで開発しています。
初歩的な質問で申し訳ありませんが、HttpServletRequestが無い時にHttpSessionを 取得する方法を教えて下さい。 ActionクラスではrequestパラメタからHttpSessionを取得することができますが、 ロジック用のクラスなど、HttpServletRequestをパラメタに持っていない所で セッション情報を取得する方法が判りません。 | ||||||||||||||||
|
投稿日時: 2005-11-27 23:02
ロジック用のクラスとは、独自で作られたPOJOでしょうか。
ならば、HttpServletRequest/HttpSessionを渡さない限り、 HttpSessionを取得する事はできません。 何か渡せない理由があるのでしょうか? | ||||||||||||||||
|
投稿日時: 2005-11-28 02:06
「ロジック用のクラス」であればそれは Web レイヤに依存しないビジネスロジックだけを記載するクラスになりそうです。
なので Web 層でしか生成し得ないインスタンスを前提にするのは妙ですね。 引数やコンストラクタにはもっと一般的な型を渡してやるようにして、サーブレットからでもアプレットからでもスタンドアロンのアプリケーション内でも呼び出せるような形にしてあげるのが良いかと思います。 サーブレット内で呼び出されるのが前提となるのであればやはり HttpServletRequest なりHttpSession なり直接渡してあげることになります。 基本的に渡されない情報は参照出来ません。 | ||||||||||||||||
|
投稿日時: 2005-11-28 03:00
インギさんの仰るとおり、ロジッククラスを特定APIに依存させない為には、
パラメータ等を抽象化する必要がありますね。
上記のようにパラメータを抽象的に表現し、 業務ロジックに渡すようにします。 パラメータクラスを以下のように、 各アーキテクチャ向けに実装します。
サーブレットでは
のように実行し、 バッチ処理などのmainメソッドからの実行は
というように実行します。 LogicクラスではDataインターフェイスだけを意識すればよく、 HttpSessionには依存しません。 | ||||||||||||||||
|
投稿日時: 2005-11-28 10:24
おはようございます。
早速のご回答ありがとうございます。 私もパラメタを渡すのが簡単だと思ったのですが、既にいろんなところで 使用しているロジックのため影響範囲が大きく、なるべくパラメタの変更は 避けたかったからです。 やりたいのは、request.getServerName()で得たサーバー名からドメイン名を 抽出することです。 ドメイン名を必要とするのがメール送信用の汎用クラスの中のため、この汎用 クラスを使用する部分を全て変更する必要があります。 今回の修正を加える前はプロファイルでメール送信クラスの中で使用する ドメイン名を与えていましたが、wwwサーバーとアプリケーションサーバーを 分離して複数の入り口を持つようにしてしまったため、入り口に合わせて ドメイン名を変更する必要が生じました。 アクションクラスの中だけなら修正は割と簡単だったのですが、アクションクラス から直接呼び出すことの無いメール送信クラスを変更すると途中の関係ないクラスまで 修正を加えなければならず、何とか回避する方法は無いものかと思案しています。 | ||||||||||||||||
|
投稿日時: 2005-11-28 11:16
ドメイン名はセッション情報に書き込んでおき、使いまわせるようにしたいと思っていました。
ドメイン名の他にもセッション情報から取り出したい情報があったので最初の質問となりました。 |
1