Webとデータモデリング Java によるサーバサイドプログラミング 北川博之, 森嶋厚行, 天笠俊之 1 Java Server Pages (JSP) の利用 2 Web とデータモデリング 1
サーブレットのコード例 public class HelloWorld extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException{ } } response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<html>"); out.println("<head>"); out.println("<title>hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>hello World!</h1>"); out.println("</body>"); out.println("</html>"); 3 サーブレットと JSP サーブレット 全てのコードを Java で記述 HTML は文字列として埋め込む テキスト (Java ソース ) からクラスファイルを生成 JSP コンパイルが必要 HTML ページの中に Java コードを埋め込み プログラム処理が必要な部分に集中してコードを記述 HTML 出力がメインの場合に有利 HTMLソースからJavaソースを生成 コンパイルはシステムが自動的に実行 4 Web とデータモデリング 2
JSP のコード例 <%@ page contenttype="text/html;charset=shift_jis" %> <html> <head> <title>hello World!</title> </head> <body> <h1>hello World!</h1> <% out.println(new java.util.date()); %> 5 実行までの流れ コンテキストファイルの作成 apache tomcat/conf/context.xml JSP ページの作成 HTMLと同様 拡張子は.jsp アプリケーションの実行 ブラウザでアクセス ポイント コンパイル不要 web.xml の設定も不要 6 Web とデータモデリング 3
JSP からサーブレットへの変換 処理手順 クライアントからの要求 JSP からサーブレットへの変換 サーブレットのコンパイル サーブレット実行 ポイント コンパイルは初回のみ 初回実行時はやや時間がかかる コンパイルされたファイルの場所 $HOME/apache tomcat/work/catalina/localhost/ 7 ディレクティブ 構文 <%@ name attr1= val1 attr2= val2"... %> 種類 page include taglib 8 Web とデータモデリング 4
page ディレクティブ <%@ page [ language="java" ] [ extends="package.class" ] [ import="{package.class package.*},..." ] [ session="true false" ] [ buffer="none 8kb sizekb" ] [ autoflush="true false" ] [ isthreadsafe="true false" ] [ info="text" ] [ errorpage="relativeurl" ] [ contenttype="mimetype [ ; charset=characterset ]" "text/html ; charset=iso 8859 1" ] [ iserrorpage="true false" ] [ pageencoding="characterset ISO 8859 1" ] [ iselignored="true false"] %> 9 include ディレクティブ 構文 <%@ include file="relativeurl" %> 意味 指定された場所に HTML や JSP を読み込む. ポイント 相対パスのルートは, コンテキストのルート 10 Web とデータモデリング 5
taglib ディレクティブ 構文 <%@ taglib {uri="uri" tagdir="/web INF/tags[/subdir]+"} prefix="tagprefix" %> 意味 頻繁に使われる処理をまとめてタグとして登録 タグを集めたものがタグライブラリ 標準タグライブラリ カスタムタグライブラリ 11 スクリプティング スクリプトレット <% Javaのコード %> 式の評価結果を出力 <%= 変数名など %> out.print() に変換される 記述例 <%= " こんにちは " %> <%= "sum = " + sum %> <%= Integer.parseInt(8) %> 12 Web とデータモデリング 6
スクリプティング 変数の宣言 スクリプトレットで宣言される変数はローカル変数 呼び出しごとに初期化される Tomcatが実行されている間有効な変数を宣言したい <%! %> の利用 <%! int count = 0; %> <%! %> を利用して, メソッドも宣言できる 13 14 Web とデータモデリング 7
暗黙オブジェクト 15 暗黙オブジェクト宣言しなくても使えるオブジェクト オブジェクト 実装クラス 概要 コンテナ情報 ユーザー間での共 application javax.servlet.servletcontext 有情報を管理 web.xmlで定義した初期化パラ config javax.servlet.servletconfig メーターにアクセス out javax.servlet.jsp.jspwriter クライアントにデータを返却 exception java.lang.throwable ページ内の例外情報を管理 page javax.servlet.jsp.httpjsppage JSPページそのものを表現 pagecontext request response 16 javax.servlet.jsp.pagecontext javax.servlet.http.http.servle trequest javax.servlet.http.http.servle tresponse JSPページで利用可能な各種の暗黙オブジェクトやスコープ属性にアクセスする手段を提供 リクエストメッセージを取得 ステータスコードやメッセージヘッダのデータを設定 session javax.servlet.http.httpsession 各ユーザーのセッションを管理 Web とデータモデリング 8
out オブジェクト クライアントに対してコンテンツを出力 バッファ処理の制御 バッファサイズの指定 @pageディレクティブ buffer 属性 バッファサイズを超えたときの振る舞い @pageディレクティブ autoflush 属性 17 out オブジェクト主要メソッド メソッド 概要 clear() バッファのデータをクリア ( 出力済み バッファ処理が無効の場合はエラー ) clearbuffer() バッファのデータをクリア ( バッファの内容が出力済みでも使用可 ) close() 出力を終了 flush() バッファの内容を強制的に出力 getbuffersize() 現在確保されているバッファのサイズ ( バイト単位 ) getremaining() 未使用バッファのサイズ ( バイト単位 ) isautoflush() newline() print(str) println(str) 18 true の場合 出力サイズがバッファを超えたタイミングで自動出力 (falseの場合はエラー) 改行文字を出力 (Windows 系 OS では n UNIX 系 OS では n r ) 文字列 str を出力 文字列 str を末尾に改行付きで出力 Web とデータモデリング 9
request オブジェクト クライアントからのリクエスト情報を受け取る リクエスト情報 フォームデータ ヘッダ情報 クッキー 19 request オブジェクト主要メソッド メソッド getattribute() getauthtype() getcontentlength() getcontextpath() getlocale() getmethod() getpathinfo() getremoteaddr() getremoteuser() getservletpath() isrequestedsessionidfromcookie() isuserinrole(role) removeattribute 20 setattribute 概要リクエスト属性を取得認証の種類を取得データ本体のバイト長を取得コンテキストパスを取得ロケールを取得 HTTPメソッドの種類を取得拡張パス情報を取得クライアントのIPアドレスを取得ログインユーザー名を取得サーブレットパスを取得セッションIDをクッキー経由で授受しているかカレントユーザーが権限 roleを持っているかリクエスト属性を削除リクエスト属性を設定 Web とデータモデリング 10
Cookie クラス クッキーデータの表現, 制御 生成方法 Cookie 変数 = new Cookie( クッキー名, クッキー値 ); 21 Cookie クラス主要メソッド メソッド 概要 getcomment()/setcomment(str) コメントの取得 / 設定 getdomain()/setdomain(str) 対象ドメインの取得 / 設定 getmaxage()/setmaxage(int) 有効期限の取得 / 設定 ( 秒 ) getname() クッキー名の取得 getpath()/setpath(str) 対象パスの取得 / 設定 getsecure()/setsecure(bln) SSL 通信要否の取得 / 設定 getvalue()/setvalue(str) クッキー値の取得 / 設定 getversion()/setversion(int) バージョン値の取得 / 設定 22 Web とデータモデリング 11
session オブジェクト 画面間の共有データを管理 セッション あるユーザがあるサイトにアクセスしてから立ち去るまで ページ間で共有すべき情報を管理 Perl+CGI 時代は, データベースかクッキーを利用 注意 @pageディレクティブのsession 属性がfalseのときは利用できない セッションは永続的に保持されるわけではない 23 session オブジェクト主要メソッド メソッド getattributenames() getcreationtime() getid() getlastaccessedtime() getmaxinactiveinterval() invalidate() isnew() removeattribute(name) setmaxinactiveinterval(interval) 概要すべてのセッション属性名を取得セッションの生成時刻を取得セッションを一意に識別するIDを取得セッションへの最終アクセス時刻を取得セッションのタイムアウト時間を取得セッションを破棄新しく生成されたセッションかどうか指定されたセッション属性 (name) を削除セッションタイムアウトをinterval 秒に設定 24 Web とデータモデリング 12