Webアプリケーション開発
概要
ネットワークに接続されたクライアント(Webブラウザ)がサーバ(Webサーバ)にhttpリクエストでリソースを要求し、サーバは要求されたURLに従ってコンテンツを送り返す。
クライアントのWebブラウザは、サーバから受け取った文書やデータを、ユーザに見やすいように表示する。
サーバが公開しているコンテンツは、あらかじめ用意された文章や画像などの、内容が固定された静的コンテンツの場合もあれば、
クライアントからアクセスがある度にサーバ上でプログラムが実行され、毎回異なる内容が送られてくる動的コンテンツの場合もある。
Webアプリケーションの開発では、サーバ上で実行されるサーバサイドプログラムを作成する。
サーバー環境構築
perlに始まり、ruby、php、C#/VB.netなど、様々なプログラミング言語がサーバ側のプログラム作成に使用される。
ここでは、Java+SpringFrameworkによる開発について説明する。
- JDK
- Java開発キット。Javaで書かれたプログラムのビルドに必要
- STS
- Spring Frameworkでの開発用IDE。Eclipseベースの開発環境で、Spring用プラグインが予め導入済み
JavaのWebアプリケーションのプロジェクト
STS(およびEclipse)を使用した開発ではJavaの動的Webアプリケーションプロジェクト作成として作成される。
プロジェクトの公開ディレクトリ(WebContentフォルダ)内に、表示したいHTMLファイル、画像ファイルなどを配置する。
配置したファイルがWebサーバにより公開され、クライアントによって要求されたURLに従ってファイルが送り返されることになる。
開発機と同じPC上で動くブラウザ(ローカルのクライアント)や、他のPC(リモートのクライアント)からアクセスし、表示を確認できる。
存在しないリソースへの要求に対しては、エラーコード404 Not Foundエラーが返る。
あらかじめ定義した特定のURLへのリクエストが来た場合に、対応するプログラムを実行し、その結果を返す。
ファイル構造
公開フォルダの中に”WEB-INF”という特別扱いのディレクトリが存在し、設定やJavaのプログラム、部品等、その他制御用のファイルを格納する。
Webアプリケーション用設定ファイル(web.xml)をWEB-INF内に作成し、アプリケーションの設定を記述する。
このディレクトリは通常と異なり、クライアントからアクセスできない。(URLで/WEB-INF/web.xmlと指定しても存在しないファイルとして扱われる)
Webアプリケーションで用いられるファイルの種類
- HTMLファイル
-
-
ユーザに表示されるWebページ。テキストファイルに特定の構造を持たせ、タグで印付したハイパーテキストである。
- Servlet
-
JavaにおけるサーバサイドWebアプリケーション用のプログラム。(Servlet関連のフレームワークを使用しなくてもサーバ用プログラムは作成できるが、標準仕様なのでほぼ全てケースで従っている。後述のSpringMVCフレームワークも、Servletの上に構築されている - DispatcherServletが一旦全てのリクエストを受け取り、必要な処理に振り分ける)
- JSPファイル
-
基本構造はHTMLと同じであるが、まずサーバ側でファイルの内容が読み込まれ、必要な部分があればその場でJavaのプログラムとして実行され、結果が置き換えられたものがクライアントに送信される。
PHPやASPなど、他の言語に存在する仕組みとほぼ同様である。
JSP内にプログラムを書き込むのは推奨されない。あくまでも処理はServletが実行し、生成された結果をHTMLとして表示するためのテンプレートとして扱うべきである。(リクエスト->servletの処理を実行->結果をJSPにforward、JSPは受け取った情報をHTMLの雛形に埋め込む)
- JSファイル
-
クライアントサイドで実行されるJavaScriptファイル。HTMLの一部として埋め込まれることもある。
サーバ上では実行されす、あくまでもクライアントのブラウザ上で実行される。
(サーバサイドJavaScriptというものも存在し、JavaServletのかわりにJavaScriptでサーバ側プログラムを作成できる。が、今回扱うサーバサイドJavaアプリケーションとは無関係であり、Javaアプリケーションサーバにそれを実行させることはできない)
- CSSファイル
-
スタイルシート。HTMLの内容(文書)に適用され、見た目のデザインの定義を提供する。HTMLの一部として埋め込まれることもある。
- JPG、PNG、GIF、SVGファイル
- 画像ファイル
- MP4、MOV、FLV、WEBMファイル
- 動画ファイル
設計上の概念
MVC
作成対象を表示/データ/制御に分割して設計する。
- モデル
- そのシステムで扱うデータ、及びそのデータに関する処理、データの永続化、あたりまでをまとめたオブジェクト。
- ビュー
- ユーザにモデルを表示するための画面。
- コントローラ ー
- ユーザからのリクエストのデータを受け取り、「Controller」クラスとして作成される。
それぞれの役割分担が明確となる設計が優れたものとされる。様々な現場の実情では、コントローラー(として用意されたはずだった物)にほとんどの処理が記述されていることも多い。(悪い見本である)
SpringMVCフレームワークにおけるクラス設計
- Entity
- モデル担当。アプリケーションが扱うデータを表す。
- View
- 標準ではJSPが使用される。Controllerから受け取ったモデルデータをhtmlの雛形に埋め込んで、(クライアントに送られた後ブラウザ上で)表示される。
- Controller
- クライアントからのリクエストのデータを受け取り、各種Entityに対し必要な処理を実行し、結果をViewに渡す。必要があれば分岐し、条件により異なる結果を返す。
- Service
- ビジネスロジック担当。複雑な処理がここに記述され、Controllerから呼び出される。メソッド呼び出しが1つのトランザクション処理に対応しているため、まとまった一つの処理の単位となる。それに合わせてよく考えた設計が必要。
- Repository
- Entityとデータベースのテーブルを対応づけ、必要な検索/読込/書込処理の定義を定義する。実行環境で動作しているデータベースサーバに合わせて、アプリケーション起動時に自動的に実装が生成される。そのためクラスではなくインターフェースである。
(演習)
- ローカルでのHTML5実習
- Eclipse(STS)を使用して静的webプロジェクトの作成、HTMLの表示
- 動的webプロジェクトの作成、JSPの表示
- Servletの作成、文字列としてHTMLを返して表示
- Servletの作成、JSPにattribute値を渡して表示
- Servletの作成、 Formからパラメータを受け取って表示
- データベースを使用し、CRUDの各処理を実装、マスターメンテアプリを作成
- JSP+カスタムタグの使用、JSP-ELの使用
- JSP以外のテンプレートエンジンの使用