• ベストアンサー

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 } 解決策を知っておられる方や、同じような現象を知っておられる方は、少しでも お力になっていただければ、ありがたいと思います。 よろしくお願いします。

  • mkim
  • お礼率72% (161/221)
  • Java
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
noname#3852
noname#3852
回答No.2

さらっと確認しただけですので、結論は言えませんが、「お礼」で記述された静的な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)

noname#3852
noname#3852
回答No.3

ANo.#2で私の環境では発生しない回答しましたが、ごめんなさい、発生していました。他のウィンドウの陰でエラーメッセージを見えませんでした。 さらに確認しましたが、やはり、replaceメソッドを使っているところが原因のようです。  location.href="新しいURL"; にすれば、OKです。 失礼しました。

mkim
質問者

お礼

色々と貴重な時間を割いて調べていただきありがとうございます。 私も、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の記述を違うもので置きかえられないか、 エラー情報の見方を調べています。 現状として、こういう段階です。 長文になりまして、すいません。。

mkim
質問者

補足

JSPから問題部分を切り離し、HTMLとしてテストしてみるも、強制終了させられて しまいました。問題点は、javascript部分にあると言うことがわかりましたので、 JAVAの問題ではないので、javascriptの方で質問してみようと思います。 問題点の切り分けができ、javascript部分でエラーが出ると言うことが分かっただけでも、だいぶ進歩しました。 nagataさん、nisikitさんアドバイスありがとうございました。

  • nagata
  • ベストアンサー率33% (10/30)
回答No.1

ブラウザ側からみると、HTMLは静的も動的も区別する術はありません。 (動的なHTMLって DynamicHTML という意味ではありませんよね?) 問題はむしろ吐き出されたHTMLの中身にあるのだと思います。 ですから JSP のソースよりむしろ問題のおきる "静的なHTML" や "動的なHTML" を示した方が 適切な助言が得られるのではないでしょうか。 #Netscape は(versionにもよるのかも知れませんが)非常に #バグの多いブラウザです。複雑な処理( 例えばマニアックに JavaScript を使うなど) #でツボにはまることはあります

mkim
質問者

お礼

早速のご返答ありがとうございます。 動的な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にデータがあるときは、何もエラーが起こったことがないので 下の部分は問題ない事がわかるのですが。。。 更なる、ご教示をいただけるとありがたいと思います。 長文になりまして、すいません。

