はじめまして。
前に質問したことがあるのですが、前回の続きです。
私は、今、WEBサーバプログラムをJavaでやろうとしています。
そこで、ServerSocket(nPort)を使い、ポート番号は80を指定して、サーバーソケットを作成しています。
ポートを開けることができたのですが、指定したフォルダにあるindex.htmlが見れません。
真っ白な画面のままで表示されないんです。
ログを見たところ、
Tue Mar 26 10:11:33 JST 2013127.0.0.1Failed/favicon.ico
Tue Mar 26 10:43:16 JST 20130:0:0:0:0:0:0:1Failed/blog/favicon.ico
Tue Mar 26 11:31:33 JST 2013127.0.0.1Failed/
Tue Mar 26 11:31:33 JST 2013127.0.0.1Failed/favicon.ico
Tue Mar 26 11:31:39 JST 2013127.0.0.1OK/index.html
Tue Mar 26 11:31:39 JST 2013127.0.0.1Failed/favicon.ico
となっています。index.htmlに行こうとするとログでは、
Tue Mar 26 11:31:39 JST 2013127.0.0.1OK/index.html
と出力されます。
ソースはhttp://www5c.biglobe.ne.jp/~ecb/java/java00.htmlにある、17.中間試験の回答例にあります。
ソース内のHTTPThread.javaのsendTargetメソッド内で何をやっているかはすごく気になります。
もし差し支えなければ、この処理を説明してもらえれば有難いです。
自分はWindowns7 64bit Eclipse 3.6を使用しています。
No.2ベストアンサー
- 回答日時:
#1です。
#1の3点はどうやら関係なさそうです。申し訳ないorz
あちらのソースを見ていて気になった点を1つ。
HTTPThread.javaのsendTargetメソッドで、
return true;
の前に、
bos.flush();
という一行を追加してみるとどうでしょうか?
bos.flush();を一行追加するとindex.htmlが表示されました!!
今まで行き詰っていたところが一気に解決しました!!
ありがとうございます。\(^ ^)/
でも、どうしてbos.flush();を追加すると表示されたのでしょう?
No.4
- 回答日時:
#1(=#2)です。
無事動いたようでよかったです。
WireSharkでパケットキャプチャする方法もありますが、
FireFoxをお使いならWebコンソールが便利です。
クライアント側の視点からではありますが、「パケット」を意識せずに通信内容を確認できます。
> どうしてbos.flush();を追加すると表示されたのでしょう?
当初の質問から外れてくるので、
本来は新しくトピックを立てた方がいいと思いますが、おまけで。
BufferedOutputStreamは名前の通り内部にバッファを持っており、
writeメソッドで書き込まれたデータは一旦バッファに溜め込まれます。
ですから、この時点では何も出力されていません。
バッファがいっぱいになるか、flushまたはcloseメソッドが呼ばれて初めて出力されます。
今手元に環境がないのでデストラクタでflushしてくれるかどうかは確認できませんが、
ガベージ・コレクションが行われないとfinalize処理が走らないため、
デストラクタ頼みにすることは避けるべきです。
No.3
- 回答日時:
>ついでで申し訳ないのですが、こういった場合のデバック方法
>としてはどのようにやるのが効果的でしょうか?
もう1台PCがあってLANで繋がっているならば…WireSharkでパケットキャプチャしながら実行する。
ってトコですかね。
気になるところっていうと…HTTPレスポンスヘッダにContents-Lengthヘッダとかないのかな?
とかでしょうかねぇ。
バッファのフラッシュに関しては#2で指摘がありますが…デストラクタで処理されるんじゃないですかねぇ……。
この回答への補足
>もう1台PCがあってLANで繋がっているならば…WireSharkでパケッ>>トキャプチャしながら実行する。
サーバーサイドプログラミングにはWireSharkは欠かせないんですね。
>もう1台PCがあってLANで繋がっているならば…WireSharkでパケットキャプチャしながら実行する。
HTTPレスポンスヘッダにContents-Lengthヘッダがあるかないか調べようと思います。
JVMだとデストラクタは内部で自動的に行っているんですよねぇ。
なのでどうなっているか分からないんですよ。
結果をみますとどうやらバッファをフラッシュしてくれる。ということは無さそうですね。
No.1
- 回答日時:
HTTP, HTMLの仕組みについてもう少し勉強しましょう。
そうすればsendTargetメソッドの処理もすぐわかります。
以下の3点と併せて考えてみてください。
(1)index.htmlを表示するだけなのに、favicon.icoに関するログが出ているのはなぜ?
(2)ほかのHTMLだと正常に表示される?(テキストのみの場合・テキスト+画像の場合)
(3)ソースから、OKのログ・Failedのログはどういうときに出る?
>HTTP, HTMLの仕組みについてもう少し勉強しましょう。
>そうすればsendTargetメソッドの処理もすぐわかります。
問題はここだけでしょうか?
正直、問題箇所自体絞れてなくて、当方は困り果てておりました。
(1)index.htmlを表示するだけなのに、favicon.icoに関するログが出ているのはなぜ?
A.favicon.icoがでていますね。どうやらアドレスに表示されるアイコンのようです。IEで開くとこれは要求されませんでした。
(2)ほかのHTMLだと正常に表示される?(テキストのみの場合・テキスト+画像の場合)
A.テキスト表示にしましたが、真っ白のままです。;;
ついでで申し訳ないのですが、こういった場合のデバック方法
としてはどのようにやるのが効果的でしょうか?
(3)ソースから、OKのログ・Failedのログはどういうときに出る?
A.アドレスを入れてEnterキー押下した時に表示されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
ExcelVBA Findメソッドで検索の...
-
ShellExecuteってなんで関数?
-
コマンドプロンプト実行後に画...
-
You Tubeの音楽をMac Book Proへ
-
sprintfは古いのか。
-
VBAのWorkbook_BeforeSaveイベ...
-
DataGridViewでセルクリックイ...
-
誰か助けて下さい。UnityのC#で...
-
vbaエクセルマクロ RemoveDupli...
-
エクセルVBAにおけるON TIMEメ...
-
メソッドの英単語の意味について
-
エクセルのマクロでプリンタを...
-
サーブレット GETからPOST送信
-
Excel VBA でExcelを終了したい...
-
canvasに描画したものを全て削...
-
C#で右からnカラム目に文字を挿...
-
Range クラスのAutoFitプロパテ...
-
PDFファイルから別ウィンドウで...
-
Labelコントロールに数字を代入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
DataGridViewでセルクリックイ...
-
final修飾子を使っているのに、...
-
javascriptからjavaを呼び出したい
-
Labelコントロールに数字を代入...
-
VBPをダブルクリックするとたま...
-
vbaエクセルマクロ RemoveDupli...
-
【sendkeysメソッドが動かずに...
-
mainメソッドのthrows節で設定...
-
エクセルVBAにおけるON TIMEメ...
-
Refreshメソッドの使い方
-
onClickで関数呼出し後に、結果...
-
ウィンドウを最前面にできません
-
JSPで<SELECT>の中にDBから持っ...
-
コマンドプロンプト実行後に画...
-
Application.Wait の参照設定
-
Excel VBA でExcelを終了したい...
-
配列のメソッド
-
エクセルのマクロでプリンタを...
-
Excel VBA シェイプの原型のサ...
おすすめ情報