- PR -

IEとNetScapeとで動きが異なる

1
投稿者投稿内容
Sum+Go
常連さん
会議室デビュー日: 2006/03/11
投稿数: 40
投稿日時: 2006-03-11 19:40
現象をご説明いたします。
ログインをしてれば、A要求画面へ。
ログインしてなければ、B画面へという処理を想定してください。
ログイン画面の呼び出しサーブレットが、
<a href="/servlet.rogin.loginServlet?site=2">ログイン</a>です。
上記の「ログイン」をクリックすると「loginServlet」の処理が始まります。
loginServletは、loginCheckサーブレットを継承しており、loginServletの「super.init()」で、loginCheckサーブレットのinit処理が走るのをログ上で確認できました。loginCheckサーブレットでログインの済と未を確認し、URLに付けていた「site=2」のパラメータを元に「ログインしていたらA画面へ、してなかったらB画面へ」と”IE6.0”では遷移させる事ができました。
しかし、”NetScape7.1”ではログイン済未にかかわらず、B画面に遷移してしまうのです。ログでどのような処理をしているかを確認してみると、スーパークラスのloginCheckサーブレットの初めの処理(実行した時に初めに入るメソッド)にセットしておいたログ吐き出されていないようなのです。
IEでは<a href="/servlet.rogin.loginServlet?site=2">ログイン</a>を
クリックした時に、上記のログ吐き出しが確認されました。
なので、ログインチェックも出来ました。しかし、NetScapeではクリック時にはログ吐き出しがされませんでした。
以前から、「NetScapeはIEより正確にソースを書かないと動かない」と聞いておりましが、やはりどこかソースの書き方が間違っているから動かないのでしょうか?
ソースも書きながらご説明したいと思いましたが、手元にないので処理の仕方だけご報告いたしました。拙い部分もあると思いますが、よろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-03-11 19:45
ログインしている、していないの判定はどのようにしていますか?

実はこういった処理は自分でコーディングすることなくサーブレットコンテナに全て任せることができます。
web.xml の security-constraints あたりの書き方を勉強すると良いかもしれません。
Sum+Go
常連さん
会議室デビュー日: 2006/03/11
投稿数: 40
投稿日時: 2006-03-12 02:35
ログインしているかの判断は、Beanに格納している値で行っております。
今ソースが手元にないので何とも言えませんが、ログイン済みか未かを判断するBeanを見て、trueならログイン済み、falseなら未、のように結果によって次に行うべき処理を分岐させてます。
教えていただいたweb.xmlについてですが、もう少し勉強しないと私にはわからない内容でした。
関連のサイトなどで1つ思い立ったのですが、initの処理についての説明で、
「init()メソッドが処理されるタイミングは、コンテナによってサーブレットオブジェクトが作成されるときです。」とありますが、以下のようなことが原因で、上手くNetScapeでは動作しなかったと考えることはできませんでしょうか。
■<a href="/servlet.rogin.loginServlet?site=2">ログイン</a>をクリックした時に、init処理が実行され、サーブレットオブジェクトが生成される。
→ログインしてないのでB画面(ログイン画面)へ遷移する。(この時、ウィンドウはNewウィンドウで表示される)
→ログインし、そのウィンドウを閉じる。
→再度、<a href="/servlet.rogin.loginServlet?site=2">ログイン</a>をクリックするとコンテナが生きていたので、init処理が走らなかった。
→キャッシュかセション情報か何かが前回に表示したB画面の情報を持っていたので、loginServleを走らせるまでもなく、自然とB画面に遷移した。

でも、有り得るのでしょうか。こんなことが・・・
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-03-12 02:40
サーブレットの init() が呼びだされるのはサーブレットのインスタンスが生成されるタイミングです。
サーブレットのインスタンスは多くの場合使い回されますのでログイン処理を書くのには適切な場所ではないでしょう。
1

スキルアップ/キャリアアップ(JOB@IT)