Javaで
Webアプリケーション入門
Abe Asami

2015/11/15 関西Java女子部
自己紹介
Abe Asami “きの子” (フリーエンジニア)
http://nocono.net/
@aa7th
Scala、Andorid
今日作ってもらうもの
しんぷれったー
構成
simpletter-api
• Twitter「風」API
• 今回のために用意(開発)したAPI
API
API
• Application Programming Interface
• 外部のプログラムから機能を利用するための
インターフェイス
• 特にRESTという設計思想に基づいたAPIは
「REST API」と呼ばれる
TwitterのAPI仕様書を
見てみよう
環境
環境
• Java
• バージョン8
• SpringBoot
• Java製フレームワーク
フレームワーク
フレームワークとは
• アプリケーションに共通する基本的なプログラ
ム構造や機能セットを実装したプログラム。
• アプリケーションの骨組み。土台。
• 複雑なシステムを一から作るのは大変なので、
フレームワークを利用して開発する。
• 様々なフレームワークが存在する。
(引用元:http://itpro.nikkeibp.co.jp/article/Keyword/20070528/272739/)
何はともあれ
まずは作ってみましょう
ハンズオンタイム
Webアプリケーション基礎
※注意
• このセクションでお話することは、Javaに
限った話ではありません。
• Webアプリケーション一般の話をします。
そもそも
Webアプリケーションとは?
Webアプリケーションとは
• Webアプリケーションとは、Webサーバー上
で動作し、Webブラウザを用いて利用するア
プリケーションのことである。
引用元:

http://www.weblio.jp/content/
%E3%82%A6%E3%82%A7%E3%83%96%E3%82%A2%E3%83%97%E3%83%AA
%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3
例えば
• ネットショップ
• ネットバンキング
• ブログ etc
Webアプリについて知る際に
まず覚えてほしい言葉
「サーバー」
と
「クライアント」
サーバー/クライアントモデル
• サーバーは提供する側。クライアントは提供
される側。
• Webアプリの世界にかぎらず、

サーバー/クライアントという言葉は使う。
• 今日説明するのは、あくまでWebアプリでの
サーバーとクライアント。
クライアント
• サーバーに必要な情報(リソース)を要求し、返却された
情報を利用する側。
• WebアプリでいうところのクライアントはWebブラウ
ザ。
• Webブラウザはサーバーから返却された情報(リソース)
を解析、表示する。
• HTML/CSS/JavaScript
• 画像
リソースの種類
• HTML
• HyperText Markup Language
• Webの文章を記述するためのマークアップ言語
• CSS
• Cascading Style Sheets
• Webのスタイルを指定するための言語
• 装飾を行う
• JavaScript
• Webブラウザで動くプログラミング言語
• 主に、Webサイトの動的な動きの実装に使われる
• Javaとは関係ない
サーバー
• クライアントの要求に応じて、リソースを返却する側
• サーバー機能を提供するサーバーソフトを使用
• Apache、nginxなどなど色々種類がある
• Javaの場合、TomcatやJetty
• サーバーマシンは特殊なPCがいるわけではない
• ただし、自前で用意するとなると大変なので今は
あまりやらない・・・
では、
サーバーとクライアント間で
どのようなやり取りが
行われているのか
イメージ図
Webサーバー
Webブラウザ(クライアント)
1. Webページを

見たいという

リクエストを送る
2. 指定した

Webページを

レスポンスとして

返す
(参考元:Webエンジニア養成読本)
HTTPプロトコル
• サーバー・クライアント間の通信の取り決め。
• リクエスト・レスポンス
• HTTPメソッド
「リクエスト」
と
「レスポンス」
リクエスト
• クライアントの要求
GET /search HTTP/1.1
Host: www.google.co.jp
例) https://www.google.co.jp/search の情報を取得
① ② ③
④
① メソッド

② リクエストURI

③ プロトコルバージョン

④ リクエストヘッダ ・・・メタデータ

(⑤ リクエストボディ ・・・ 更新情報などサーバーへ送信したい情報)
レスポンス
• リクエストを元にサーバーで生成し返却される情報
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
<html>
…
</html>
① ② ③
④
⑤
① プロトコルバージョン

