- ベストアンサー
netscapeで強制終了してしまう。
JSPで動的なコンテンツを作っていますが、sessionにオブジェクトを作成し保管しています。そこでwebサーバでsessionのタイムアウトが設定されているので、sessionがタイムアウトする前にHTMLをJSPから吐き出させ、sessionがタイムアウトしたあと、JSPで吐き出したHTMLから次の画面に遷移しようとすると、「"0x00000002"の命令が"0x00000002"のメモリを参照しました。メモリが"read"になることはできませんでした」といわれて、ブラウザが強制終了してしまいます。netscape4.75では、3割くらいの確立(?)で起こります。IE5.5では一度も起きた事は、ありません。 sessionのオブジェクトを参照するところのソースは、以下のような感じです。 String str1 = (String)session.getAttribute("str2"); if(str1 == null){ 静的なHTML }else{ 処理内容 動的なHTML } 解決策を知っておられる方や、同じような現象を知っておられる方は、少しでも お力になっていただければ、ありがたいと思います。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
さらっと確認しただけですので、結論は言えませんが、「お礼」で記述された静的なHTML(HTML1)の内容をコピーしてHTMLファイルとして保存し、呼び出しましたが、私の環境では質問された現象は発生しませんでした。 そこで「環境のせい」では答えにならないので、気になっている点を記述します。 JavaScriptで「win.opener.location.replace(..)」とありますが、自分自身のlocationオブジェクトを参照するために、開かれたウィンドウ(win)の開いた親ウィンドウ(opener)の「location」と遠回しにせずに、「location(またはwindow.location)」だけで十分です。 加えてURLを変更するのにreplaceメソッド利用していることがもっと気になりました。この場合、locationオブジェクトのhrefプロパティを変更します。すなわち、 location.href="新URL" ; とします。 さらにいえば、replaceメソッドでは、引数が2つ(置換前、置換後の2つ)必要な気がしました。 また、ブラウザによって挙動が違う場合、他の回答者(nagataさん)同様サーバーサイドよりクライアントサイドを疑った方が解決の近道です。 たとえば、JavaScriptで疑わしい場合、適切な位置に(見当がつかない場合1行ごとに)alertメソッドを記述して警告ダイアログを表示させて、どのタイミングでエラーが発生するのか確認するといいでしょう。 以上、参考になりましたでしょうか。
その他の回答 (2)
ANo.#2で私の環境では発生しない回答しましたが、ごめんなさい、発生していました。他のウィンドウの陰でエラーメッセージを見えませんでした。 さらに確認しましたが、やはり、replaceメソッドを使っているところが原因のようです。 location.href="新しいURL"; にすれば、OKです。 失礼しました。
- nagata
- ベストアンサー率33% (10/30)
ブラウザ側からみると、HTMLは静的も動的も区別する術はありません。 (動的なHTMLって DynamicHTML という意味ではありませんよね?) 問題はむしろ吐き出されたHTMLの中身にあるのだと思います。 ですから JSP のソースよりむしろ問題のおきる "静的なHTML" や "動的なHTML" を示した方が 適切な助言が得られるのではないでしょうか。 #Netscape は(versionにもよるのかも知れませんが)非常に #バグの多いブラウザです。複雑な処理( 例えばマニアックに JavaScript を使うなど) #でツボにはまることはあります
お礼
早速のご返答ありがとうございます。 動的なHTMLとは、DynamicHTMLではありません。 まぎらわしい書き方をして、すいません^^;; sessionの中にデータがなければ、 ただ単にsessionがtimeoutですよ。と言う注意HTMLをJAVASCRIPTを使って 新しいWINDOWに作成し、元のWINDOWをある特定のHTMLにしています。 これを「HTML1」と名づけます。 sessionの中にデータがあれば、JDBC接続でDBからデータを取得して それをHTMLに埋め込んでいます。 これのことを動的なHTMLと言う表現をしてしまいました^^;; このデータの埋め込まれたHTMLを「HTML2」と名づけます。 String str1 = (String)session.getAttribute("str2"); if(str1 == null){ HTML1 }else{ HTML2 } HTML1の内容 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <TITLE>題名</TITLE> <SCRIPT Language="JavaScript1.2"> <!-- function centerWin(){ var l =(screen.width-950)/2; var t =(screen.height-700)/2; var win = window.open ("注意.htm", "sub", "resizable=yes,width=950,height=650"); win.opener.location.replace("http://特定のHP.html"); win.moveTo(l,t); win.focus(); } //--> </SCRIPT> </HEAD> <BODY onLoad="centerWin()"> </BODY> </HTML> と言う感じにしています。 少しばかり、複雑にJAVASCRIPTを使っています。 JAVASCRIPTの方は、あまり詳しくなく今回急きょ作ってみたものなので JAVASCRIPTが悪いのか、netscape4.75が悪いのか、JSPでのJAVAの構造が悪いのか と言う切り分けも難しく、頭を悩ませています。 sessionにデータがあるときは、何もエラーが起こったことがないので 下の部分は問題ない事がわかるのですが。。。 更なる、ご教示をいただけるとありがたいと思います。 長文になりまして、すいません。
お礼
色々と貴重な時間を割いて調べていただきありがとうございます。 私も、Alertを全行にいれて試してみたところ、 replaceメソッドのところで、エラーが発生しました。 それで、nisikitさんに教えていただいた通り、location.href="URL"に 変更してみました。 ところが、またエラーが出てしまいました。 エラー内容は、以下の通りでした。 例外:アクセス違反(0xc0000005),アドレス:0x00000002 そこで色々とそこの部分を変えてみました。 location.href="URL"; window.location.href="URL"; location.replace("URL"); window.location.replace("URL"); すべて、エラーを出してしまいました。 そこで、今は、エラー内容の書き出されたログファイルを調べています。 書き出されている内容には、以下のものがあります。 例外 (エラー) 情報 アプリケーション エラーが起きたユーザーとコンピュータについてのシステム情報 システムで実行中だったタスクの一覧 アプリケーションが読み込んだモジュールの一覧 スレッド ID に対するステート ダンプ 1.レジスタのダンプ 2.現在のプログラム カウンタ周辺のコードの逆アセンブル結果 3.スタックのバック トレース 4.スタックのダンプ シンボル テーブル と言う内容なのですが、いかんせん見方もわからずで、先に進まなくなって しまいました。 今できることとして、JAVASCRIPTの記述を違うもので置きかえられないか、 エラー情報の見方を調べています。 現状として、こういう段階です。 長文になりまして、すいません。。
補足
JSPから問題部分を切り離し、HTMLとしてテストしてみるも、強制終了させられて しまいました。問題点は、javascript部分にあると言うことがわかりましたので、 JAVAの問題ではないので、javascriptの方で質問してみようと思います。 問題点の切り分けができ、javascript部分でエラーが出ると言うことが分かっただけでも、だいぶ進歩しました。 nagataさん、nisikitさんアドバイスありがとうございました。