人生のプチ美学を教えてください!!

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
}

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

A 回答 (3件)

ブラウザ側からみると、HTMLは静的も動的も区別する術はありません。


(動的なHTMLって DynamicHTML という意味ではありませんよね?)
問題はむしろ吐き出されたHTMLの中身にあるのだと思います。
ですから JSP のソースよりむしろ問題のおきる
"静的なHTML" や "動的なHTML" を示した方が
適切な助言が得られるのではないでしょうか。

#Netscape は(versionにもよるのかも知れませんが)非常に
#バグの多いブラウザです。複雑な処理( 例えばマニアックに JavaScript を使うなど)
#でツボにはまることはあります
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/04/23 19:53

さらっと確認しただけですので、結論は言えませんが、「お礼」で記述された静的な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メソッドを記述して警告ダイアログを表示させて、どのタイミングでエラーが発生するのか確認するといいでしょう。
以上、参考になりましたでしょうか。
    • good
    • 0

ANo.#2で私の環境では発生しない回答しましたが、ごめんなさい、発生していました。

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

この回答への補足

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

補足日時:2001/04/25 10:57
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/04/24 14:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!