② ステータスコード・・・実行結果を表すコード

③ テキストフレーズ ・・・実行結果を表すフレーズ

④ レスポンスヘッダ ・・・メタデータ

⑤ レスポンスボディ ・・・返却情報本体
実際のリクエストと
レスポンスの通信
の様子を見てみよう
HTTPメソッド
HTTPメソッド
• リクエストの種類 (という解釈でいいと思います)
• リクエストが何を要求するかによって

使い分ける
HTTPメソッドは8種類
(HTTP1.1)
実際使用するのは
• GET
• POST
• ( PUT )
• ( DELETE )
ぐらいです。
GET
GETメソッド
• リソースの取得
• 例えば、リンクからURLにアクセスするのは
GETメソッド。
POST
POSTメソッド
• リソースの作成など
• 例えば、フォームに情報を入力(ネットショッ
プなどで)して「送信」ボタンを押下、サー
バーに送信・保存する場合はPOSTメソッ
ド。
GETとPOSTの使い分け
GETとPOSTの使い分け
• リソースを取得するだけで変更がない場合は
GET。
• 上記以外(変更がある場合)はPOST。
GETとPOSTの違い
• GETの場合、サーバーへはクエリパラメータ
を使って情報を渡し、POSTの場合は

リクエストボディを使う
クエリパラメータ
クエリパラメータ
• クライアントからサーバーへ情報を渡すため
のもの
• URLに付与
• 例)

http://◯◯◯.com/search?q=Java&type=a
↑これ
リクエストボディ
リクエストボディ
POST /sample HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 8
…



text=Hello
• リクエストヘッダの後ろに付与される
URI(URL)
URI
• Uniform Resorce Identifier
• リソースを統一的に識別するID
URL
• Uniform Resorce Location
• リソースの場所(Location)を示すためのURI
がURL
• URLはURIの一種
参考書籍
• Webを支える技術 -HTTP、URI、HTML、そ
してREST (WEB+DB PRESS plus)
Javaについて
Java
• オブジェクト指向なプログラミング言語
• コンパイル言語
• JVM上で動く
今日のプロジェクトを
実行した際に
何が行われているか
コンパイル
コンパイル
• 一般的には、ソースコードをコンピュータが実行できる
機械語のプログラムに変換すること。
• Javaの場合、JVMが実行できるバイトコードのクラス・
ファイルに変換される。
• Javaのコンパイラはjavac
• javacコマンドでコンパイルできる
• IDEのrunボタンを押した時に裏で実行してくれて

いる
javacコマンドを使用するには
JDKが必要
JDK
JDK
• Java SE Development Kit
• Java用開発者向けキット
• アプリケーションを開発するのに必要また
は便利なコンパイラやデバッガなどの開発
ツール
• 一般的に、こういう開発者向けキットを「SDK
(Software Development Kit)」という
(参考元:http://docs.oracle.com/javase/jp/8/docs/technotes/guides/index.html#jre-jdk)
コンパイルして生成された
クラスファイルは
JVM上で実行される
JVM
JVM
• Java仮想マシン
• Javaで開発されたアプリケーションはJVM上
で実行される
• 各OS版のJVMが存在する。OS差異はJVMによ
り吸収されるため、同じプログラムで各OS上
で実行することができる。
• Write once, run anywhere
アプリ起動時のイメージ
アプリ起動時のイメージ
JVM
Tomcat
開発した

アプリケーション

(コンパイル済み)
PC
イメージを掴んで
いただけたでしょうか
今日のは

Java/Webアプリ開発の

ほんのさわりの部分ですが、

みなさんの理解の助けに

なれたなら嬉しいです

今日はお疲れ様でした
テンプレートエンジン
テンプレートエンジン
• HTMLファイルにプログラム(Java)コードを
埋め込むように記述できる機能を提供してく
れる。
• 今日使ったのはThymeleaf (SpringBoot標準)

2015/11/15 Javaでwebアプリケーション入門