関連するQ&A

  • セッション管理

    度々の質問で申し訳ないです…。 「セッション管理」がどうしてもよく分かりません。 書籍やWeb上でいろんな説明を読んで頭では理解したつもりなんですが 実際使う段になるとつまづいてしまいます。 そこで質問です。 html → Servlret1 → JSP1 → Servlet1 → JSP2 → JSP3 このような遷移の中でセッション管理を行いたいと思っています。 今、JSP2までは無事にセッションオブジェクトに保存されたデータを 参照することができていますが、JSP2からJSP3に移るときに nullが渡されてしまうのです。 一度、Servlet1 へ制御を戻さなければだめなのでしょうか? 具体的なコードを以下に掲載します。 よろしくお願いします。 ========= Servlet1 でセッション開始 //セッションを得る HttpSession thisSession = req.getSession(true); //セッションに保存 req.getSession(false).setAttribute("Login","true"); ========= JSP2 で受け取る /* ここではちゃんと"true"が返ってきます。 */ //セッションオブジェクトから取り出す String login = (String)request.getSession(false).getAttribute("Login"); ========= JSP3 で受け取る /* ここで null が帰ってきてしまいます。 String login = (String)request.getSession(false).getAttribute("Login");

  • netscape4.75で強制終了

    JSPに埋め込んだjavascriptでnetscape4.75が強制終了してしまうと言う 現象に出会って悩んでいます。 IE5.5、netscape6では、正常に動作します。 問題のjavascript部分です。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <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> 何をしているかと言いますと、呼び出されたHTMLのURLを「特定のHP.html」に 変更し、サブウィンドウを新たに作成し、サブウィンドウに「注意.htm」を 表示しサブウィンドウを画面中央に移動させてフォーカスを当てています。 このJSP内のHTML部分が呼び出されると、netscape4.75が強制終了してしまいます。その内容は、以下の通りでした。 例外:アクセス違反(0xc0000005),アドレス:0x00000002 デバッグするためにAlertを1行置きに埋め込み、アクセス違反を起こしている部分をつきとめ、win.opener.location.replace("http://特定のHP.html"); で 起こっていることが、わかりました。 そこで、この部分をlocation.href="http://特定のHP.html"; と変えることで、回避されると思われたのですが、結果は同じでアクセス違反 が、出てしまい、行き詰まっています。 少しでも情報提供していただければありがたいと思います。 よろしくお願いします。 最後に長文になりましたこと、御詫びいたします。

  • Netscape 7.1を終了する際にエラーが出ます

    ATOK15を使用している関係でしょうか、Netscape 7.1を終了する際下記のエラーが出ます。 「"0x4b1385ed" の命令が "0x01b972a0" のメモリを参照しました。メモリが"read" になることはできませんでした。 プログラムを終了するには [OK] をクリックしてください。」 Microsoft Office 2003 の文章校正機能を削除してみましたが関係ないようです。 対処策をお教えく下さい。

  • netscape7.1 DDE Server Windows:Netscapeアプリケーションエラー

    netscape7.1を使用しております。先日OSをwinMEからXPに換えましたところ以下のエラーが出るようになりました。 「DDE Server Windows:Netscapeアプリケーションエラー」 "0x4b1385ed"の命令が"0x01b273c0"のメモリを参照しました。メモリが"read"になることはできませんでした。 どうなっているのか全くわかりません。netscapeのFAQのホ-ムページ等も見ましたが見つかりませんでした。どなたかご指導お願い致します。

  • String定数プールと"==演算子"との関係。

    String str1 = new String("str1"); String str2 = new String("str1"); String str3 = "str1"; if(str1 == str2){    System.out.println("same!"); } if(str1 == str3){    System.out.println("same!"); } 上記のコードで実行すると、"same!"が実行されません。 Stringオブジェクトには定数プールがあって、新たにStringオブジェクトが作成されたとき、定数プールに入っているそれまでに存在していたStringオブジェクトの値と同じであったら、新たにStringオブジェクトを作らず、それまでにあったStringオブジェクトの参照を当てるということなのです。 それに従えば、str2,str3はstr1と同じStringオブジェクトを参照しているはずだから、if文の結果はtrueになるはずなんですが、、、。 適切な回答をいただきたく思います。よろしくお願いいたします。

  • netscapeの不具合?

    NetScape4.7を使用しWEBを閲覧しているとエラーが表示れます。 http://www.microsoft.com/japan/windows/default.asp 上記URLを表示させようとすると必ず現象が発生します。 エラーメッセージは 「windows:windows Home Page - Netscape:netscape.exe -アプリケーションエラー」と言うタイトルで 「"0x0040a1b2"の命令が"0x00000014"のメモリを参照しました。メモリが"read"になることはできませんでした。」と表示されます。 設定でJAVA スクリプトのチェックを外すと現象は発生しないのですが 対応策は無いのでしょうか?

  • 携帯サイト List split

    携帯サイトをJSPで作成しているのですが、IEであれば正常に表示される以下のコードがあります。 (SessionでInsertする項目を渡しています。) A: String dataPack = (String)session.getAttribute("dataPack"); String[] insertArray = dataPack.split(","); out.print(insertArray[0]); B: List param = (List)session.getAttribute("paramPack"); out.print(param.get(0)); このどちらも携帯サイトで試すとエラー500になります。 out.print()の部分をコメントアウトすると正常に動作します。 携帯サイトでは、これらのクラスは使用できないのでしょうか?(java.util?) また、使用できないのであればこれらに代わるクラスはありませんでしょうか?

  • 画面遷移でセッション切れになります

    いつもお世話になっております。 サーブレットを使用した画面遷移で jsp(ログイン)→servlet(ログイン確認)→jsp(メニュー) →servlet(データ取得)→jsp(データ一覧表示) という流れで画面遷移を行っていたのですが、 二つ目のjsp(メニュー)まではセッションが残っているのですが 次のservletに遷移した瞬間セッションがが切れてしまいnullを検出してしまいます。 はじめのservlet(ログイン確認)にて getAttributeを使用しセッションを残していたのですが、 セッション切れの原因がわかりません。 セッション切れする原因はなんなのでしょうか。 皆様の知恵をお借りできれば幸いです。

    • ベストアンサー
    • Java
  • nullについて

    public class Test0 { public static void main(String[] args) { String str="x"; str=null; if(((Object)str).equals(null)) { System.out.println("ok"); } else { System.out.println("out"); } } } を実行するとエラーになります str=null; をコメントアウトするとエラーでなくなります クラスオブジェクトがnullに等しいかどうか をするときにたとえそのオブジェクトがnullであっても エラーにならないようにするにはどうしたらいいのでしょうか? (tryは使用しない方法でおねがいします) また String x; とした直後にxはnullなのでしょうか? String以外に一般のクラスについてもお願いします

    • ベストアンサー
    • Java
  • 終了するときに・・・・・

    終了するときに毎回ではないのですが "0x58731531"の命令が"0x00000014"のメモリを参照しました。メモリが"read"になることはできませんでした。プログラムを終了するにはOKをクリックしてください。" という文章が出てきます。どうすればいいのでしょうか?教えてくださいお願いします。

専門家に質問してみよう