上級プログラミング 2( 第 7 回 ) 工学部情報工学科 木村昌臣
今日のテーマ Web アプリケーションとは Web アプリケーションとはなにか Web アプリケーションの仕組み 三層アプリケーション サーブレット JSP JavaBeans MVC モデル Web アプリケーションの環境構築 Web サーバー (Apache) Web アプリケーションサーバー (Tomcat)
Web アプリケーションとは
Web アプリケーションとはなにか 実際の処理を行うサーバーとのデータのやり取りやユーザーインターフェイスとして Web 技術を利用したもの Web ブラウザ HTTP Web サーバー Web アプリケーションサーバー
Web アプリケーションの仕組み ユーザーインターフェイス HTTP - アプリケーション間インターフェイス アプリケーションが動作 (Java プログラム等 ) Web ブラウザ HTTP Web サーバー Web アプリケーションサーバー 接続には専用のモジュールが必要
三層アプリケーション 第一層第二層第三層 プレゼンテーション Web ブラウザ ビジネスロジック Web サーバー / Web アプリケーションサーバー DB サーバー HTTP JDBC など
参考 従来のクライアント サーバーアプリケーション ( 二層アプリケーション ) 第一層 第二層 サーバー クライアント プレゼンテーション ビジネスロジック DB サーバー
従来のクライアント サーバーモデルと比べて三層アプリケーションモデルのうれしい点 表示 ( プレゼンテーション ) とデータ処理 ( ビジネスロジック ) の分離 ブラウザさえあればクライアントをインストールする必要がない ( それゆえに ) クライアントの更新が不要 データベースなどの基幹システムに対してクライアントから直接アクセスすることがない ( アクセスは Web アプリケーションサーバのみ ) のでセキュリティが向上
サーブレット (Servlet) Web アプリケーションサーバーで動作する Java プログラム HttpServlet クラスを継承して作る 次の三つのパッケージはインポートする必要あり java.io.* javax.servlet.* javax.servlet.http.* HttpServletRequest で入力 HttpServletResponse で出力を行う
JSP Java Server Page HTML に Java プログラムによる処理を付け加えたもの サーブレットは最終的に HTML 形式で出力するが Java のプログラムでは HTML のレイアウトの調整を詳細に行うことは困難 同様のことを HTML をベースにし 必要な処理を付け加えることにより実現したものが JSP
JavaBeans いろいろな Web アプリケーションで共通に使われる Java クラス群をモジュール化してまとめたもの データ接続用など クラスのプロパティ ( 変数 ) にアクセスするときには 直接 変数にアクセスするのではなく メソッド経由でアクセスする set 変数名 () 変数に値のセット get 変数名 () 変数の値を取得
それぞれの役割 ( 検索エンジンを例として ) 検索語の入力 サーブレット 検索処理の指示 DB サーバー 表示 表示用処理の指示 JSP JavaBeans 検索処理結果の取得 ただし JavaBeans や JSP の役割をサーブレットだけで実現することもある
MVC モデル 適切な出力の指示を行う Control サーブレット JavaBeans 出力を行う View JSP ビジネスロジックのモデリングを行う Model
MVC モデルにのっとった Web アプリケーションを設計する利点 規模が大きいアプリケーションに向いている 役割別に分類されているため 異なる役割の人が開発に参画しやすい M( モデル ): 共通部品開発者 V( ビュー ): 画面デザイナー C( コントロール ): アプリケーション開発者
Web アプリケーションの作り方の変化 従来の Web アプリケーションの困難 従来の Web アプリケーションでは 1 画面に対して Web ページ 1 つが対応 ユーザーがページ遷移を待たなければならず user experience 的によくない ( 使いづらい ) Web ブラウザの 戻る ボタンを押されると処理の流れが断ち切られるため 別途対応が必要 Ajax や Websocket Web ブラウザと Web サーバー間のページ遷移なしの通信を利用したプログラムを実現
Single Page Application (SPA) HTML5 で高度な処理を JavaScript で行うことができるようになったことが背景 HTML からページ遷移なしに HTTP でサーバーとデータのやり取りが可能 (Ajax) 描画方法が豊かになったので いろいろな UI 部品が簡単に使用可能 ひとつの Web ページのみでアプリケーションの全ての画面を実現 Web アプリケーションとネイティブアプリケーションのいいとこ取り 参考文献 :https://arxiv.org/ftp/cs/papers/0610/0610094.pdf
SPA の例 ブラウザ上で Excel が動いていることに注意 https://blogs.office.com/2014/04/14/more-office-online-commenting-printing-tell-me-and-more/
以降 この講義では サーブレット JSP Beans による MVC モデルを元に説明 Java だけで話を閉じるために SPA では JavaScript の活用が不可欠
Web アプリケーションの環境構築
Web アプリケーションの実行環境例 Apache Tomcat Web ブラウザ HTTP Web サーバー Web アプリケーションサーバー 接続には専用のモジュールが必要
Web アプリケーションの実行環境 Web サーバー Apache (Apache Software foundation) IIS (Microsoft) IHS (IBM) Web アプリケーションサーバー Tomcat (Jakarta Apache Project) WebSphere Application Server (IBM) など
Apache の入手 http://httpd.apache.org/docs/current/ platform/windows.html#down のリンクからダウンロード
Apache のインストール インストーラを実行 ( デフォルトでよい ) ネットワークドメイン サーバー名 サービスとして実行
正しくインストールできるとこの画面が見れる ブラウザで http://localhost/ にアクセス
Tomcat の入手 http://ring.shibaura-it.ac.jp/archives/net/ apache/dist/tomcat/tomcat-9/v9.0.10/bin/ からダウンロード
環境変数 JAVA_HOME を設定 マイコンピュータ を右クリックし プロパティ 詳細設定 タブ 環境変数 ボタンを押す システム環境変数 の 新規ボタン を押して 環境変数 JAVA_HOME に jdk のインストールディレクトリを設定する
Tomcat のインストール (1) 基本的にデフォルトで OK Service Start Menu Items Documentation Examples にチェック
Tomcat のインストール (2) Tomcat の使用ポートは 8080 管理パスワードをつけておく
Tomcat のインストール (2) JRE(Java Runtime 環境 ) のインストールディレクトリを指定
成功すると http://localhost:8080/ で以下の画面が表示される
コネクタ (mod_jk) mod_jkというモジュールを使ってwebサーバーとwebアプリケーションサーバーを連携させる Web サーバー 接続用の専用モジュール = コネクタ Web アプリケーションサーバー mod_jk2 や webapp
mod_jk の入手 http://ring.shibaura-it.ac.jp/archives/net/ apache/dist/tomcat/tomcat-connectors/jk /binaries/win32/jk-1.2.15/ から mod_jk-apache-2.0.55.so をダウンロード
mod_jk の導入 名前を mod_jk.so に変更し次のディレクトリにコピー C: Program Files Apache Group Apache2 modules
mod_jk が使えるように設定 Web アプリケーションのログ取得用ディレクトリを作成 C: logs mod_jk の設定ファイルを用意 (workers.properties) C: Program Files Apache Group Apache2 conf の直下に置く ( 内容は次のみ ) worker.list=worker1 worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009 C: Program Files Apache Group Apache2 conf にある httpd.conf を次ページのように編集
# # httpd.confの最後に追加 # ################################## # # mod_jkの設定 # ################################## # mod_jkモジュールをロード LoadModule jk_module modules/mod_jk.so # mod_jk の設定ファイル (workers.properties) の場所 JkWorkersFile "C:/Program Files/Apache Group/Apache2/conf/workers.properties" # ログファイルの場所 JkLogFile "C:/logs/mod_jk.log" # ログ取得レベル JkLogLevel info # # URL と Web アプリケーションの対応付け # ## 自分で作ったプログラムを入れる場所 JkMount /webapps/* worker1 ## サンプル (JSP) JkMount /jsp-examples/* worker1 ## サンプル ( サーブレット ) JkMount /servlets-examples/* worker1
動作確認 ( サンプルプログラムを動 かしてみる )
import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { PrintWriter out = response.getwriter(); out.println("<html><head>"); out.println("<title>hello world</title></head>"); out.println("<body><h1> Hello world! </h1>"); out.println("</body>"); out.println("</html>"); } }
実行結果
参考 URL http://programnet.hp.infoseek.co.jp/jsp &servlet/tomcat.html http://www.hellohiro.com/servletwebxm l.htm http://www.castle.flnet.org/pw/?java%2 FTomcat5.5%2Fmod_jk