Webとデータモデリング
Javaによるサ
バサイドプログラミング
Javaによるサーバサイドプログラミング
北川博之,森嶋厚行,天笠俊之
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("<body>"); out.println("<h1>Hello World!</h1>"); out.println("</body>"); out.println("</html>"); } } 3サーブレットとJSP
`サーブレット
`全てのコードをJavaで記述
`HTMLは文字列として埋め込む
`HTMLは文字列として埋め込む
`テキスト(Javaソース)からクラスファイルを生成
`コンパイルが必要
`JSP
`HTMLページの中にJavaコードを埋め込み
`プログラム処理が必要な部分に集中してコードを記述
`HTML出力がメインの場合に有利
`HTMLソースからJavaソースを生成
`コンパイルはシステムが自動的に実行
JSPのコード例
<%@ page contentType="text/html;charset=Shift_JIS" %>
<html>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
<%
i
l (
j
il
())
out.println(new java.util.Date());
%>
5実行までの流れ
`コンテキストファイルの作成
`apache‐tomcat/conf/context.xml
JSPペ
ジの作成
`JSPページの作成
`HTMLと同様
`拡張子は .jsp
`アプリケーションの実行
`ブラウザでアクセス
`ポイント
`コンパイル不要
`web.xmlの設定も不要
JSPからサーブレットへの変換
`処理手順
`クライアントからの要求
`JSPからサ
ブレットへの変換
`JSPからサーブレットへの変換
`サーブレットのコンパイル
`サーブレット実行
`ポイント
`コンパイルは初回のみ
7初回
`初回実行時はやや時間がかかる
`コンパイルされたファイルの場所
`$HOME/apache‐tomcat/work/Catalina/localhost/
ディレクティブ
`構文
`<%@ name attr1=“val1” attr2=“val2" ... %>
種類
`種類
`page
`include
`taglib
pageディレクティブ
<%@ page
[ language="java" ]
[ extends="package.class" ]
[ i
t "{
k
l
|
k
*}
" ]
[ 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 ]" |
[
yp
yp
[ ;
]
|
"text/html ; charset=ISO‐8859‐1" ]
[ isErrorPage="true|false" ]
[ pageEncoding="characterSet | ISO‐8859‐1" ]
[ isELIgnored="true|false"]
%>
9includeディレクティブ
`構文
`<%@ include file="relativeURL" %>
意味
`意味
`指定された場所にHTMLやJSPを読み込む.
`ポイント
`相対パスのルートは,コンテキストのルート
taglibディレクティブ
`
構文
`
<%@ taglib {uri="URI" | tagdir="/WEB‐
INF/tags[/subdir]+"} prefix="tagPrefix" %>
INF/tags[/subdir]+ } prefix= tagPrefix %>
`
意味
`頻繁に使われる処理をまとめてタグとして登録
`タグを集めたものがタグライブラリ
`標準タグライブラリ
`カスタムタグライブラリ
11スクリプティング
`スクリプトレット
<%
Javaのコード
`式の評価結果を出力
<%= 変数名など %>
`out.print()に変換される
`記述例
<%= "こんにちは" %>
%>
<%= こんにちは %>
<%= "sum = " + sum %>
<%= Integer.parseInt(8) %>
スクリプティング
`変数の宣言
`スクリプトレットで宣言される変数はローカル変数
`呼び出しごとに初期化される
`呼び出しごとに初期化される
`Tomcatが実行されている間有効な変数を宣言したい
`<%!
%> の利用
`<%!
%> を利用して メソッドも宣言できる
<%!
int count = 0;
%>
13 `<%!
%> を利用して,メソッドも宣言できる
暗黙オブジェクト
15暗黙オブジェクト
宣言しなくても使えるオブジェクト
オブジェクト 実装クラス 概要 application javax.servlet.ServletContext コンテナ情報・ユーザー間での共有情報を管理config javax.servlet.ServletConfig web.xmlで定義した初期化パラ
メーターにアクセス out javax.servlet.jsp.JspWriter クライアントにデータを返却 exception java.lang.Throwable ページ内の例外情報を管理 page javax.servlet.jsp.HttpJspPage JSPページそのものを表現 pageContext javax.servlet.jsp.PageContext JSPページで利用可能な各種の暗 黙オブジェクトやスコープ属性にア クセスする手段を提供 クセスする手段を提供
request javax.servlet.http.Http.ServletRequest リクエストメッセージを取得
response javax.servlet.http.Http.ServletResponse ステータスコードやメッセージヘッダのデータを設定 session javax.servlet.http.HttpSession 各ユーザーのセッションを管理
outオブジェクト
`クライアントに対してコンテンツを出力
`バッファ処理の制御
バ フ サイズの指定
`バッファサイズの指定
`@pageディレクティブ buffer属性
`バッファサイズを超えたときの振る舞い
`@pageディレクティブ autoFlush属性
17outオブジェクト
主要メソッド
メソッド 概要 clear() バッファのデータをクリア(出力済み、バッファ処理が無効の場合はエラー) clearBuffer() バッファのデータをクリア(バッファの内容が出力済みでも使用可) close() 出力を終了 flush() バッファの内容を強制的に出力 getBufferSize() 現在確保されているバッファのサイズ(バイト単位) getRemaining() 未使用バッファのサイズ(バイト単位) trueの場合 出力サイズがバッファを超えたタイミングで自 isAutoFlush() trueの場合、出力サイズがバッファを超えたタイミングで自 動出力(falseの場合はエラー) newLine() 改行文字を出力(Windows系OSでは「¥n」、UNIX系OS では「¥n¥r」) print(str) 文字列strを出力requestオブジェクト
`クライアントからのリクエスト情報を受け取る
`リクエスト情報
フ
ムデ タ
`フォームデータ
`ヘッダ情報
`クッキー
19requestオブジェクト
主要メソッド
メソッド 概要 getAttribute() リクエスト属性を取得 getAuthType() 認証の種類を取得 getContentLength() データ本体のバイト長を取得 getContextPath() コンテキストパスを取得 getLocale() ロケールを取得 getMethod() HTTPメソッドの種類を取得 getPathInfo() 拡張パス情報を取得 getRemoteAddr() クライアントのIPアドレスを取得 getRemoteUser() ログインユーザー名を取得 getServletPath() サーブレットパスを取得 isRequestedSessionIdFromCookie() セッションIDをクッキー経由で授受しているか isUserInRole(role) カレントユーザーが権限roleを持っているか removeAttribute リクエスト属性を削除Cookieクラス
`
クッキーデータの表現,制御
`生成方法
C
ki 変数
C
ki (ク キ
名 ク キ 値)
`
Cookie 変数 = new Cookie(クッキー名, クッキー値);
21