こんにちは。質問させて頂きます。
JSPを用いて、データベースを利用した掲示板を作成するために勉強している大学生です。
「java+mysql+tomcatで作る掲示板とブログ」 にて、本に沿ってコードなどを理解しながら進んでいたのですが、P86からある、表示とロジックの分離(bbs/G)の部分で動作に異常がでました。
症状として、indexからデータベースに投稿(追加)はできるのですが、その項目に対して編集(edit)や削除(delete)をしようとすると、完了の通知はでているのですが、indexに戻ると格納されたデータに変化がなく、結果として編集や削除の操作ができなくなり、動作ができていません。
自分ではFまでと同様に、classesからコンパイルを行い、クラスファイルがある事を確認。実際にJSPでファイルを開いて動作の確認などを行いました。
自分でも更に試行錯誤をしていますが、エラーコードがでなく、原因を特定をするのが難しい状態なので、思い当たる原因、試したほうがいい事項などありましたら、教えて頂けますでしょうか。
よろしくお願い致します。
JSPを用いて、データベースを利用した掲示板を作成するために勉強している大学生です。
「java+mysql+tomcatで作る掲示板とブログ」 にて、本に沿ってコードなどを理解しながら進んでいたのですが、P86からある、表示とロジックの分離(bbs/G)の部分で動作に異常がでました。
症状として、indexからデータベースに投稿(追加)はできるのですが、その項目に対して編集(edit)や削除(delete)をしようとすると、完了の通知はでているのですが、indexに戻ると格納されたデータに変化がなく、結果として編集や削除の操作ができなくなり、動作ができていません。
自分ではFまでと同様に、classesからコンパイルを行い、クラスファイルがある事を確認。実際にJSPでファイルを開いて動作の確認などを行いました。
自分でも更に試行錯誤をしていますが、エラーコードがでなく、原因を特定をするのが難しい状態なので、思い当たる原因、試したほうがいい事項などありましたら、教えて頂けますでしょうか。
よろしくお願い致します。
投稿:sei[sei]/2012年 06月 02日 12時 58分
/更新:2012年 06月 02日 12時 59分
RE:java+mysql+tomcatで作る掲示板とブログ bbs/G でのエラー
by 竹形 誠司[takegata]
竹形です、こんにちは。
デバッグに関する一般的な話になりますが、「コードの一部をわざと壊してみて、エラーが発生するかどうかを確認する」という方法があります。今回の場合などでは、まずSQL文で存在しないテーブルを指定したり、文法エラーになるような修正を加えてみてはどうでしょうか。
編集しているファイルと実際に使われているファイルが違っていたり、時計が狂っているために正しくコンパイルされない、などの勘違いをこの方法で見つけることができます。
クラスファイルをコンパイルしなおした場合はTomcatのアプリケーションをリロードする必要があるので、その点も注意してください。
デバッグに関する一般的な話になりますが、「コードの一部をわざと壊してみて、エラーが発生するかどうかを確認する」という方法があります。今回の場合などでは、まずSQL文で存在しないテーブルを指定したり、文法エラーになるような修正を加えてみてはどうでしょうか。
編集しているファイルと実際に使われているファイルが違っていたり、時計が狂っているために正しくコンパイルされない、などの勘違いをこの方法で見つけることができます。
クラスファイルをコンパイルしなおした場合はTomcatのアプリケーションをリロードする必要があるので、その点も注意してください。
投稿:竹形 誠司[takegata]/2012年 06月 02日 13時 12分
/更新:2012年 06月 02日 13時 12分
お返事ありがとうございます。
エラーになる文法を組み込んだところ、エラーメッセージが表示されたため、jspファイルが使用できている事を確認しました。
現在はwriteからeditやdeleteに、変数の値が移っているか等を、それぞれの変数の値を表示させて順番に確認しています。
まだ途中なのですが、idが正しく参照できていないため、更新や削除が反映されてないのではないかと予想しています。
また何かわかったら近況を書きたいと思います。ありがとうございました。
エラーになる文法を組み込んだところ、エラーメッセージが表示されたため、jspファイルが使用できている事を確認しました。
現在はwriteからeditやdeleteに、変数の値が移っているか等を、それぞれの変数の値を表示させて順番に確認しています。
まだ途中なのですが、idが正しく参照できていないため、更新や削除が反映されてないのではないかと予想しています。
また何かわかったら近況を書きたいと思います。ありがとうございました。
投稿:sei[sei]/2012年 06月 03日 01時 05分
/更新:2012年 06月 03日 01時 05分
こんにちは
前回の投稿から、自分で変数を表示させるなどして原因を探しました。
恐らく、useBeanの操作が上手くいかず、セッションが切れてしまっていて、更新・削除ができてないのだと思います。
気づいた理由として、bbs/Gができない状態だったのですが、試しにbbs/Hのコードも実行してみたところ、セッションタイムアウトになりました。これはintIdが0になっているからだと思います。
ネットで調べて、セッションクッキーの許可設定なども試したのですが、結果は変わりません。
今後とも自分で検証を続けますが、竹形さんの方で何か心当たりがあれば助言して頂けると嬉しいです。
前回の投稿から、自分で変数を表示させるなどして原因を探しました。
恐らく、useBeanの操作が上手くいかず、セッションが切れてしまっていて、更新・削除ができてないのだと思います。
気づいた理由として、bbs/Gができない状態だったのですが、試しにbbs/Hのコードも実行してみたところ、セッションタイムアウトになりました。これはintIdが0になっているからだと思います。
ネットで調べて、セッションクッキーの許可設定なども試したのですが、結果は変わりません。
今後とも自分で検証を続けますが、竹形さんの方で何か心当たりがあれば助言して頂けると嬉しいです。
投稿:sei[sei]/2012年 06月 07日 02時 01分
/更新:2012年 06月 07日 02時 01分
アプリケーションのフォルダはP.18のようにしてありますかね。
webappsの下にアプリケーションを置く人が多いのですが、
その場合は本書の記述通りにならないことがあります。
webappsの下にアプリケーションを置く人が多いのですが、
その場合は本書の記述通りにならないことがあります。
投稿:竹形 誠司[takegata]/2012年 06月 07日 02時 11分
/更新:2012年 06月 07日 02時 11分
夜分遅くにすみません。
お返事ありがとうございます。
P18にはjamesのインストールの記載があるので、P16で宜しいでしょうか。
P16での、アプリケーションの配置は正しいようです。
1つ進展がありました。
jamato2/jsp/bbs/G
edit2,edit3,delete2,delete3のコードで
<jsp:useBean class="jamyto2.BbsArticle" id="article" scope="session"/>
を
<jsp:useBean class="jamyto2.BbsArticle" id="article" scope="application"/>
に変えたところ、動作が上手く行きました。
私のPCの設定や環境が原因しているのか、scopeの範囲がsessionだとidが初期化されてしまうという事でした。
ネットで調べると、同じような方がいました。
http://okwave.jp/qa/q4763608.html
しかしこの方も解決していないようで、私もscopeの範囲を変えるという事を試した結果、このようになりました。
scopeでの一番大きい範囲という事で、今後弊害が出てしまうかもしれませんが、とりあえずこのまま例題を進めてみようかと思います。
お返事ありがとうございました。今後とも先生の本で勉強させて頂きます。
お返事ありがとうございます。
P18にはjamesのインストールの記載があるので、P16で宜しいでしょうか。
P16での、アプリケーションの配置は正しいようです。
1つ進展がありました。
jamato2/jsp/bbs/G
edit2,edit3,delete2,delete3のコードで
<jsp:useBean class="jamyto2.BbsArticle" id="article" scope="session"/>
を
<jsp:useBean class="jamyto2.BbsArticle" id="article" scope="application"/>
に変えたところ、動作が上手く行きました。
私のPCの設定や環境が原因しているのか、scopeの範囲がsessionだとidが初期化されてしまうという事でした。
ネットで調べると、同じような方がいました。
http://okwave.jp/qa/q4763608.html
しかしこの方も解決していないようで、私もscopeの範囲を変えるという事を試した結果、このようになりました。
scopeでの一番大きい範囲という事で、今後弊害が出てしまうかもしれませんが、とりあえずこのまま例題を進めてみようかと思います。
お返事ありがとうございました。今後とも先生の本で勉強させて頂きます。
投稿:sei[sei]/2012年 06月 07日 03時 24分
/更新:2012年 06月 07日 03時 24分
P.16 でした、すみません。
で、scopeをapplicationにしてしまうと、同時にアクセスしたユーザがみな同じ値を共有してしまうので、テストはうまくいっても実際に運用を始めたときに支障が出てくると思います。
scopeがsessionではダメでapplicationではOKという状況を見たことがないので、ちょっと私の方でも調べてみます。
で、scopeをapplicationにしてしまうと、同時にアクセスしたユーザがみな同じ値を共有してしまうので、テストはうまくいっても実際に運用を始めたときに支障が出てくると思います。
scopeがsessionではダメでapplicationではOKという状況を見たことがないので、ちょっと私の方でも調べてみます。
投稿:竹形 誠司[takegata]/2012年 06月 07日 20時 34分
/更新:2012年 06月 07日 20時 34分
いろいろ調べてみましたが、これといって原因となりそうなものは見つけられませんでした。
ブラウザでセッションクッキーが拒否されていないかもう一度確認していただけますか?
現在お使いのブラウザは何でしょうか。
他のブラウザをインストールして試してみることはできますか?
ブラウザでセッションクッキーが拒否されていないかもう一度確認していただけますか?
現在お使いのブラウザは何でしょうか。
他のブラウザをインストールして試してみることはできますか?
投稿:竹形 誠司[takegata]/2012年 06月 07日 22時 32分
/更新:2012年 06月 07日 22時 33分
こんにちは
再度scopeをapplicationからsessionに戻し確認してみました。
firefoxで実行しても不可で、Internet Explorerでは、インターネットオプションでセッション、クッキーの設定を確認しましたが不可でした。
両方とも以前と同様にセッションタイムアウトのエラーがでました。
indexのページだけはscopeがpageでも実行できています。
コードの問題ではなく、環境の問題である可能性が高いと感じました。
本書で技術を身に付けて、最終的には自分で作成したものをローカルで限定したエリアで公開しようとしています。早い段階で他PCと共有し、scopeをapplicationからsessionに戻して機能するかを確認したいと思います。
何度も調べて頂きありがとうございます。
再度scopeをapplicationからsessionに戻し確認してみました。
firefoxで実行しても不可で、Internet Explorerでは、インターネットオプションでセッション、クッキーの設定を確認しましたが不可でした。
両方とも以前と同様にセッションタイムアウトのエラーがでました。
indexのページだけはscopeがpageでも実行できています。
コードの問題ではなく、環境の問題である可能性が高いと感じました。
本書で技術を身に付けて、最終的には自分で作成したものをローカルで限定したエリアで公開しようとしています。早い段階で他PCと共有し、scopeをapplicationからsessionに戻して機能するかを確認したいと思います。
何度も調べて頂きありがとうございます。
投稿:sei[sei]/2012年 06月 08日 11時 48分
/更新:2012年 06月 08日 12時 48分
セッションクッキーはJSESSIONIDという名前のクッキーとしてHTTPヘッダーに挿入されて送受信されます。FireFoxのアドオンにLive HTTP Headersというものがあり、これを使うとHTTPヘッダーの内容を見ることができます。これを使ってJSESSIONIDがどのようになっているか確認してみてはどうでしょう。
何か分かるかもしれません。
Live HTTP Headersは以下からインストールできます。
https://addons.mozilla.org/ja/firefox/addon/live-http-headers/
インストール後、Firefoxを再起動し、[ツール]メニューからLive HTTP Headersを選ぶとHTTPヘッダーの内容が別ウィンドウに表示されます。
何か分かるかもしれません。
Live HTTP Headersは以下からインストールできます。
https://addons.mozilla.org/ja/firefox/addon/live-http-headers/
インストール後、Firefoxを再起動し、[ツール]メニューからLive HTTP Headersを選ぶとHTTPヘッダーの内容が別ウィンドウに表示されます。
投稿:竹形 誠司[takegata]/2012年 06月 08日 12時 08分
/更新:2012年 06月 08日 12時 09分
Live HTTP Headersを導入して試してみました。
JSESSIONIDをチェックしたところ、scopeがsessionでもapplicationでも、常にindex-edit1-edit2-edit3と、1ページごと変化していました。
本来1つのPCからはセッションが固定でないといけないと思うのですが、この動作はやはり異常なのでしょうか。
indexからeditで更新完了までのJSESSIONIDをコピーしました。
スコープ アプリケーション
index Set-Cookie: JSESSIONID=1FF61B8DDAA20743B479BC09A874ABB0; Path=/jamyto2
edit1 Set-Cookie: JSESSIONID=BD15113C924E7C84814056F0F0F88637; Path=/jamyto2
edit2 Set-Cookie: JSESSIONID=B4B88D32F344F49B77605220515F07B2; Path=/jamyto2
edit3(更新完了) Set-Cookie: JSESSIONID=BA3AA07809C7C53FE12A94058921EBF6; Path=/jamyto2
スコープ セッション
index Set-Cookie: JSESSIONID=80D4AB80A8E987C1A84371017494C8F2; Path=/jamyto2
edit1 Set-Cookie: JSESSIONID=6D4887293A84B6B7B724505BF11C7456; Path=/jamyto2
edit2 Set-Cookie: JSESSIONID=BA69F557D486E89C1BCE84045EB0F144; Path=/jamyto2
edit3(セッションエラー) Set-Cookie: JSESSIONID=A3D0B1B15D4A97E319DB1CD3CF9453F1; Path=/jamyto2
JSESSIONIDをチェックしたところ、scopeがsessionでもapplicationでも、常にindex-edit1-edit2-edit3と、1ページごと変化していました。
本来1つのPCからはセッションが固定でないといけないと思うのですが、この動作はやはり異常なのでしょうか。
indexからeditで更新完了までのJSESSIONIDをコピーしました。
スコープ アプリケーション
index Set-Cookie: JSESSIONID=1FF61B8DDAA20743B479BC09A874ABB0; Path=/jamyto2
edit1 Set-Cookie: JSESSIONID=BD15113C924E7C84814056F0F0F88637; Path=/jamyto2
edit2 Set-Cookie: JSESSIONID=B4B88D32F344F49B77605220515F07B2; Path=/jamyto2
edit3(更新完了) Set-Cookie: JSESSIONID=BA3AA07809C7C53FE12A94058921EBF6; Path=/jamyto2
スコープ セッション
index Set-Cookie: JSESSIONID=80D4AB80A8E987C1A84371017494C8F2; Path=/jamyto2
edit1 Set-Cookie: JSESSIONID=6D4887293A84B6B7B724505BF11C7456; Path=/jamyto2
edit2 Set-Cookie: JSESSIONID=BA69F557D486E89C1BCE84045EB0F144; Path=/jamyto2
edit3(セッションエラー) Set-Cookie: JSESSIONID=A3D0B1B15D4A97E319DB1CD3CF9453F1; Path=/jamyto2
投稿:sei[sei]/2012年 06月 08日 13時 33分
/更新:2012年 06月 08日 13時 33分
JSESSIONIDが変わってしまうということはセッションが維持されていないということです。以下にテストページを作ってみたので、アクセスしてみてください。
http://www.orquesta.org/takegata/SessionTest.jsp
[次へ]をクリックして同じセッションIDが表示されればセッションは維持されていることになります。
上のテストでセッションが維持されなければブラウザ側の問題、セッションが維持されるのであればサーバ側の問題ということになると思います。
http://www.orquesta.org/takegata/SessionTest.jsp
[次へ]をクリックして同じセッションIDが表示されればセッションは維持されていることになります。
上のテストでセッションが維持されなければブラウザ側の問題、セッションが維持されるのであればサーバ側の問題ということになると思います。
投稿:竹形 誠司[takegata]/2012年 06月 09日 00時 18分
/更新:2012年 06月 09日 00時 18分
お返事遅れました。申し訳ありません。
テスト用ページを作成して頂きありがとうございました。
試した所、セッションIDは保たれていました。
この結果から、サーバ側の問題だとわかりました。
とりあえずはこのまま例題を進めていき、ユーザ管理の部分でまたこの問題に当たると思うので、そこでもう一度原因を調べて確かめたいと思います。
テスト用ページを作成して頂きありがとうございました。
試した所、セッションIDは保たれていました。
この結果から、サーバ側の問題だとわかりました。
とりあえずはこのまま例題を進めていき、ユーザ管理の部分でまたこの問題に当たると思うので、そこでもう一度原因を調べて確かめたいと思います。
投稿:sei[sei]/2012年 06月 11日 13時 51分
/更新:2012年 06月 11日 13時 51分
前回は質問に丁寧に対応して下さり、ありがとうございました。
以前の状態から1ヶ月が立ち
現在の状態としては、ファイルによっては最初からセッションIDが固定されていたり、ファイルによっては固定されなかったりしています。
固定されてない場合は、一度applicationで作られたファイルを開いてデータベースに投稿してから、元のsessionのファイルに戻ると何故か固定されます。
本で得た技術を自分なりに使って作成したファイルでは、最初からセッションIDが固定になっているので、とりあえずはこの状態で進みたいと思います。
以前の状態から1ヶ月が立ち
現在の状態としては、ファイルによっては最初からセッションIDが固定されていたり、ファイルによっては固定されなかったりしています。
固定されてない場合は、一度applicationで作られたファイルを開いてデータベースに投稿してから、元のsessionのファイルに戻ると何故か固定されます。
本で得た技術を自分なりに使って作成したファイルでは、最初からセッションIDが固定になっているので、とりあえずはこの状態で進みたいと思います。
投稿:sei[sei]/2012年 07月 13日 15時 44分
/更新:2012年 07月 13日 15時 44分