validation.xml(抜粋)
□骨格になる部分
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//
DTD Commons Validator Rules Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
<form-validation>
<formset>
<form name="アクションフォームBeansの論理名">
<!--検証内容の定義-->
</form>
<!--<form>要素を繰り返し記述-->
</formset>
</form-validation>
□個々のフィールドに対する記述
<field property="title" depends="required,maxlength">
<arg0 key="タイトル" resource="false" /> <!--keyはエラー時に表示される文字列-->
<arg1 name="maxlength" key="${var:maxlength}" resource="false" />
<var>
<var-name>maxlength</var-name>
<var-value>100</var-value>
</var>
</field>
※key属性には「パラメータ値そのもの」か「プロパティファイルのキー名」を指定する。
ただし、プロパティファイルを引用する場合は、resource属性値を"true"に設定する。
また、${var:XXXX}のようにすると、var要素で指定した編数値を引用することも出来る。
例)
<arg0 name="maxlength" key="100" resource="false" />
<arg1 name="maxlength" key="maxlength.max" resource="true" />
<arg2 name="maxlength" key="${var:maxlength}" resource="false" />
<var-name>maxlength</var-name>
<var-value>20</var-value>
■Validatorを利用する場合の基本的な設定
1.継承をValidatorFormに変更する。
2.Validatorルールをvalidation.xmlに記述する。Validator自体の動作はvalidator-rules.xmlに定義されている。
3.メッセージ・リソースファイルに表示するエラーメッセージを記述する。
4.struts-config.xmlにValidator関連の設定をする。
★メモです。すいません。。。
Eclipseにプロジェクト追加
・Tomcatプロジェクト
・Strutsサポート追加
・Strutsのライブラリ追加
・カスタムタグのTLDファイルを追加
・struts-config.xmlを生成
・MessageResources.propertiesを生成
・web.xmlを生成
[次へ]
・Validatorプラグインを使用
・Tilesプラグインを使用(再利用可能な部品を組み合わせたようなHTMLの作成を支援する機能)
=================================~
package=グループにまとめる
・Javaが提供しているクラスと簡単に区別がつく。
・クラスの分類が出来る。
?利用スコープを制御するもの
☆分類方法(下記2パターンが主)
1.機能ごとに分類する ○
機能ごとのパッケージ化は再利用するのに有利になる。
※ただし、パッケージへのインターフェイスをしっかり設計する必要がある
2.利用する技術によって分類する △
EJBをすべて1つのパッケージに入れたり、JSPから利用するクラスを1つにまとめたり…
※また、パッケージは階層化することが出来る。
・まずutilを設置 …全てPublicで定義
・actionとformは1箇所にあるほうが理解しやすい
→actionを設置
3.開発チームの体制とリンクしてパッケージを作成するのも効率的
パッケージごとに責任範囲を明確にすることが可能。
※パッケージ間の依存関係をできるだけシンプルにしておく。
※パッケージが相互利用されないように設計する。
JSP&サーブレットでは、複数のページ間で情報を維持するために、2つの方法を提供している。
■Cookie情報を取得する。
==============================================
【サンプル】リスト1で入力したメールアドレスをリスト2でCookieとして保存する。
[リスト1]cookie.jsp
<form method="POST" action="cookie_rec.jsp">
E-Mailアドレス:
<input type="text" name="email" size="40" maxlength="100"
value="${cookie['email'].value}" /> -(3)
<input type="submit" value="送信" />
</form>
[リスト2]cookie_rec.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="res" uri="http://jakarta.apache.org/taglibs/response-1.0" %>
<res:addCookie name="email"> -(1)
<res:value>${param['email']}</res:value>
<res:maxAge>15552000</res:maxAge>
</res:addCookie>
<c:redirect url="cookie.jsp" /> -(2)
*2度目にcookie.jspにアクセスすると、1度目に入力したアドレスが表示される。
==============================================
Cookieを保存するには、Responseタグライブラリに含まれる<res:addCookie>タグを
利用する。(リスト2の(1)) …ResponseタグライブラリはJakarta Taglibsによるもの
<res:addCookie>要素は、name属性(Cookie名)と<res:value>要素(Cookie値)、<res:maxAge>
要素(有効期限)(秒単位)といった設定に基づいて、クライアントにCookieを送信する。
■Cookieの値を出力する。
クライアントに保存されたCookieの値にアクセスするには、暗黙オブジェクトCookieの役割。(リスト1の(3))
ただし、&{cookie['クッキー名']}で返されるのはCookieオブジェクトな為、Cookie値にアクセスする
には${cookie['email'].value}のように、valueプロパティを介する必要がある。
■セッションによる情報の引き継ぎ
==============================================
【サンプル】リスト1で保存されたセッション情報をリスト2から参照する。
[リスト1]session1.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
…中略…
<c:set var="sample" value="セッション情報" scope="session" /> -(1)
セッション情報を記録しました。
</body>
[リスト2]session2.jsp
<body>
セッション"sample" => ${sessionScope['sample']} -(2)
</body>
[リスト3]web.xml
<session-config>
<session-timeout>10</session-timeout>
</session-config>
==============================================
セッション情報をセットするのは<c:set>要素の役割(リスト1の(1))
セッション情報を設定するにはscope属性を明示する必要がある。
※セッション有効期限はweb.xmlの要素で指定する。(リスト3)
※セッション情報を破棄したい場合はJakartaTaglibsのSession
タグライブラリを使用する。
===================================
■セッションの開始・継続・終了
・実際の実装方法
サーブレットにおけるセッション管理を実現するにはHttpSessionを使用する。
セッションの開始・継続にはHttpServletRequestのgetSessionメソッドを実行する。
※開始時は引数にtrueを指定する。継続時はfalseを指定する。
セッションを終了する場合はHttpSessionのinvalidateメソッドを実行する。
セッションに値を格納する場合はHttpSessionのsetAttributeメソッドを実行する。
UserInfo userInfo = new UserInfo(...);
session.setAttribute("USER_INFO", userInfo);
セッションに格納された値を取得する場合はgetAttributeメソッドを実行する。
UserInfo userInfo = (UserInfo) session.getAttribute("USER_INFO");
セッションに格納された値を削除する場合はremoveAttributeメソッドを実行する。
session.removeAttribute("USER_INFO");
※getSessionメソッドの戻り値はHttpSessionになる。このメソッドは引数に関わらず
セッション情報が存在するかチェックする。存在している場合は、そのセッションを返す。
ただし、存在しない場合は引数により異なる
trueの場合→セッションを新規に作成して返す。
falseの場合→nullを返す。
参考サイト
http://www.atmarkit.co.jp/fjava/javafaq/session/session04.html
■Java.util.Date 日時を表現するクラス
1970年1月1日 00:00:00 GMT(エポック)からのミリ秒数を表すlong値
⇒日付と時間フィールドの間の変換には、Calendarクラス
⇒日付文字列のフォーマットと構文解析には、DateFormatクラス
・現在時刻を取得
Date current = new Date();
curent.toString(); →Tue Mar 20 13:57:12 JST 2007
Date after = new Date(System.currentTimeMillis()); //long型の引数
■Java.util.Calendar
・現在時刻を取得(DateFormatクラスと一緒に使用する)
Calendar current = Calendar.getInstance();
current.toString(); →java.util.GregorianCalendar[time=117436682144…
■型変換
・DateからCalendarに変換
Calendar current = Calendar.getInstance();
current.setTime(new Date());
・CalendarからDateに変換
Date current = Calendar.getInstance().getTime();
・Date→「エポックからのミリ秒」変換
long current = new Date().getTime(); →1174368381739
・「エポックからのミリ秒」→Calendar変換
Calendar current = Calendar.getInstance();
current.setTimeInMillis(System.currentTimeMillis()); //long型の引数
・Calendar→「エポックからのミリ秒」変換
long current = Calendar.getInstance().getTimeInMillis();
■java.util.SimpleDateFormat 日時型を文字列に変換
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm;ss");
sdf.format(new Date());
sdf.format(Calendar.getInstance().getTime());
■java.sql.Date(java.util.Dateとの違い)
//
GregorianCalendar gc = new GregorianCalendar(2005,0,1);
Date date = gc.getTime();
DateFormat df = DateFormat.getInstance();
String strDate1 = df.format(date);
System.out.println(strDate1); //→05/01/01 0:00
Date date2 = new Date();
gc.setTime(date2);
gc.add(Calendar.YEAR, 3);
System.out.println(gc.get(Calendar.YEAR) + "/" + (gc.get(Calendar.MONTH) + 1)
+ "/" + gc.get(Calendar.DATE)); //→2011/11/4
//java.sql.Dateはパラメータにlong値を必要とする
java.sql.Date date3 = new java.sql.Date(gc.getTimeInMillis());
System.out.println(date3); //→2011-11-04
GregorianCalendar gc2 = new GregorianCalendar();
gc2.setTimeInMillis(date3.getTime());
gc2.add(Calendar.YEAR, -2);
System.out.println(gc2.get(Calendar.YEAR) + "/" + (gc2.get(Calendar.MONTH) + 1)
+ "/" + gc2.get(Calendar.DATE)); //→2009/11/4
・FileInputStream(FileOutputStream)
//生のバイト(イメージデータなど)のストリームを読み書き ⇔ 文字ストリーム FileReader
・FileReader(FileWriter)
//文字単位で入出力を行う。
・InputStreamReader(OutputStreamWriter)
//バイトストリームから文字ストリームへの橋渡しをする。指定されたcharsetを使用して文字に変換する。
変換効率を最高にするにはBufferedReaderの内部にInputStreamReaderをラップする事を考慮する必要がある。
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
・BufferedReader(BufferedWriter)
//文字、配列、行をバッファリングすることにより、文字型入力ストリームからテキストを効率よく読み込める。
・File(Java.io.File)
//ファイルおよびディレクトリのパス名の抽象表現
04 | 2025/05 | 06 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |