Submit Search
Upload
HTTPとサーブレット
•
3 likes
•
1,715 views
Takashi Makino
Follow
JJUG 基礎セミナー 初級者シリーズ HTTPとサーブレット
Read less
Read more
Technology
Report
Share
Report
Share
1 of 42
Download now
Download to read offline
Recommended
Spring AMQP × RabbitMQ
Spring AMQP × RabbitMQ
Keisuke Nishitani
WordPressプラグイン作成入門
WordPressプラグイン作成入門
Yuji Nojima
Flask勉強会その1
Flask勉強会その1
Masato Kawamura
concrete5デザインカスタマイズに必要なPHPの知識
concrete5デザインカスタマイズに必要なPHPの知識
Hishikawa Takuro
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
ria1201
Mixer2 で作るカスタムテンプレートエンジン #渋谷java
Mixer2 で作るカスタムテンプレートエンジン #渋谷java
Jun Futagawa
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
Y Watanabe
20081003
20081003
小野 修司
Recommended
Spring AMQP × RabbitMQ
Spring AMQP × RabbitMQ
Keisuke Nishitani
WordPressプラグイン作成入門
WordPressプラグイン作成入門
Yuji Nojima
Flask勉強会その1
Flask勉強会その1
Masato Kawamura
concrete5デザインカスタマイズに必要なPHPの知識
concrete5デザインカスタマイズに必要なPHPの知識
Hishikawa Takuro
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
ria1201
Mixer2 で作るカスタムテンプレートエンジン #渋谷java
Mixer2 で作るカスタムテンプレートエンジン #渋谷java
Jun Futagawa
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
Y Watanabe
20081003
20081003
小野 修司
20190809
20190809
iPride Co., Ltd.
Pyramid入門
Pyramid入門
Atsushi Odagiri
.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説
Cherry Pie Web
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
Shigeo Ueda
SQLマッピングフレームワーク「Kobati」のはなし
SQLマッピングフレームワーク「Kobati」のはなし
Kazuki Minamitani
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村
Koichi Uchimura
CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4
arisu yano
WCO2012「PHP教室」
WCO2012「PHP教室」
Takuma Morikawa
20120327 phpstudy58-phake
20120327 phpstudy58-phake
Katsuhiro Ogawa
Open Source System Administration Framework - Func
Open Source System Administration Framework - Func
Gosuke Miyashita
勉強会資料①
勉強会資料①
真亮 坂口
ぶっとびケータイ+Firefox OS Apps
ぶっとびケータイ+Firefox OS Apps
EnsekiTT
Magento cafe plus #12
Magento cafe plus #12
Hirokazu Nishi
HTML5&API総まくり
HTML5&API総まくり
Shumpei Shiraishi
Djangoによるスマホアプリバックエンドの実装
Djangoによるスマホアプリバックエンドの実装
Nakazawa Yuichi
web server
web server
soestudio
アプリコンテスト
アプリコンテスト
Tomonori Yamada
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
Hirokazu Nishi
Java基礎勉強会
Java基礎勉強会
rung (Hiroki Suezawa)
心はソフトウェアエンジニア、仕事は経営者のすゝめ
心はソフトウェアエンジニア、仕事は経営者のすゝめ
Takashi Makino
LMS on the Cloud
LMS on the Cloud
Takashi Makino
ITエンジニアのしあわせ考
ITエンジニアのしあわせ考
Takashi Makino
More Related Content
What's hot
20190809
20190809
iPride Co., Ltd.
Pyramid入門
Pyramid入門
Atsushi Odagiri
.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説
Cherry Pie Web
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
Shigeo Ueda
SQLマッピングフレームワーク「Kobati」のはなし
SQLマッピングフレームワーク「Kobati」のはなし
Kazuki Minamitani
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村
Koichi Uchimura
CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4
arisu yano
WCO2012「PHP教室」
WCO2012「PHP教室」
Takuma Morikawa
20120327 phpstudy58-phake
20120327 phpstudy58-phake
Katsuhiro Ogawa
Open Source System Administration Framework - Func
Open Source System Administration Framework - Func
Gosuke Miyashita
勉強会資料①
勉強会資料①
真亮 坂口
ぶっとびケータイ+Firefox OS Apps
ぶっとびケータイ+Firefox OS Apps
EnsekiTT
Magento cafe plus #12
Magento cafe plus #12
Hirokazu Nishi
HTML5&API総まくり
HTML5&API総まくり
Shumpei Shiraishi
Djangoによるスマホアプリバックエンドの実装
Djangoによるスマホアプリバックエンドの実装
Nakazawa Yuichi
web server
web server
soestudio
アプリコンテスト
アプリコンテスト
Tomonori Yamada
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
Hirokazu Nishi
What's hot
(18)
20190809
20190809
Pyramid入門
Pyramid入門
.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SQLマッピングフレームワーク「Kobati」のはなし
SQLマッピングフレームワーク「Kobati」のはなし
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村
CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4
WCO2012「PHP教室」
WCO2012「PHP教室」
20120327 phpstudy58-phake
20120327 phpstudy58-phake
Open Source System Administration Framework - Func
Open Source System Administration Framework - Func
勉強会資料①
勉強会資料①
ぶっとびケータイ+Firefox OS Apps
ぶっとびケータイ+Firefox OS Apps
Magento cafe plus #12
Magento cafe plus #12
HTML5&API総まくり
HTML5&API総まくり
Djangoによるスマホアプリバックエンドの実装
Djangoによるスマホアプリバックエンドの実装
web server
web server
アプリコンテスト
アプリコンテスト
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
Viewers also liked
Java基礎勉強会
Java基礎勉強会
rung (Hiroki Suezawa)
心はソフトウェアエンジニア、仕事は経営者のすゝめ
心はソフトウェアエンジニア、仕事は経営者のすゝめ
Takashi Makino
LMS on the Cloud
LMS on the Cloud
Takashi Makino
ITエンジニアのしあわせ考
ITエンジニアのしあわせ考
Takashi Makino
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しよう
Takashi Makino
JJUG CCC 2014 Fall LT
JJUG CCC 2014 Fall LT
Takashi Makino
GASろう
GASろう
Takashi Makino
SIerにおくる、アジャイルプロセスの実践
SIerにおくる、アジャイルプロセスの実践
Takashi Makino
Html講習会資料
Html講習会資料
竹島 泉
ソフトウェア開発の見える化
ソフトウェア開発の見える化
Takashi Makino
AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる
AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる
Takashi Makino
Seasar conference 2015 sa-compojure
Seasar conference 2015 sa-compojure
Yoshitaka Kawashima
Java Servlets
Java Servlets
BG Java EE Course
Viewers also liked
(13)
Java基礎勉強会
Java基礎勉強会
心はソフトウェアエンジニア、仕事は経営者のすゝめ
心はソフトウェアエンジニア、仕事は経営者のすゝめ
LMS on the Cloud
LMS on the Cloud
ITエンジニアのしあわせ考
ITエンジニアのしあわせ考
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しよう
JJUG CCC 2014 Fall LT
JJUG CCC 2014 Fall LT
GASろう
GASろう
SIerにおくる、アジャイルプロセスの実践
SIerにおくる、アジャイルプロセスの実践
Html講習会資料
Html講習会資料
ソフトウェア開発の見える化
ソフトウェア開発の見える化
AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる
AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる
Seasar conference 2015 sa-compojure
Seasar conference 2015 sa-compojure
Java Servlets
Java Servlets
Similar to HTTPとサーブレット
Struts2を始めよう!
Struts2を始めよう!
Shinpei Ohtani
Clrh 110716 wcfwf
Clrh 110716 wcfwf
Tomoyuki Obi
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
miso- soup3
Selenium webdriver使ってみようず
Selenium webdriver使ってみようず
Oda Shinsuke
HttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何か
ShigekiYamada
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocket
Yu Nobuoka
プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~
プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~
Takeuchi Yuichi
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!
yoshikawa_t
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
Sevletとjsp
Sevletとjsp
mikansan
Apache Torqueについて
Apache Torqueについて
tako pons
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
Akira Inoue
Pro aspnetmvc3framework chap15
Pro aspnetmvc3framework chap15
Hideki Hashizume
Chrome DevTools.next
Chrome DevTools.next
yoshikawa_t
TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介
ao27
キャバァーン! サツバツエアアイオー弐〇壱弐
キャバァーン! サツバツエアアイオー弐〇壱弐
Kei Nakazawa
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
後期02
後期02
Takenori Nakagawa
Similar to HTTPとサーブレット
(20)
Struts2を始めよう!
Struts2を始めよう!
Clrh 110716 wcfwf
Clrh 110716 wcfwf
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Selenium webdriver使ってみようず
Selenium webdriver使ってみようず
HttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何か
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocket
プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~
プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Sevletとjsp
Sevletとjsp
Apache Torqueについて
Apache Torqueについて
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
Pro aspnetmvc3framework chap15
Pro aspnetmvc3framework chap15
Chrome DevTools.next
Chrome DevTools.next
TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介
キャバァーン! サツバツエアアイオー弐〇壱弐
キャバァーン! サツバツエアアイオー弐〇壱弐
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
後期02
後期02
Recently uploaded
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
Recently uploaded
(8)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
HTTPとサーブレット
1.
基礎セミナー初級者シリーズ HTTPとサーブレット 日本Javaユーザグループ/株式会社アットウェア
牧野隆志
2.
目的 • サーブレットが動作する仕組み
を学びます – 深く詳細までは取り上げません – APIドキュメントを読んだり、書籍、Webサイトな どを参照してください – ミドルウェアやWebアプリケーションフレーム ワークが何をやっているかなんとなく想像がつ くようになるとうれしいです
3.
こういうのを作ります JJUG 任意の文字列を入力す
るとGoogleみたいに検索 結果が一覧表示される
4.
これがサーブレットでできてます • Webブラウザから入力した文字列(検索
キーワード)を解釈して、検索して、結果を 一覧で表示しています – あのGoogleだって、基本的にやってることは同じ(はず) Webブラウザ ①入力文字列 ⑤表示 サーブレット ②入力文字列解釈 ③検索 ④結果表示画面作成
5.
サーブレット(Servlet)とは • JavaでWebアプリケーションを構築するた
めの仕組み • 余談ですが、WebアプリケーションはJavaでなくて も作れます • J2EE/JavaEEの一機能として仕様が決 まっていて、仕様に従ってコードを書けば 動的なWebサイトを立ち上げることができ ます むずかしい話はとりあえずおいておきましょう
6.
まずはWebブラウザに表示 • Webブラウザは、HTMLで記述された内容
を画面に表示する <html> <head> <title>検索</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <h2>Googleみたいな検索</h2> <form method="GET" action="search"> <input type="text" name="query"> <input type="submit" value="検索" > </form> </body> </html>
7.
public class SearchServlet
extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { : } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { : } } サーブレットを見てみましょう
8.
サーブレットのクラス import javax.servlet.http.*;
public class SearchServlet extends HttpServlet { javax.servlet.http.HttpServlet のサブクラスにします クラス名は何でも構いません
9.
javax.servlet.http.HttpServlet • JavaEEで規定された抽象(abstract)クラス
• Webアプリケーションとしてブラウザからの 要求に対して行う処理をHttpServletを継 承したクラスに書きます • 処理に応じて、HttpServletのメソッドをオー バーライドします
10.
サーブレットで特に重要なメソッド • doGet
HTMLのform action=”GET”に対してsubmitボ タンが押された場合に呼び出されるメソッド • doPost HTMLのform action=”POST”に対してsubmit ボタンが押された場合に呼び出されるメソッド それぞれのactionに対する処 理をメソッドの中に記述する
11.
doGetメソッド protected void
doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException パラメータ: req - Webブラウザからの要求 resp - Webブラウザへの応答
12.
doPostメソッド • doGetとパラメータ、戻り値、例外が一緒
GETとPOSTで処理の内容が違うことはほとんどないの で、doGetとdoPostのいずれからも別のメソッドを単に呼 び出すだけにすることが多い protected void processRequest(・・・) { // ここに実際の処理を書く } protected void doGet(・・・) { processRequest(req, resp); } protected void doPost(・・・) { processRequest(req, resp); }
13.
Webブラウザからの要求の内容 • Webブラウザで入力した文字列がdoGet
(あるいはdoPost)メソッドの一つ目のパラ メータHttpServletRequestオブジェクトに セットされます より正確には、HTMLのsubmitボタンを押されたform に含まれるinput要素の内容(テキストボックスに入力 した文字列やチェックしたラジオボタンの名称など)が セットされます
14.
HttpServletRequestのパラメータ <input type="text"
name="query"> JJUG 検索 HttpServletRequest “query” protected void doGet(HttpServletRequest req,… String query = req.getParameter("query"); =>“JJUG” JJUG
15.
サーブレットの主になる処理 • HttpServletRequestの内容に応じて、サー
ブレット毎に必要な処理を行います 今回の例だとGoogleみたいな検索処理 String result[] = search(query); • サーブレットとは別のクラスに処理を委譲したほ うがよい – ビジネスロジックがサーブレット(HttpServlet)に依存 するのは汎用性が無くなるため(他で使えない) – 一般的なWebアプリケーションフレームワークの役割
16.
表示したい内容をHTMLにします • 処理が終わったら、結果をWebブラウザで
表示できるように加工します →HTML文書を生成します 最初に「Webブラウザは、HTMLで記述された内容 を画面に表示する」とあるとおり • doGet(あるいはdoPost)メソッドの二つ目 のパラメータHttpServletResponseオブジェ クトからgetWriterにてWriterオブジェクトを 取り出し、HTML文書を書き込みます
17.
HTMLを生成するのは面倒だけど // まず結果がHTMLであることを明確にして
resp.setContentType("text/html;charset=UTF-8"); // Writerを取り出して PrintWriter out = resp.getWriter(); // ひたすらHTMLを書き込んでいく… out.println("<html>"); out.println("<head>"); : : out.println("</body>"); out.println("</html>"); out.close(); Javaソースコード中に HTMLを書くわずらわし さを解消するJSPという 技術がありますが、ここ では紹介しません
18.
こんな感じで表示 <html> <head>
<title>検索結果</title> </head> <body> <h2>JJUGの検索結果</h2> <ul> <li>JJUGについて <li>JJUGとは <li>JJUGの謎に迫る <li>What is JJUG </ul> </body> </html>
19.
ひととおりの動作を見ました • Webブラウザでsubmitボタンを押すとサー
ブレットのdoGetかdoPostが呼ばれる • formに入力したデータが HttpServletRequestにセットされている • サーブレットでHttpServletRequestの内容 に基づき処理をして、結果をHTMLにして HttpServletResponseにセットする • Webブラウザに表示される
20.
サーブレットが複数ある場合は? • formひとつでサーブレットがひとつだったけ
ど、ページが複数あったり、formが複数 あったらどうする? → web.xmlにformのaction(パス)毎に呼 び出すサーブレットを指定します
21.
サーブレット のクラス名 web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app …省略…> <servlet> <servlet-name>SearchServlet</servlet-name> <servlet-class>jjug.SearchServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SearchServlet</servlet-name> <url-pattern>/search</url-pattern> </servlet-mapping> </web-app> HTMLのform actionに設 定したパス
22.
Webブラウザから入力すると Webブラウザから入力すると、web.xmlの servlet-mappingに従って、サーブレットを
呼び出す・・・ web.xmlを参照して、サーブレットを呼び出 しているのは誰? Webブラウザ? ではありません
23.
そもそもサーブレットを動かしてるのは • サーブレットコンテナ(Webコンテナ)
– サーブレットを実行するためのミドルウェア – J2EE/JavaEEのサーブレットの仕様に基づき、 サーブレットアプリケーションを実行します – 代表的なものはApache Tomcat – サーブレットに限らず、J2EE/JavaEEの全ての 仕様を満たしたGlassFish、BEA WebLogic、 IBM WebSphereなどのアプリケーションサーバ でもサーブレットは実行できます
24.
Webブラウザから入力すると • Webブラウザから入力すると、ネットワーク
を介してサーブレットコンテナに送信され、 内容をHttpServletRequestにセットして サーブレットを起動する Webブラウザ サーブレットコンテナ サーブレット web.xml 送信 起動
25.
サーブレットが結果をセットすると • サーブレットがHttpServletResponseにセッ
トした内容をサーブレットコンテナがWebブ ラウザに返す Webブラウザ サーブレットコンテナ サーブレット 返信
26.
Webブラウザとサーブレットの通信 Webブラウザ Webブラウザから入
力された情報の通知 サーブレット 入力された情報を元に 処理した結果の返信 ネットワーク上で情報のやり 取り(通信)が行われている
27.
Webブラウザからサーブレットへ • こんな情報が通知されているはず
– HTMLのformに書かれたaction(パス) – formのinputにWebブラウザで入力された文 字列など
28.
こんなのが送られてます GET /jjug_servlet/search?query=JJUG
HTTP/1.1 Host: localhost:8080 User-Agent: Mozilla/5.0 (Macintosh; U; … Accept: text/xml,application/xml, … Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://localhost:8080/jjug_servlet/… ちなみにWiresharkと いうソフトを使いました
29.
これがHTTPです • なんかごちゃごちゃしてますが、ちゃんと決
められた規則に従って送られています • この規則のことを“HTTP”といいます – Hypertext Transfer Protocol – HTMLやXMLなどのハイパーテキストをWebブ ラウザとWebサーバで送受信するためのプロト コル – 実際にはハイパーテキスト以外のコンテンツ、 たとえば画像なども送受信できます • HTTPは単純な送信(リクエスト)と返信(レ スポンス)の組み合わせ
30.
プロトコルとは • ネットワーク上で情報をやり取りするため
の決まりごとを“プロトコル”といいます • コンピュータ・ソフトウェアは融通が利かな いので、厳格に決められたとおりに情報を やり取りしなければなりません
31.
一行目に注目すると GET /jjug_servlet/search?query=JJUG
・GET: GETメソッド ・/jjug_servlet/search: actionで指定したパス ・query=JJUG: inputタグのnameと入力した文字列
32.
HTTP(リクエスト)の構成 リクエストライン 一行目GET
/jjug_servlet/search?query リクエストヘッダ 空行 メッセージボディ Host: localhost:8080 User-Agent: Mozilla/5.0 (Macin Accept: text/xml,application/x Accept-Language: ja,en-us;q=0. : POSTメソッドの場合、ここ にformの内容が並ぶ 二行目 ~ 改行まで 改行から ~ 末尾まで
33.
返信(レスポンス)の内容 HTTP/1.x 200
OK X-Powered-By: Servlet/2.5 Server: Sun Java System Application Server 9.1_01 Content-Type: text/html;charset=UTF-8 Content-Length: 204 Date: Sun, 13 Apr 2008 16:17:10 GMT <html> <head> <title>検索結果</title> </head> <body> <h2>JJUGの検索結果</h2> :
34.
HTTP(レスポンス)の構成 ステータスライン 一行目HTTP/1.x
200 OK レスポンスヘッ ダ 空行 メッセージボディ X-Powered-By: Servlet/2.5 Server: Sun Java System Applic Content-Type: text/html;charse Content-Length: 204 <html> <head> <title>検索結果</title> </head> <body> : : 二行目 ~ 改行まで 改行から ~ 末尾まで
35.
ステータスライン HTTP/1.x 200
OK ・200:ステータスコード(成功) 処理結果をコードで示します 主なステータスコード 200 OK. 成功 403 Forbidden. 権限がないなど、アクセスが禁止されている 404 Not Found. リソース(ファイル)が見つからない 500 Internal Server Error. サーバー内部にエラーが発生した Service Unavailable. サービスが一時的に過負荷やメンテ ナンスで使用不可能である 503
36.
レスポンスヘッダ • Content-Type:
text/html;charset=UTF-8 – メッセージボディ(コンテンツ)の種類を示します – サーブレットで設定した内容 resp.setContentType("text/html;charset=UTF-8"); • Content-Length: 204 – メッセージボディ(コンテンツ)の長さを示します
37.
レスポンスメッセージボディ • Webブラウザに表示するHTML
– サーブレットでWriterに書き込んだ内容 PrintWriter out = resp.getWriter(); out.println("<html>"); out.println("<head>"); : out.println("</html>"); out.close(); • HTMLでなくてもよい
38.
ちなみにWebブラウザじゃなくても • HTTPは単純な文字列で構成されたプロト
コルなので、Webブラウザじゃなくても簡単 に扱えます • 例えば、UNIXやWindowsのtelnetコマンド でサーブレットコンテナに接続して、HTTP のリクエストを入力すれば結果が返ってき ます
39.
telnetで接続してみた $ telnet
127.0.0.1 8080 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. GET /jjug_servlet/search?query=JJUG HTTP/1.0 HTTP/1.1 200 OK X-Powered-By: Servlet/2.5 Server: Sun Java System Application Server 9.1_01 Content-Type: text/html;charset=UTF-8 Content-Length: 204 Date: Mon, 14 Apr 2008 05:08:41 GMT Connection: close <html> : : </html> 入力 入力 Webブラウザじゃなくてもちゃ んと結果が返ってきます
40.
サーブレットコンテナも作ってみよう • サーブレットコンテナはこんなことをやって
るはず ① Webブラウザがネットワークを介してリクエス トを送信してくるのを待ち受ける ② HTTPリクエストの内容を解釈し、web.xmlに 従い、呼び出すサーブレットを決定する ③ パラメータをHttpServletRequestにセットする ④ サーブレットを呼び出す ⑤ HttpServletResponseにセットされた結果を Webブラウザに返す
41.
そんなに難しくありませんね • ホントはサーブレットの仕様はもっともっと
いっぱいあって、複雑です • でも、基本的には全てこの動作の延長に あります
42.
最後に 今日の話は明日からすぐ役に立つもので はありませんが、何か問題が起きた時に
解決のヒントになったり、ミドルウェアやフ レームワークそのものに興味を持っていた だくきっかけになればうれしいです 注)この解説の中には概要を理解していただくことを優先し、 一部正確ではない記述もあります。ご了承ください。
Download now