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以外のテンプレートエンジンの使用