• ベストアンサー

doHeadメソッドを使いたい

訳あって、doHeadメソッドを使ったサーブレットを作りたいのですが、 例題が無くて困っています。 いろいろ調べても、doHeadの説明は 「ヘッダだけを返す」 と書いてあるだけで、 ほとんどは実際の使用例になるとdoGetを使ったものになってしまっています。 doHeadを使う単純なサーブレットはどのように書いたらいいのでしょう? 何も表示しなくてもエラーさえ出なければかまいません。 public class HellodoHead extends HttpServlet{   public void doHead(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{   } } ためしにこのように何も記述しないで見たのですが、 HTTP Status 405 - HTTP の GET メソッドはこの URL ではサポートされていません。 というエラーです。 dogetメソッドが無いのに、GETリクエストを送った、ということらしいのですが、 ではheadリクエストのみを送ることはできるのでしょうか? 思いついたことがあれば何でもいいので、 回答いただけると助かります。 よろしくお願いいたします。

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

  • ベストアンサー
  • aton
  • ベストアンサー率47% (160/334)
回答No.2

最初に確認しておきたいのですが,azicyanさんの質問は「doHeadの例題を知りたい」,「doHeadの動作の確認をしたい」のどちらなのでしょうか? > doHeadを使う単純なサーブレットはどのように書いたらいいのでしょう? と書かれているので前者のようにも思えるのですが,質問の後半やNo.1の補足欄を見ると,後者のようにも思えます。 この回答は後者の立場で記述します。 まず,確認だけなら,No.1の方が書かれている方法(telnet)で簡単に確認できます。 ただ,テストのために何回もこれをやるのは煩わしいというのであれば,No.1の補足欄から,HEADリクエストを発行するプログラムを自分で書かれると読めるのですが,そういうことなら,「doHeadの動作の確認」する目的に,そのプログラムを使いまわして,HEADを発行できるHTTPクライアントを作ればよいのではないでしょうか? いずれにせよ,HEADリクエストの発行は,java.net.HttpURLConnectionのインスタンスを作り,java.net.HttpURLConnection#setRequestMethod("HEAD")してやれば簡単に出来ると思います。 最後に,本題からは少し逸れますが, > GETリクエストにはHEADリクエストも含まれているでしょうか・・・ いいえ。 GETリクエストのレスポンスは,HEADリクエストのレスポンスを含んでいますが,GETリクエストと HEADリクエスト自体は別の物です。 従って, > doHeadとdoGet両方を書いておけば、 > doHead、doGetの両方が実行されるでしょうか? いいえ。 doHeadとdoGet両方が書いてある場合, HEADリクエストが来た時はdoHeadだけが, GETリクエストが来た時はdoGetだけが実行されます。

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/net/HttpURLConnection.html
azicyan
質問者

補足

いずれにせよ,HEADリクエストの発行は,java.net.HttpURLConnectionのインスタンスを作り,java.net.HttpURLConnection#setRequestMethod("HEAD")してやれば簡単に出来ると思います。 あーーー 助かります。 これも知りたかったのです。 実際なかなか見つからない情報です・・・ ありがたいです。 またお礼いたします!

その他の回答 (1)

回答No.1

通常のブラウザではHEADのみ送信することはできないと思います。 telnet でhttpのポート(80など)に接続し、 HTTP/1.0 HEAD url などと打てば、doHeadだけをテストはできると思います。 同じような方法で、通常のhttpサーバーがどのようなレスポンスを返すかわかると思うので、doGetと同じような方法で、responseを返してあげればいいと思います。 詳しくはHTTPのRFCとか、それを解説している本などを参考にしてください。

azicyan
質問者

補足

回答畏れ入ります。 やはりのみは無理なのですね・・・ ということはGETリクエストにはHEADリクエストも含まれているでしょうか・・・ 質問文に書ききれていなかったことなのですが、 も少し詳しくやりたいことを言いますと、 fowardメソッドもしくはinclude メソッドで、リクエストを送り、 そのリクエストがHEADリクエストでdoHeadを呼び出す・・・ という状態を作りたいのです。 includeもしくはforwardメソッドで、HEADリクエストを送る方法、 または、 doHeadとdoGet両方を書いておけば、 doHead、doGetの両方が実行されるでしょうか? また、この場合doHeadが確かに実行されていることを確認するにはどうすればいいでしょうか・・・

関連するQ&A