Microsoft Word - 3部.doc

Size: px
Start display at page:

Download "Microsoft Word - 3部.doc"

Transcription

1 目 次 課題の概要... 4 図 1 掲示板画面の例 ( 通常表示 )... 4 図 2 掲示板画面の例 ( 追加 )... 5 図 3 掲示板画面の例 ( 検索 )... 5 図 4 掲示板画面の例 ( 一覧表示 ) データの保存... 7 リスト1 XML のスキーマ条件... 7 図 5 BBS.xml のツリー構造... 7 リスト2 BBS.xml 課題の開発手順... 9 図 6 課題の開発手順 スキーマ定義の作成 リスト3 BBS.xsd XSLT の作成 リスト4 通常表示の HTML リスト5 BBS.xsl プログラムの作成 図 7 プログラムの全体の流れ プログラムの詳細説明 クラスのインポート HTTP メソッドの処理 GET リクエストの処理 POST リクエストの処理 参考掲示板のパラメータ...25 参考掲示板の処理モード...26 リスト6 追加フォームの HTML リスト7 更新フォームの HTML リスト8 検索フォームの HTML メッセージ表示 SAX イベントハンドラ 検索結果表示イベントハンドラ...42 リスト9 検索結果の HTML 一覧表示イベントハンドラ

2 8. プログラムのコンパイルと実行 リスト10 クラス定義とプログラムのコンパイル 図 8 プログラム実行のためのディレクトリ構成 リスト11 web.xml 図 9 Tomcat Manager の設定 コーディングリスト リスト12 BBSServlet.java 付録環境設定手順

3 未作成 システム説明 課題説明 - 3 -

4 1. 課題の概要 好きな楽曲についての学生アンケートの掲示板を XML で作成します 掲示板プログラムとして 以下の処理を行うもとのします 掲示板としての通常表示 メッセージの新規追加 メッセージの更新 削除 キーワードによる検索 メンテナンスなどのための一覧表示 次の図は 掲示板の各処理をブラウザで表示したときのイメージです 図 1 掲示板画面の例 ( 通常表示 ) - 4 -

5 図 2 掲示板画面の例 ( 追加 ) 図 3 掲示板画面の例 ( 検索 ) - 5 -

6 図 4 掲示板画面の例 ( 一覧表示 ) - 6 -

7 2. データの保存 掲示板のデータは図 5 のツリー構造で保存します リスト1 XML のスキーマ条件 1. ルート要素名を BBS とする 2.1 件のメッセージを Message 要素に記録する 3. Message 要素の No 属性の値はメッセージの番号とし 正の整数とする 4. Message 要素の Delete 属性の値はメッセージの削除フラグとし 真偽値とする 5. 題名を Subject 要素に記録する 6. 名前を Name 要素に記録する 7. 投稿日を Contribution 要素に記録する 8. Contribution 要素の値は datetime 型 (YYYY-MM-DDThh:mm:ss) とする 9. コメントを Comment 要素に記録する この XML をツリー構造にすると図 4のようになります BBS 要素 Message 要素 No 属性 Delete 属性 Subject 要素 Name 要素 Contribution 要素 Comment 要素 図 5 BBS.xml のツリー構造 - 7 -

8 また実際に保存される XML ファイルは リスト 2 のような XML となります リスト 2 BBS.xml( 太字は入力および設定データ ) <BBS xmlns="urn:educationproject:bbs"> <Message No="1"> <Subject> 題名 1</Subject> <Name> 山田太郎 </Name> <Contribution> T11:30: :00</Contribution> <Comment> コメント 1</Comment> </Message> <Message No="2"> <Subject> 題名 2</Subject> <Name> 鈴木一郎 </Name> <Contribution> T13:00: :00</Contribution> <Comment> コメント 2</Comment> </Message> </BBS> - 8 -

9 3. 課題の開発手順 第 2 部では JAXB DOM SAX XSLT についてプログラミングしました 第 3 部で は これらの API をうまく使い分け 掲示板プログラムを作成します プログラムは Web サーバ上で動作する Servlet とし Web サーバには Tomcat を使用します スキーマ定義の作成 XSLT の作成 掲示板スキーマ定義 (BBS.xsd) プログラムを作成 (Java プログラミング ) 通常表示 XSLT (BBS.xsl) プログラムの実行 (Tomcat による実行 ) 掲示板 XML ファイル (BBS.xml) 図 6 課題の開発手順 - 9 -

10 4. スキーマ定義の作成 スキーマ定義の作成 XSLT の作成 掲示板スキーマ定義 (BBS.xsd) プログラムを作成 (Java プログラミング ) 通常表示 XSLT (BBS.xsl) プログラムの実行 (Tomcat による実行 ) 掲示板 XML ファイル (BBS.xml) それでは 手順に従ってスキーマ定義 XSLT プログラムを作成していきます スキーマ定義は以下の手順で作成します 1XML 文書の宣言をします 2XML Schema のルート要素の宣言をします 名前空間は urn:educationproject:bbs とします 3ルート要素 (BBS) の定義をし 子要素として Message 要素を定義します Message 要素の出現回数は 0 回以上 上限無しとし その子要素の定義は別の場所を参照します 4 Message 要素の定義をし 子要素として Subject Name Contribution Comment 要素 No Delete 属性を定義します 全ての子要素は順番に出現するものとし 定義は別の場所を参照します No 属性は 0 以上の整数 (nonnegativeinteger) Delete 属性は論理型(boolean) とします 5 Subject Name Contribution Comment 要素をそれぞれ定義します Contribution 要素は日付(dateTime) それ以外の要素は文字列(string) とします 以上の手順でスキーマ定義を作成するとリスト 3 のようになります

11 リスト 3 BBS.xsd( 太字は任意設定値 ) <?xml version="1.0" encoding="shift_jis"?> <xs:schema xmlns:xs=" targetnamespace="urn:educationproject:bbs" xmlns="urn:educationproject:bbs"> <xs:element name="bbs"> <xs:complextype> <xs:sequence> <xs:element ref="message" minoccurs="0" maxoccurs="unbounded" /> </xs:sequence> </xs:complextype> </xs:element> <xs:element name="message"> <xs:complextype> <xs:sequence> <xs:element ref="subject" /> <xs:element ref="name" /> <xs:element ref="contribution" /> <xs:element ref="comment" /> </xs:sequence> <xs:attribute name="no" type="xs:nonnegativeinteger" /> <xs:attribute name="delete" type="xs:boolean" /> </xs:complextype> </xs:element> <xs:element name="subject" type="xs:string" /> <xs:element name="name" type="xs:string" /> <xs:element name="contribution" type="xs:datetime" /> <xs:element name="comment" type="xs:string" /> </xs:schema>

12 5.XSLT の作成 スキーマ定義の作成 XSLT の作成 掲示板スキーマ定義 (BBS.xsd) プログラムを作成 (Java プログラミング ) 通常表示 XSLT (BBS.xsl) プログラムの実行 (Tomcat による実行 ) 掲示板 XML ファイル (BBS.xml) 先ず 掲示板の通常表示に使用する XSLT スタイルシートを作成します ここで出力す る HTML は リスト 4 のようにします リスト 4 通常表示の HTML( 太字は XML データ ) 1: <html> 2: <head> 3: <title> 掲示板 </title> 4: </head> 5: <body> 6: <div align='center'><h3> 掲示板 </h3></div> 7: <div align='center'>[ <a href='/bbs/bbs?mode=normal'> 通常表示 </a> ] 8: [ <a href='/bbs/bbs?mode=regist_form'> 追加 </a> ] 9: [ <a href='/bbs/bbs?mode=search_form'> 検索 </a> ] 10: [ <a href='/bbs/bbs?mode=list'> 一覧表示 </a> ]</a></div> 11: <hr> 12: [2] <b xmlns:bbs="urn:educationproject:bbs"> 笑えました </b> 13: 投稿者 : 鈴木一郎 14: 投稿日 : :41:05 15: [ <a xmlns:bbs="urn:educationproject:bbs" 16: href="/bbs/bbs?mode=modify_form&no=2"> 更新 </a> ] 17: [ <a xmlns:bbs="urn:educationproject:bbs" 18: href="/bbs/bbs?mode=delete&no=2"> 削除 </a> ] 19: <br xmlns:bbs="urn:educationproject:bbs"> 20: <br xmlns:bbs="urn:educationproject:bbs"> 21: <div xmlns:bbs="urn:educationproject:bbs" 22: style="margin-left:40"> 聞いてみました <br> 23: 本当に面白かったです </div> 24: <hr xmlns:bbs="urn:educationproject:bbs"> 25: [1] <b xmlns:bbs="urn:educationproject:bbs"> 面白いです </b> 26: 投稿者 : 山田太郎 27: 投稿日 : :28:

13 28: [ <a xmlns:bbs="urn:educationproject:bbs" 29: href="/bbs/bbs?mode=modify_form&no=1"> 更新 </a> ] 30: [ <a xmlns:bbs="urn:educationproject:bbs" 31: href="/bbs/bbs?mode=delete&no=1"> 削除 </a> ] 32: <br xmlns:bbs="urn:educationproject:bbs"> 33: <br xmlns:bbs="urn:educationproject:bbs"> 34: <div xmlns:bbs="urn:educationproject:bbs" 35: style="margin-left:40"> タイトル 1 はとても面白かったです <br> 36: ぜひ聞いてみてください </div> 37: <hr xmlns:bbs="urn:educationproject:bbs"> 38: </body> 39: </html> 基本的な作り方は 第 2 部の課題 3と同様です 今回は以下のような順番で作成します 1 掲示板のヘッダ部分とフッタ部分は プログラムで表示しますので 実際には12 行目から37 行目を対象とします 2メッセージ番号 題名 投稿者 投稿日を表示します 題名は太字で表示し 投稿日の日付と時刻の間には 空白を表示します 3 更新 と 削除 のリンクを作成し それぞれプログラムを呼び出します 4コメントを表示します コメントの左にはマージンを設定し コメント中の改行は <br> タグに変換します 5メッセージとメッセージの区切り線 (<hr> タグ ) を表示します では ポイントとなる部分について順次解説します 7: <xsl:template match="/"> 8: <xsl:apply-templates select="bbs:bbs"/> 9: </xsl:template> ドキュメントルート / にマッチした場合の処理です ルート要素(BBS 要素 ) にマッチした場合の処理を呼び出します 11: <xsl:template match="bbs:bbs"> 12: <xsl:for-each select="bbs:message"> 13: <xsl:sort select="@no" order="descending"/> bbs:bbs 要素にマッチした場合の処理です for-each で bbs:message 要素をループ処理します sort はソート処理です select で指定された No 属性でソートします order は昇順(ascending) 又は降順 (descending) を指定します デフォルトでは昇順になります ここでは メッセージを新しいものから順番に表示するために降順にします 14: <xsl:if test="not(@delete)">

14 15: [<xsl:value-of 16: <b><xsl:value-of select="bbs:subject"/></b> 17: 投稿者 :<xsl:value-of select="bbs:name"/> 18: 投稿日 : 19: <xsl:value-of select="substring(bbs:contribution, 1, 10)"/> 20: <xsl:value-of select="substring(bbs:contribution, 12, 8)"/> Delete 属性が真で無い( 偽 ) の場合の処理です [] の中に No 属性( メッセージ番号 ) を表示します 次に Subject 要素( 題名 ) を太字で表示します その後 Name 要素( 投稿者 ) と Contribution 要素 ( 投稿日 ) を表示します Contribution 要素には T15:28: :00 などの値が保存されていますので 先頭の10 文字と 12 文字目から8 文字を取り出します 日付と時刻の間に空白を表示します 21: [ <xsl:element name="a"><xsl:attribute name="href"> 22: /bbs/bbs?mode=modify_form&no=<xsl:value-of select="@no"/> 23: </xsl:attribute> 更新 </xsl:element> ] 24: [ <xsl:element name="a"><xsl:attribute name="href"> 25: /bbs/bbs?mode=delete&no=<xsl:value-of select="@no"/> 26: </xsl:attribute> 削除 </xsl:element> ] 27: <br/><br/> element で 更新 のリンクを作成します ここで /bbs/bbs?mode=modify_form?no= メッセージ番号 をリンク先に指定します & は & を意味します 同様に 削除 のリンクを作成します /bbs/bbs?mode=delete?no= メッセージ番号 を指定します ここでは見やすくするために改行していますが attribute の開始タグと終了タグの間で改行すると 改行コードや空白がそのまま出力されてしまいますので 注意が必要です その後 <br/> で改行を2 行出力します 28: <div style="margin-left:40"> 29: <xsl:apply-templates select="bbs:comment"/> 30: </div> 31: <hr/> 32: </xsl:if> 33: </xsl:for-each> 34: </xsl:template> <div> タグを使って 左に 40 ポイントのマージンを指定し bbs:comment 要素にマッチした場合の処理を呼び出します その後 <hr/> で区切り線を表示します

15 36: <xsl:template match="bbs:comment" name="comment"> 37: <xsl:param name="text" select="."/> 38: <xsl:value-of select="substring-before($text, ' ')"/> 39: <xsl:choose> 40: <xsl:when test="contains($text, ' ')"> 41: <br/> 42: <xsl:call-template name="comment"> 43: <xsl:with-param name="text" 44: select="substring-after($text, ' ')"/> 45: </xsl:call-template> 46: </xsl:when> 47: <xsl:when test="string-length($text) > 0"> 48: <xsl:value-of select="$text"/> 49: </xsl:when> 50: </xsl:choose> 51: </xsl:template> bbs:comment 要素にマッチした場合の処理です ここでコメントの改行を <br> タグに変換します これは HTML 中に改行を出力しても改行が表示されずそのまま続けて表示されるためです name 属性が付いていますが これは この処理の中から再度呼び出す ( 再帰処理 ) のためです 以下のような処理になっています 1 param で bbs:comment 要素( コメント ) の内容を text 変数に代入します 2 substring-before($text, ' ') で ( 改行コード ) の前の文字を取り出します 改行コードが無い場合には空文字列となります 3 choose で分岐処理をします 4 when で text 変数の文字列中に改行コードがあるかどうかを判断し 改行コードがあった場合には with-param で改行コードの後の文字をパラメータに指定し call-template で 再度この template を呼び出します 5 when で text 変数の文字列の長さが0より大きい場合には text 変数の内容を表示します 完成した XSLT の例をリスト 5 に示します

16 リスト5 BBS.xsl( 太字は任意設定値 ) 1: <?xml version="1.0" encoding="shift_jis"?> 2: <xsl:stylesheet version="1.0" 3: xmlns:xsl=" 4: xmlns:bbs="urn:educationproject:bbs"> 5: <xsl:output method="html" indent="yes"/> 6: 7: <xsl:template match="/"> 8: <xsl:apply-templates select="bbs:bbs"/> 9: </xsl:template> 10: 11: <xsl:template match="bbs:bbs"> 12: <xsl:for-each select="bbs:message"> 13: <xsl:sort select="@no" order="descending"/> 14: <xsl:if test="not(@delete)"> 15: [<xsl:value-of select="@no"/>] 16: <b><xsl:value-of select="bbs:subject"/></b> 17: 投稿者 :<xsl:value-of select="bbs:name"/> 18: 投稿日 : 19: <xsl:value-of select="substring(bbs:contribution, 1, 10)"/> 20: <xsl:value-of select="substring(bbs:contribution, 12, 8)"/> 21: [ <xsl:element name="a"><xsl:attribute name="href"> 22: /bbs/bbs?mode=modify_form&no=<xsl:value-of select="@no"/> 23: </xsl:attribute> 更新 </xsl:element> ] 24: [ <xsl:element name="a"><xsl:attribute name="href"> 25: /bbs/bbs?mode=delete&no=<xsl:value-of select="@no"/> 26: </xsl:attribute> 削除 </xsl:element> ] 27: <br/><br/> 28: <div style="margin-left:40"> 29: <xsl:apply-templates select="bbs:comment"/> 30: </div> 31: <hr/> 32: </xsl:if> 33: </xsl:for-each> 34: </xsl:template> 35: 36: <xsl:template match="bbs:comment" name="comment"> 37: <xsl:param name="text" select="."/> 38: <xsl:value-of select="substring-before($text, ' ')"/> 39: <xsl:choose> 40: <xsl:when test="contains($text, ' ')"> 41: <br/> 42: <xsl:call-template name="comment"> 43: <xsl:with-param name="text" 44: select="substring-after($text, ' ')"/> 45: </xsl:call-template> 46: </xsl:when> 47: <xsl:when test="string-length($text) > 0"> 48: <xsl:value-of select="$text"/> 49: </xsl:when> 50: </xsl:choose> 51: </xsl:template>

17 52: 53: </xsl:stylesheet>

18 6. プログラムの作成 スキーマ定義の作成 XSLT の作成 掲示板スキーマ定義 (BBS.xsd) プログラムを作成 (Java プログラミング ) 通常表示 XSLT (BBS.xsl) プログラムの実行 (Tomcat による実行 ) 掲示板 XML ファイル (BBS.xml) プログラムの全体の流れは図 3 のようになります 7.1 クラスのインポート 7.2 HTTP メソッドの処理 GET リクエストの処理 POST リクエストの処理 メッセージ表示 7.3 SAX イベントハンドラ 検索結果表示イベントハンドラ 一覧表示イベントハンドラ 図 7 プログラムの全体の流れ

19 7. プログラムの詳細説明 ここからは Java による 掲示板プログラムの作成です それでは プログラムを順番に 作成していきます 7.1 クラスのインポート まず 必要なクラスをインポートします その後 メインプログラムで引数のチェック をして 入力 編集のそれぞれのモードの処理をします 1: import java.io.*; 2: import java.math.*; 3: import java.text.*; 4: import java.util.*; 5: import javax.servlet.*; 6: import javax.servlet.http.*; 7: import javax.xml.bind.jaxbcontext; 8: import javax.xml.bind.marshaller; 9: import javax.xml.bind.unmarshaller; 10: import javax.xml.bind.validator; 11: import javax.xml.parsers.*; 12: import javax.xml.transform.*; 13: import javax.xml.transform.dom.*; 14: import javax.xml.transform.stream.*; 15: import org.w3c.dom.*; 16: import org.xml.sax.*; 17: import org.xml.sax.helpers.*; Servlet を作成する場合 javax.servlet.* 以下 2 行をインポートします 20: import educationproject.bbs.*; スキーマコンパイラが生成したクラス定義をインポートします 22: public class BBSServlet extends HttpServlet { 23: 24: // XML ファイル名 25: final String XML_FILE = "C: java bbs BBS.xml"; 26: // XSLT スタイルシートファイル名 27: final String XSL_FILE = "C: java bbs BBS.xsl"; BBSServlet というクラス名でプログラムを作成します

20 プログラムで使用する XML と XSLT ファイル名を定義しておきます

21 7.2 HTTP メソッドの処理 Web サーバから HTTP の GET または POST メソッドが呼び出された場合の処理です ここがメインプログラムになります GET リクエストの処理 30: public void doget(httpservletrequest request, 31: HttpServletResponse response) 32: throws IOException, ServletException { 33: // POST リクエストの処理を呼び出す 34: dopost(request, response); 35: } Web サーバから GET リクエストが呼び出された場合の処理です 通常 GET リクエス トと POST リクエストでは処理を変える必要はありませんから POST リクエストの処 理を呼び出すだけの処理です

22 7.2.2 POST リクエストの処理 まず全体の主な構造を示します // 入力文字コードの指定等 1 // XML ファイルが無ければ作成 2 // ルート要素を作成するのに JAXB を使用する // リクエストパラメータを取得 3 // 共通ヘッダ 4 if (_mode.equals("normal")) { // 通常表示 5 // HTML 表示のメンテナンス性を考慮し XSLT を使用する } else if (_mode.equals("regist")) { // 追加 6 // 入力データを検証して XML で保存するため JAXB を使用する } else if (_mode.equals("modify")) { // 更新 7 // 更新及び出力に DOM を使用する } else if (_mode.equals("delete")) { // 削除 8 // 削除及び出力に DOM を使用する } else if (_mode.equals("search")) { // 検索 9 // XML を読み取り単純な HTML で出力するため高速な SAX を使用する } else if (_mode.equals("list")) { // 一覧表示 10 // XML を読み取り単純な HTML で出力するため高速な SAX を使用する } else if (_mode.equals("regist_form")) { // 追加フォームの表示 11 } else if (_mode.equals("modify_form")) { // 更新フォームの表示 12 // 入力データを初期表示するのに DOM を使用する } else if (_mode.equals("search_form")) { // 検索フォームの表示 13 }

23 // 共通フッタ 14 以降 プログラムの詳細説明です

24 1 入力文字エンコーディング方式の指定等 46: request.setcharacterencoding("shift_jis"); クライアントが Servlet へ要求したリクエストの文字エンコーディング方式を指定します 今回のプログラムは全てシフト JIS で作成するため シフト JIS を指定します 48: response.setcontenttype("text/html;charset=shift_jis"); Servlet がクライアントに返すレスポンスの文字エンコーディング方式を指定します 50: PrintWriter out = response.getwriter(); 文字データをクライアントに送り返すのに使用する PrintWriter オブジェクトを取得します 第 2 部の課題では結果の出力先を標準出力としていましたが Servlet プログラムの場合 標準出力 (System.out) の代わりにこの PrintWriter オブジェクトを使用します 2 XML ファイルが無ければ作成これ以降の処理ではファイルが存在するものとして処理するために XML ファイルが存在しない場合 JAXB を使用して XML ファイルを作成しておきます ファイルは最低限のルート要素のみ作成しておきます 53: File file = new File(XML_FILE); 54: if (!file.exists()) { 55: try { 56: // JAXBContext オブジェクトの作成 57: JAXBContext jc = 58: JAXBContext.newInstance("educationproject.bbs"); 59: // ObjectFactory オブジェクトの作成 60: ObjectFactory of = new ObjectFactory(); 61: // BBS 要素の作成 62: BBS bbs = of.createbbs(); 63: // ファイルへ書き出し 64: Marshaller m = jc.createmarshaller(); 65: m.setproperty(marshaller.jaxb_encoding, "Shift_JIS"); 66: m.setproperty(marshaller.jaxb_formatted_output, 67: Boolean.TRUE); 68: fos = new FileOutputStream(XML_FILE); 69: m.marshal(bbs, fos); 70: fos.close();

25 71: } catch (Exception e) { 72: // 例外処理 ( メッセージの出力 ) 73: OutputMessage(out, e.getmessage()); 74: return; 75: } 76: } JAXBContext オブジェクト ObjectFactory オブジェクトを生成して createbbs メソッドでルート要素 (BBS) を作成します ルート要素のみの作成ですから XML の検証はせずにファイルに書き出します 3 リクエストパラメータを取得 79: // 処理モード 80: String _mode = request.getparameter("mode"); 81: if (_mode == null) _mode = "normal"; 82: // メッセージ番号 83: String _no = request.getparameter("no"); 84: // 題名 85: String _subject = request.getparameter("subject"); 86: // 名前 87: String _name = request.getparameter("name"); 88: // コメント 89: String _comment = request.getparameter("comment"); 90: // 検索キーワード 91: String _keyword = request.getparameter("keyword"); クライアントからのリクエストパラメータを取得します request.getparameter は Servlet が呼び出された場合のパラメータを取得します 例えば というように呼び出された場合に request.getparameter("name1") で value1 が取得出来ます 今回 mode パラメータで処理モードを指定します 処理モードは以下の通りです mode パラメータが指定されなかった場合には通常表示とします 参考掲示板のパラメータ mode no subject name comment 処理モードメッセージ番号題名名前コメント

26 keyword 検索キーワード 参考掲示板の処理モード normal 通常表示 ( デフォルト ) regist modify delete search list regist_form modify_form search_form 追加更新削除検索一覧表示追加フォームの表示更新フォームの表示検索フォームの表示 no 以下は それぞれの処理で必要なパラメータです パラメータが指定されなかっ た場合には null 文字列になります 4 共通ヘッダ 94: out.println("<html>"); 95: out.println("<head>"); 96: out.println("<title> 掲示板 </title>"); 97: out.println("</head>"); 98: out.println("<body>"); 99: out.println("<div align='center'><h3> 掲示板 </h3></div>"); 100: out.println("<div align='center'>" 101: + "[ <a href='/bbs/bbs?mode=normal'> 通常表示 </a> ] " 102: + "[ <a href='/bbs/bbs?mode=regist_form'> 追加 </a> ] " 103: + "[ <a href='/bbs/bbs?mode=search_form'> 検索 </a> ] " 104: + "[ <a href='/bbs/bbs?mode=list'> 一覧表示 </a> ]</a></div>"); 105: out.println("<hr>"); クライアントに表示する HTML の全ての処理に共通なヘッダを出力します タイトル を表示し 通常表示 追加 検索 一覧表示 のリンクを表示して区切り線を表示し ます 5 通常表示 通常表示 (mode=normal) の処理です XSLT ファイルを使用して XML を表示します

27 107: if (_mode.equals("normal")) { 108: // 通常表示 109: try { 110: // TransformerFactory オブジェクトの作成 111: TransformerFactory tf = TransformerFactory.newInstance(); 112: // Transformer オブジェクトの作成 113: Transformer t = tf.newtransformer(new StreamSource(XSL_FILE)); 114: // 出力プロパティを指定 115: t.setoutputproperty("encoding", "Shift_JIS"); 116: // 書き出し 117: t.transform(new StreamSource(XML_FILE), 118: new StreamResult(out)); 119: } catch (Exception e) { 120: // 例外処理 ( メッセージの出力 ) 121: OutputMessage(out, e.getmessage()); 122: return; 123: } DOM を使用し XSLT と XML から HTML を作成し PrintWriter オブジェクトに出 力します 6 追加 メッセージの新規追加 (mode=regist) の処理です 最初にパラメータをチェックし JAXB を使用してメッセージを追加します その後 通常表示します 124: } else if (_mode.equals("regist")) { 125: // 追加 126: if (_subject == null _subject.length() == 0) { 127: OutputMessage(out, " 題名を入力してください "); 128: return; 129: } 130: if (_name == null _name.length() == 0) { 131: OutputMessage(out, " 名前を入力してください "); 132: return; 133: } 134: if (_comment == null _comment.length() == 0) { 135: OutputMessage(out, " コメントを入力してください "); 136: return; 137: } 138: try { 139: // JAXBContext オブジェクトの作成

28 140: JAXBContext jc = 141: JAXBContext.newInstance("educationproject.bbs"); 142: // ObjectFactory オブジェクトの作成 143: ObjectFactory of = new ObjectFactory(); 144: // Unmarshaller オブジェクトの取得 145: Unmarshaller unmarshaller = jc.createunmarshaller(); 146: unmarshaller.setvalidating(true); 147: // BBS 要素の取得 148: BBS bbs = (BBS)unmarshaller.unmarshal(file); 149: List list = bbs.getmessage(); 150: long no = 0; 151: if (list.size() > 0) { 152: Message message = (Message)list.get(list.size() - 1); 153: no = message.getno().longvalue(); 154: } 155: // Message 要素の作成 156: Message message = of.createmessage(); 157: // No 要素の設定 158: message.setno(biginteger.valueof(no + 1)); 159: // Subject 要素の設定 160: message.setsubject(_subject); 161: // Contribution 要素の設定 162: Calendar cal = Calendar.getInstance(); 163: cal.settime(new Date()); 164: message.setcontribution(cal); 165: // Name 要素の設定 166: message.setname(_name); 167: // Comment 要素の設定 168: message.setcomment(_comment); 169: // Message 要素をコンテナに格納 170: list.add(message); 171: 172: // ここからファイルへの書き出し 173: // 作成したデータの妥当性を検証 174: Validator v = jc.createvalidator(); 175: boolean valid = v.validateroot(bbs); 176: // ファイルへ書き出し 177: Marshaller m = jc.createmarshaller(); 178: m.setproperty(marshaller.jaxb_encoding, "Shift_JIS"); 179: m.setproperty(marshaller.jaxb_formatted_output, 180: Boolean.TRUE);

29 181: fos = new FileOutputStream(XML_FILE); 182: m.marshal(bbs, fos); 183: fos.close(); 184: 185: // 通常表示 186: // TransformerFactory オブジェクトの作成 187: TransformerFactory tf = TransformerFactory.newInstance(); 188: // Transformer オブジェクトの作成 189: Transformer t = tf.newtransformer(new StreamSource(XSL_FILE)); 190: // 出力プロパティを指定 191: t.setoutputproperty("encoding", "Shift_JIS"); 192: // 書き出し 193: t.transform(new StreamSource(XML_FILE), 194: new StreamResult(out)); 195: } catch (Exception e) { 196: // 例外処理 ( メッセージの出力 ) 197: OutputMessage(out, e.getmessage()); 198: return; 199: } 最初に 題名 名前 コメント のパラメータをチェックし パラメータが指定され ていないか 文字列の長さが0の場合には それぞれメッセージを表示して終了します その後 JAXB を使用し XML を読み込みます Message 要素がある場合には 最後 の Message 要素の No 属性の値を取得し No 属性の設定時に1を足してメッセージ番号 とします Subject Name Comment 要素にパラメータの値を設定し 現在時刻で Contoribution 要素を設定して Message 要素に追加します データの妥当性を検証後 ファイルに出力して 通常表示します 7 更新 メッセージの更新 (mode=modify) の処理です 最初に引数をチェックし DOM を使 用してメッセージを更新します その後 通常表示します 200: } else if (_mode.equals("modify")) { 201: // 更新 202: if (_subject == null _subject.length() == 0) { 203: OutputMessage(out, " 題名を入力してください "); 204: return; 205: } 206: if (_name == null _name.length() == 0) { 207: OutputMessage(out, " 名前を入力してください ");

30 208: return; 209: } 210: if (_comment == null _comment.length() == 0) { 211: OutputMessage(out, " コメントを入力してください "); 212: return; 213: } 214: try { 215: // XML の作成 216: // DocumentBuilderFactory オブジェクトの作成 217: DocumentBuilderFactory dbf = 218: DocumentBuilderFactory.newInstance(); 219: // DocumentBuilder オブジェクトの作成 220: DocumentBuilder db = dbf.newdocumentbuilder(); 221: // XML の読み込み 222: Document document = db.parse(new File(XML_FILE)); 223: // BBS 要素の取得 224: Element root = (Element)document.getDocumentElement(); 225: // Message 要素一覧の取得 226: NodeList list = root.getchildnodes(); 227: for (int i = 0; i < list.getlength(); i++) { 228: if (list.item(i).getnodetype() == Node.ELEMENT_NODE) { 229: Element message = (Element)list.item(i); 230: if (message.getattribute("no").equals(_no)) { 231: // Subject 要素の取得と更新 232: Node subject = 233: message.getelementsbytagname("subject").item(0); 234: subject.getfirstchild().setnodevalue(_subject); 235: // Name 要素の取得と更新 236: Node name = 237: message.getelementsbytagname("name").item(0); 238: name.getfirstchild().setnodevalue(_name); 239: // Comment 要素の取得と更新 240: Node comment = 241: message.getelementsbytagname("comment").item(0); 242: comment.getfirstchild().setnodevalue(_comment); 243: break; 244: } 245: } 246: } 247: // ファイルへ書き出し 248: // TransformerFactory オブジェクトの作成

31 249: TransformerFactory tf = TransformerFactory.newInstance(); 250: // Transformer オブジェクトの作成 251: Transformer t = tf.newtransformer(); 252: // 出力プロパティを指定 253: t.setoutputproperty("encoding", "Shift_JIS"); 254: t.setoutputproperty("indent", "yes"); 255: // 書き出し 256: t.transform(new DOMSource(document), 257: new StreamResult(XML_FILE)); 258: 259: // 通常表示 260: // Transformer オブジェクトの作成 261: t = tf.newtransformer(new StreamSource(XSL_FILE)); 262: // 書き出し 263: t.transform(new StreamSource(XML_FILE), 264: new StreamResult(out)); 265: } catch (Exception e) { 266: // 例外処理 ( メッセージの出力 ) 267: OutputMessage(out, e.getmessage()); 268: return; 269: } 7と同様にパラメータをチェックします その後 DOM を使用し XML を読み込んで ルート要素から Message 要素を検索し 同じ No 属性の Message 要素の Subject Name Comment 要素をそれぞれパラメータ の値に設定してファイルに出力し 通常表示します 226: NodeList list = root.getchildnodes(); 227: for (int i = 0; i < list.getlength(); i++) { 228: if (list.item(i).getnodetype() == Node.ELEMENT_NODE) { 229: Element message = (Element)list.item(i); 230: if (message.getattribute("no").equals(_no)) { 231: // Subject 要素の取得と更新 232: Node subject = 233: message.getelementsbytagname("subject").item(0); 234: subject.getfirstchild().setnodevalue(_subject); 途中 上記の部分の解説です ルート要素から子要素のリストを取得します ルート要素の子要素には Message 要素 以外に名前空間属性もありますので getnodetype メソッドで要素ノード (Node.ELEMENT_NODE) かどうかを判断します 要素ノードの場合には Message 要

32 素ですから No 属性を取得し No パラメータと同じかどうか比較します 同じ場合には getelementsbytagname メソッドで要素のタグ名が Subject の最初のノードを取得します Subject 要素にはテキストノードしかありませんので getfirstchild メソッドで最初の子要素を取得し setnodevalue で Subject 要素の値を Subject パラメータの値に設定します 8 削除 メッセージの削除 (mode=delete) の処理です 最初にパラメータをチェックし DOM を使用してメッセージを削除 (Delete 属性を設定 ) します その後 通常表示します 270: } else if (_mode.equals("delete")) { 271: // 削除 272: try { 273: // XML の作成 274: // DocumentBuilderFactory オブジェクトの作成 275: DocumentBuilderFactory dbf = 276: DocumentBuilderFactory.newInstance(); 277: // DocumentBuilder オブジェクトの作成 278: DocumentBuilder db = dbf.newdocumentbuilder(); 279: // XML の読み込み 280: Document document = db.parse(new File(XML_FILE)); 281: // BBS 要素の取得 282: Element root = (Element)document.getDocumentElement(); 283: // Message 要素一覧の取得 284: NodeList list = root.getchildnodes(); 285: for (int i = 0; i < list.getlength(); i++) { 286: if (list.item(i).getnodetype() == Node.ELEMENT_NODE) { 287: Element message = (Element)list.item(i); 288: if (message.getattribute("no").equals(_no)) { 289: // Delete 属性の設定 290: message.setattribute("delete", "true"); 291: break; 292: } 293: } 294: } 295: // ファイルへ書き出し 296: // TransformerFactory オブジェクトの作成 297: TransformerFactory tf = TransformerFactory.newInstance(); 298: // Transformer オブジェクトの作成

33 299: Transformer t = tf.newtransformer(); 300: // 出力プロパティを指定 301: t.setoutputproperty("encoding", "Shift_JIS"); 302: t.setoutputproperty("indent", "yes"); 303: // 書き出し 304: t.transform(new DOMSource(document), 305: new StreamResult(XML_FILE)); 306: 307: // 通常表示 308: // Transformer オブジェクトの作成 309: t = tf.newtransformer(new StreamSource(XSL_FILE)); 310: // 書き出し 311: t.transform(new StreamSource(XML_FILE), 312: new StreamResult(out)); 313: } catch (Exception e) { 314: // 例外処理 ( メッセージの出力 ) 315: OutputMessage(out, e.getmessage()); 316: return; 317: } 8と同様に DOM で XML を読み込み No パラメータで指定された Message 要素を検 索します 検索した Message 要素の Delete 属性に true を設定してファイルに出力し 通常表示します ここで Message 要素は Delete 属性を設定するだけで 実際に削除はしません これは 最新のメッセージが削除された場合に 次に追加されたメッセージのメッセージ番号が削 除された番号と同じになるのを防ぐためです 又 掲示板の管理者が削除されたメッセー ジの内容を後から確認するのにも役立ちます 9 検索 メッセージの検索 (mode=search) の処理です 最初に引数をチェックし SAX を使用 して検索したメッセージを表示します 318: } else if (_mode.equals("search")) { 319: // 検索 320: if (_keyword == null _keyword.length() == 0) { 321: OutputMessage(out, " キーワードを入力してください "); 322: return; 323: } 324: try { 325: // SAXParserFactory オブジェクトの作成

34 326: SAXParserFactory spfactory = SAXParserFactory.newInstance(); 327: // SAXParser オブジェクトの作成 328: SAXParser parser = spfactory.newsaxparser(); 329: // SearchHandler で検索結果の一覧を表示 330: parser.parse(new File(XML_FILE), 331: new SearchHandler(out, _keyword)); 332: } catch (Exception e) { 333: // 例外処理 ( メッセージの出力 ) 334: OutputMessage(out, e.getmessage()); 335: return; 336: } 最初に キーワードのパラメータをチェックします その後 SAX を使用し PrintWriter オブジェクトとキーワードを引数にして SearchHandler ハンドラを呼び出します SearchHandler では 題名とコメントからキ ーワードを検索し マッチしたメッセージを一覧表示します 10 一覧表示 メッセージの一覧表示 (mode=list) の処理です SAX を使用してメッセージの一覧を 表示します 337: } else if (_mode.equals("list")) { 338: // 一覧表示 339: try { 340: // SAXParserFactory オブジェクトの作成 341: SAXParserFactory spfactory = SAXParserFactory.newInstance(); 342: // SAXParser オブジェクトの作成 343: SAXParser parser = spfactory.newsaxparser(); 344: // ListHandler で一覧を表示 345: parser.parse(new File(XML_FILE), new ListHandler(out)); 346: } catch (Exception e) { 347: // 例外処理 ( メッセージの出力 ) 348: OutputMessage(out, e.getmessage()); 349: return; 350: } 9と同様に SAX を使用し PrintWriter オブジェクトを引数にして ListHandler ハ ンドラを呼び出します ListHandler では 全てのメッセージを一覧表示します 11 追加フォームの表示 メッセージの新規作成フォームの表示 (mode=regist_form) の処理です 新規作成の

35 ための HTML フォームを表示します リスト 6 に追加フォームの HTML を示します 実際の画面は図 2 のようになります リスト6 追加フォームの HTML 1: <form action='/bbs/bbs' method='post'> 2: <div style='margin-left:40'> 3: <input type='hidden' name='mode' value='regist'> 4: <table> 5: <tr> 6: <td><b> 題名 </b></td> 7: <td> 8: <input type='text' name='subject' size='30' maxlength='100' tabindex='1'> 9: </td> 10: </tr> 11: <tr> 12: <td><b> 名前 </b></td> 13: <td> 14: <input type='text' name='name' size='30' maxlength='100' tabindex='2'> 15: <input type='submit' value=' 追加する ' tabindex='4'> 16: <input type='reset' value=' リセット ' tabindex='5'> 17: </td> 18: </tr> 19: <tr> 20: <td colspan=2> 21: <b> コメント </b><br> 22: <textarea name='comment' cols='50' rows='8' tabindex='3'></textarea> 23: </td> 24: </tr> 25: </table> 26: </div> 27: </form> リスト 6 の内容を そのまま PrintWriter オブジェクトに出力するだけです 351: } else if (_mode.equals("regist_form")) { 352: // 追加フォームの表示 353: out.println("<form action='/bbs/bbs' method='post'>"); 354: out.println("<div style='margin-left:40'>"); 355: out.println("<input type='hidden' name='mode' value='regist'>"); 356: out.println("<table>");

36 357: out.println("<tr>"); 358: out.println("<td><b> 題名 </b></td>"); 359: out.println("<td>"); 360: out.println("<input type='text' name='subject' size='30'" + 361: " maxlength='100' tabindex='1'>"); 362: out.println("</td>"); 363: out.println("</tr>"); 364: out.println("<tr>"); 365: out.println("<td><b> 名前 </b></td>"); 366: out.println("<td>"); 367: out.println("<input type='text' name='name' size='30'" + 368: " maxlength='100' tabindex='2'>"); 369: out.println("<input type='submit' value=' 追加する ' tabindex='4'>"); 370: out.println("<input type='reset' value=' リセット ' tabindex='5'>"); 371: out.println("</td>"); 372: out.println("</tr>"); 373: out.println("<tr>"); 374: out.println("<td colspan=2>"); 375: out.println("<b> コメント </b><br>"); 376: out.println("<textarea name='comment' cols='50' rows='8'" + 377: " tabindex='3'></textarea>"); 378: out.println("</td>"); 379: out.println("</tr>"); 380: out.println("</table>"); 381: out.println("</div>"); 382: out.println("</form>"); 12 更新フォームの表示メッセージの更新フォームの表示 (mode=modify_form) の処理です DOM を使用してメッセージを取得し 更新のための HTML フォームを表示します リスト7に更新フォームの HTML を示します 実際の画面は図 2と同様ですが 更新するメッセージの題名 名前 コメントが初期値として表示されます リスト7 更新フォームの HTML( 太字は XML データ ) 1: <form action='/bbs/bbs' method='post'> 2: <div style='margin-left:40'> 3: <input type='hidden' name='mode' value='modify'> 4: <input type='hidden' name='no' value='1'> 5: <table>

37 6: <tr> 7: <td><b> 題名 </b></td> 8: <td> 9: <input type='text' name='subject' value=' 面白いです ' 10: size='30' maxlength='100' tabindex='1'> 11: </td> 12: </tr> 13: <tr> 14: <td><b> 名前 </b></td> 15: <td> 16: <input type='text' name='name' value=' 山田太郎 ' size='30' 17: maxlength='100' tabindex='2'> 18: <input type='submit' value=' 更新する ' tabindex='4'> 19: <input type='reset' value=' リセット ' tabindex='5'> 20: </td> 21: </tr> 22: <tr> 23: <td colspan=2> 24: <b> コメント </b><br> 25: <textarea name='comment' cols='50' rows='8' 26: tabindex='3'> タイトル 1 はとても面白かったです 27: ぜひ聞いてみてください </textarea> 28: </td> 29: </tr> 30: </table> 31: </div> 32: </form> リスト 7 の太字部分を XML から出力します それ以外はリスト 7 の内容を そのまま PrintWriter オブジェクトに出力するだけです 383: } else if (_mode.equals("modify_form")) { 384: // 更新フォームの表示 385: try { 386: // XML の作成 387: // DocumentBuilderFactory オブジェクトの作成 388: DocumentBuilderFactory dbf = 389: DocumentBuilderFactory.newInstance(); 390: // DocumentBuilder オブジェクトの作成 391: DocumentBuilder db = dbf.newdocumentbuilder();

38 392: // XML の読み込み 393: Document document = db.parse(new File(XML_FILE)); 394: // BBS 要素の取得 395: Element root = (Element)document.getDocumentElement(); 396: // Message 要素一覧の取得 397: NodeList list = root.getchildnodes(); 398: for (int i = 0; i < list.getlength(); i++) { 399: if (list.item(i).getnodetype() == Node.ELEMENT_NODE) { 400: Element message = (Element)list.item(i); 401: if (message.getattribute("no").equals(_no)) { 402: // Subject 要素の取得 403: Node subject = 404: message.getelementsbytagname("subject").item(0); 405: _subject = subject.getfirstchild().getnodevalue(); 406: // Name 要素の取得 407: Node name = 408: message.getelementsbytagname("name").item(0); 409: _name = name.getfirstchild().getnodevalue(); 410: // Comment 要素の取得 411: Node comment = 412: message.getelementsbytagname("comment").item(0); 413: _comment = comment.getfirstchild().getnodevalue(); 414: break; 415: } 416: } 417: } 418: } catch (Exception e) { 419: // 例外処理 ( メッセージの出力 ) 420: OutputMessage(out, e.getmessage()); 421: return; 422: } 423: out.println("<form action='/bbs/bbs' method='post'>"); 424: out.println("<div style='margin-left:40'>"); 425: out.println("<input type='hidden' name='mode' value='modify'>"); 426: out.println("<input type='hidden' name='no' value='" + _no + "'>"); 427: out.println("<table>"); 428: out.println("<tr>"); 429: out.println("<td><b> 題名 </b></td>"); 430: out.println("<td>"); 431: out.println("<input type='text' name='subject' value='" + 432: _subject + "' size='30' maxlength='100' tabindex='1'>");

39 433: out.println("</td>"); 434: out.println("</tr>"); 435: out.println("<tr>"); 436: out.println("<td><b> 名前 </b></td>"); 437: out.println("<td>"); 438: out.println("<input type='text' name='name' value='" + 439: _name + "' size='30' maxlength='100' tabindex='2'>"); 440: out.println("<input type='submit' value=' 更新する ' tabindex='4'>"); 441: out.println("<input type='reset' value=' リセット ' tabindex='5'>"); 442: out.println("</td>"); 443: out.println("</tr>"); 444: out.println("<tr>"); 445: out.println("<td colspan=2>"); 446: out.println("<b> コメント </b><br>"); 447: out.println("<textarea name='comment' cols='50' rows='8'" 448: + " tabindex='3'>" + _comment + "</textarea>"); 449: out.println("</td>"); 450: out.println("</tr>"); 451: out.println("</table>"); 452: out.println("</div>"); 453: out.println("</form>"); 7と同様に No パラメータの Message 要素を検索し その内容を初期値として表示し ます 13 検索フォームの表示メッセージの検索フォームの表示 (mode=search_form) の処理です 検索のための HTML フォームを表示します リスト8に検索フォームの HTML を示します 実際の画面は図 3のようになります リスト8 検索フォームの HTML 1: <form action='/bbs/bbs' method='post'> 2: <div style='margin-left:40'> 3: <input type='hidden' name='mode' value='search'> 4: <b> キーワード </b> 5: <input type='text' name='keyword' size='30' maxlength='30'> 6: <input type='submit' value=' 検索する '> 7: </div> 8: </form>

40 リスト 8 の内容を そのまま PrintWriter オブジェクトに出力するだけです 454: } else if (_mode.equals("search_form")) { 455: // 検索フォームの表示 456: out.println("<form action='/bbs/bbs' method='post'>"); 457: out.println("<div style='margin-left:40'>"); 458: out.println("<input type='hidden' name='mode' value='search'>"); 459: out.println("<b> キーワード </b>"); 460: out.println("<input type='text' name='keyword' size='30'" + 461: " maxlength='30'>"); 462: out.println("<input type='submit' value=' 検索する '>"); 463: out.println("</div>"); 464: out.println("</form>"); 465: } 14 共通フッタ 468: out.println("</body>"); 469: out.println("</html>"); クライアントに表示する HTML の全ての処理に共通なフッタを出力します

41 7.2.3 メッセージ表示 473: private void OutputMessage(PrintWriter out, String msg) { 474: out.println(msg); 475: out.println("</body>"); 476: out.println("</html>"); 477: } エラーが発生した場合にメッセージを表示して共通フッタを表示します このメソッドは 以下のように 各処理のパラメータのチェック ( 必要な場合 ) 及び例外処理で使用しています ( 処理 パラメータ の部分は それぞれ各処理により異なります ) 1: } else if (_mode.equals( 処理 )) { 2: // パラメータのチェック 3: if ( パラメータ == null パラメータ.length() == 0) { 4: OutputMessage(out, " パラメータ を入力してください"); 5: return; 6: } 7: try { 8: // 通常の処理 9: } catch (Exception e) { 10: // 例外処理 ( メッセージの出力 ) 11: OutputMessage(out, e.getmessage()); 12: return; 13: } 14: }

42 7.3 SAX イベントハンドラ 最後に検索結果表示と一覧表示の SAX イベントハンドラを作成します 検索結果表示イベントハンドラ リスト9に検索結果の HTML を示します 実際の画面は図 4のようになります リスト9で1~9 行目と18~19 行目は XML データと関連が無い部分ですので それぞれドキュメント開始時とドキュメント終了時に表示します 要素の開始タグ読み込み時に No Delete 属性を保存します そして 要素の終了タグ読み込み時にテキストデータから Subject Name Contribution Comment 要素を取得してキーワード検索を行い マッチした場合に 10~17 行目を表示します リスト9 検索結果の HTML( 太字は XML データ ) 1: <div align='center'> 2: <table width='80%' border='2'> 3: <tr> 4: <th> 番号 </th> 5: <th> 題名 </th> 6: <th> 名前 </th> 7: <th> 日時 </th> 8: <th> コメント </th> 9: </tr> 10: <tr> 11: <td>1</td> 12: <td> 面白いです </td> 13: <td> 山田太郎 </td> 14: <td> :28:59</td> 15: <td> タイトル 1 はとても面白かったです 16: ぜひ聞いてみてください </td> 17: </tr> 18: </table> 19: </div> 1 クラス定義

43 480: class SearchHandler extends DefaultHandler { 481: 482: // 出力先を保存するオブジェクト 483: private PrintWriter out; 484: // キーワードを保存する文字列 485: private String keyword; 486: // No 属性値を保存する文字列 487: private String no; 488: // Delete 属性値を保存する文字列 489: private String delete; 490: // テキストデータを保存する文字列 491: private String text; 492: // Subject 要素のデータを保存する文字列 493: private String subject; 494: // Name 要素のデータを保存する文字列 495: private String name; 496: // Contribution 要素のデータを保存する文字列 497: private String contribution; 498: // Comment 要素のデータを保存する文字列 499: private String comment; 500: 501: SearchHandler(PrintWriter pw, String s) { 502: out = pw; 503: keyword = s; 504: } 検索結果表示イベントハンドラを SearchHandler という名称で作成します PrintWriter オブジェクトと検索キーワードを受け取るために コンストラクタを定義し ています 2 ドキュメント開始時 507: public void startdocument() { 508: // テーブルのヘッダを表示 509: out.println("<div align='center'>"); 510: out.println("<table width='80%' border='2'>"); 511: out.println("<tr>"); 512: out.println("<th> 番号 </th>"); 513: out.println("<th> 題名 </th>"); 514: out.println("<th> 名前 </th>");

44 515: out.println("<th> 日時 </th>"); 516: out.println("<th> コメント </th>"); 517: out.println("</tr>"); 518: } 検索結果をテーブルにするためのヘッダを表示します 3 要素の開始タグ読み込み時 521: public void startelement(string uri, 522: String localname, 523: String qname, 524: Attributes attributes) { 525: if (qname.equals("message")) { 526: // No 属性を保存 527: no = attributes.getvalue("no"); 528: // Delete 属性を保存 529: delete = attributes.getvalue("delete"); 530: if (delete == null) delete = "false"; 531: } 532: text = ""; 533: } Message 要素の処理をします 属性を検索し No 属性と Delete 属性の内容を保存し ます Delete 属性が無い場合には "false" にしておきます 又 全ての要素で テキスト データの読み込みのために文字列を初期化します 3 テキストデータ読み込み時 536: public void characters(char[] ch, int offset, int length) { 537: text += new String(ch, offset, length); 538: } String クラスで文字列を取り出し テキストデータを保存しておきます 要素の内容に改行がある場合 複数回呼び出されますので 文字列を連結しています 4 要素の終了タグ読み込み時 541: public void endelement(string uri, String localname, String qname) { 542: if (qname.equals("subject")) { 543: // Subject 要素を保存 544: subject = text; 545: } else if (qname.equals("name")) { 546: // Name 要素を保存 547: name = text;

45 548: } else if (qname.equals("contribution")) { 549: // Contribution 要素を保存 550: contribution = text.substring(0, 10) + " " + text.substring(11, 19); 551: } else if (qname.equals("comment")) { 552: // Comment 要素を保存 553: comment = text; 554: } else if (qname.equals("message") && delete.equals("false")) { 555: // 削除されていない場合はキーワードを検索 556: if (subject.indexof(keyword)!= : comment.indexof(keyword)!= -1) { 558: out.println("<tr>"); 559: out.println("<td>" + no + "</td>"); 560: out.println("<td>" + subject + "</td>"); 561: out.println("<td>" + name + "</td>"); 562: out.println("<td>" + contribution + "</td>"); 563: out.println("<td>" + comment + "</td>"); 564: out.println("</tr>"); 565: } 566: } 567: } それぞれの要素の内容を保存しておきます Message 要素の終了タグの場合 削除され ていなければキーワード検索を行い マッチしたメッセージを表示します 5 ドキュメント終了時 570: public void enddocument() { 571: // テーブルを閉じる 572: out.println("</table>"); 573: out.println("</div>"); 574: } テーブルを終了します

46 7.3.2 一覧表示イベントハンドラ 以下の点を除き 検索結果表示イベントハンドラと同様です 1 イベントハンドラの名称が ListHandler である 2 コンストラクタにキーワードが渡されない 3 Message 要素の終了タグの場合での処理でキーワードとの比較を行わない

47 8. プログラムのコンパイルと実行 スキーマ定義の作成 XSLT の作成 掲示板スキーマ定義 (BBS.xsd) プログラムを作成 (Java プログラミング ) 通常表示 XSLT (BBS.xsl) プログラムの実行 (Tomcat による実行 ) 掲示板 XML ファイル (BBS.xml) 最後に プログラムのコンパイルと実行です ( プログラムをコンパイルするための環境 設定については 付録を参照してください ) リスト 10 クラス定義とプログラムのコンパイル ( 太字はコマンド入力 ) C: java bbs WEB-INF classes> xjc BBS.xsd C: java bbs WEB-INF classes> javac BBSServlet.java Tomcat を使用して Servlet を実行するためには 以下のようなディレクトリ構成が必要 です ルートディレクトリの名前は任意です ここでは C: java bbs とします ルートディレクトリ (C: java bbs) アプリケーションのルートディレクトリ WEB-INF classes lib web.xml Servlet と関連プログラムのコンパイル済みファイル 必要な jar ファイル アプリケーションの設定ファイル 図 8 プログラム実行のためのディレクトリ構成

48 今回は それぞれのフォルダに以下のファイルを置き classes フォルダでコンパイルします 尚 他のフォルダでコンパイルして classes フォルダに class ファイルをコピーしても問題ありませんが スキーマ定義のコンパイルで出来た階層構造の class ファイルも全てコピーする必要があります ルート BBS.xml BBS.xsl WEB-INF web.xml classes BBSServlet.java BBS.xsd lib jaxb-api.jar jaxb-impl.jar jaxb-libs.jar jaxb-xjc.jar jax-qname.jar namespace.jar relaxngdatatype.jar xsdlib.jar web.xml の内容をリスト6に示します 内容は <servlet> タグの <servlet-class> タグに Servlet ファイル名 <servlet-name> タグに キーワードを指定します <servlet-mapping> タグの <servlet-name> タグは同じキーワードを指定して <url-pattern> タグにアクセスする URL を指定します リスト 11 web.xml( 太字は任意設定値 ) <?xml version="1.0" encoding="iso "?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " <web-app> <servlet> <servlet-name>bbs</servlet-name> <servlet-class>bbsservlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>bbs</servlet-name> <url-pattern>/bbs</url-pattern> </servlet-mapping> </web-app>

49 最後に Tomcat Manager から図 7 のように設定して 配備ボタンを押下すれば のポート番号 )/bbs/bbs で実行出来ます ここで WAR ファイル又はディレクトリの URL には先程のルートディレクトリを指定します 図 9 Tomcat Manager の設定

50 9. コーディングリスト コーディングリストをリスト 12 に示します リスト 12 BBSServlet.java 1: import java.io.*; 2: import java.math.*; 3: import java.text.*; 4: import java.util.*; 5: import javax.servlet.*; 6: import javax.servlet.http.*; 7: import javax.xml.bind.jaxbcontext; 8: import javax.xml.bind.marshaller; 9: import javax.xml.bind.unmarshaller; 10: import javax.xml.bind.validator; 11: import javax.xml.parsers.*; 12: import javax.xml.transform.*; 13: import javax.xml.transform.dom.*; 14: import javax.xml.transform.stream.*; 15: import org.w3c.dom.*; 16: import org.xml.sax.*; 17: import org.xml.sax.helpers.*; 18: 19: // スキーマコンパイラが生成したクラスのインポート 20: import educationproject.bbs.*; 21: 22: public class BBSServlet extends HttpServlet { 23: 24: // XML ファイル名 25: final String XML_FILE = "C: java bbs BBS.xml"; 26: // XSLT スタイルシートファイル名 27: final String XSL_FILE = "C: java bbs BBS.xsl"; 28: 29: // GET リクエストの処理 30: public void doget(httpservletrequest request, 31: HttpServletResponse response) 32: throws IOException, ServletException { 33: // POST リクエストの処理を呼び出す 34: dopost(request, response); 35: } 36: 37: // POST リクエストの処理 38: public void dopost(httpservletrequest request, 39: HttpServletResponse response) 40: throws IOException, ServletException { 41: 42: // ファイルに保存するためのストリーム 43: FileOutputStream fos = null; 44: 45: // 入力文字コードの指定 46: request.setcharacterencoding("shift_jis"); 47: // 出力文字コードの指定

51 48: response.setcontenttype("text/html;charset=shift_jis"); 49: // PrintWriter オブジェクトを取得 50: PrintWriter out = response.getwriter(); 51: 52: // XML ファイルが無ければ作成 53: File file = new File(XML_FILE); 54: if (!file.exists()) { 55: try { 56: // JAXBContext オブジェクトの作成 57: JAXBContext jc = 58: JAXBContext.newInstance("educationproject.bbs"); 59: // ObjectFactory オブジェクトの作成 60: ObjectFactory of = new ObjectFactory(); 61: // BBS 要素の作成 62: BBS bbs = of.createbbs(); 63: // ファイルへ書き出し 64: Marshaller m = jc.createmarshaller(); 65: m.setproperty(marshaller.jaxb_encoding, "Shift_JIS"); 66: m.setproperty(marshaller.jaxb_formatted_output, 67: Boolean.TRUE); 68: fos = new FileOutputStream(XML_FILE); 69: m.marshal(bbs, fos); 70: fos.close(); 71: } catch (Exception e) { 72: // 例外処理 ( メッセージの出力 ) 73: OutputMessage(out, e.getmessage()); 74: return; 75: } 76: } 77: 78: // リクエストパラメータを取得 79: // 処理モード 80: String _mode = request.getparameter("mode"); 81: if (_mode == null) _mode = "normal"; 82: // メッセージ番号 83: String _no = request.getparameter("no"); 84: // 題名 85: String _subject = request.getparameter("subject"); 86: // 名前 87: String _name = request.getparameter("name"); 88: // コメント 89: String _comment = request.getparameter("comment"); 90: // 検索キーワード 91: String _keyword = request.getparameter("keyword"); 92: 93: // 共通ヘッダ 94: out.println("<html>"); 95: out.println("<head>"); 96: out.println("<title> 掲示板 </title>"); 97: out.println("</head>"); 98: out.println("<body>"); 99: out.println("<div align='center'><h3> 掲示板 </h3></div>"); 100: out.println("<div align='center'>" 101: + "[ <a href='/bbs/bbs?mode=normal'> 通常表示 </a> ] "

52 102: + "[ <a href='/bbs/bbs?mode=regist_form'> 追加 </a> ] " 103: + "[ <a href='/bbs/bbs?mode=search_form'> 検索 </a> ] " 104: + "[ <a href='/bbs/bbs?mode=list'> 一覧表示 </a> ]</a></div>"); 105: out.println("<hr>"); 106: 107: if (_mode.equals("normal")) { 108: // 通常表示 109: try { 110: // TransformerFactory オブジェクトの作成 111: TransformerFactory tf = TransformerFactory.newInstance(); 112: // Transformer オブジェクトの作成 113: Transformer t = tf.newtransformer(new StreamSource(XSL_FILE)); 114: // 出力プロパティを指定 115: t.setoutputproperty("encoding", "Shift_JIS"); 116: // 書き出し 117: t.transform(new StreamSource(XML_FILE), 118: new StreamResult(out)); 119: } catch (Exception e) { 120: // 例外処理 ( メッセージの出力 ) 121: OutputMessage(out, e.getmessage()); 122: return; 123: } 124: } else if (_mode.equals("regist")) { 125: // 追加 126: if (_subject == null _subject.length() == 0) { 127: OutputMessage(out, " 題名を入力してください "); 128: return; 129: } 130: if (_name == null _name.length() == 0) { 131: OutputMessage(out, " 名前を入力してください "); 132: return; 133: } 134: if (_comment == null _comment.length() == 0) { 135: OutputMessage(out, " コメントを入力してください "); 136: return; 137: } 138: try { 139: // JAXBContext オブジェクトの作成 140: JAXBContext jc = 141: JAXBContext.newInstance("educationproject.bbs"); 142: // ObjectFactory オブジェクトの作成 143: ObjectFactory of = new ObjectFactory(); 144: // Unmarshaller オブジェクトの取得 145: Unmarshaller unmarshaller = jc.createunmarshaller(); 146: unmarshaller.setvalidating(true); 147: // BBS 要素の取得 148: BBS bbs = (BBS)unmarshaller.unmarshal(file); 149: List list = bbs.getmessage(); 150: long no = 0; 151: if (list.size() > 0) { 152: Message message = (Message)list.get(list.size() - 1); 153: no = message.getno().longvalue(); 154: } 155: // Message 要素の作成

53 156: Message message = of.createmessage(); 157: // No 属性の設定 158: message.setno(biginteger.valueof(no + 1)); 159: // Subject 要素の設定 160: message.setsubject(_subject); 161: // Contribution 要素の設定 162: Calendar cal = Calendar.getInstance(); 163: cal.settime(new Date()); 164: message.setcontribution(cal); 165: // Name 要素の設定 166: message.setname(_name); 167: // Comment 要素の設定 168: message.setcomment(_comment); 169: // Message 要素をコンテナに格納 170: list.add(message); 171: 172: // ここからファイルへの書き出し 173: // 作成したデータの妥当性を検証 174: Validator v = jc.createvalidator(); 175: boolean valid = v.validateroot(bbs); 176: // ファイルへ書き出し 177: Marshaller m = jc.createmarshaller(); 178: m.setproperty(marshaller.jaxb_encoding, "Shift_JIS"); 179: m.setproperty(marshaller.jaxb_formatted_output, 180: Boolean.TRUE); 181: fos = new FileOutputStream(XML_FILE); 182: m.marshal(bbs, fos); 183: fos.close(); 184: 185: // 通常表示 186: // TransformerFactory オブジェクトの作成 187: TransformerFactory tf = TransformerFactory.newInstance(); 188: // Transformer オブジェクトの作成 189: Transformer t = tf.newtransformer(new StreamSource(XSL_FILE)); 190: // 出力プロパティを指定 191: t.setoutputproperty("encoding", "Shift_JIS"); 192: // 書き出し 193: t.transform(new StreamSource(XML_FILE), 194: new StreamResult(out)); 195: } catch (Exception e) { 196: // 例外処理 ( メッセージの出力 ) 197: OutputMessage(out, e.getmessage()); 198: return; 199: } 200: } else if (_mode.equals("modify")) { 201: // 更新 202: if (_subject == null _subject.length() == 0) { 203: OutputMessage(out, " 題名を入力してください "); 204: return; 205: } 206: if (_name == null _name.length() == 0) { 207: OutputMessage(out, " 名前を入力してください "); 208: return; 209: }

54 210: if (_comment == null _comment.length() == 0) { 211: OutputMessage(out, " コメントを入力してください "); 212: return; 213: } 214: try { 215: // XML の作成 216: // DocumentBuilderFactory オブジェクトの作成 217: DocumentBuilderFactory dbf = 218: DocumentBuilderFactory.newInstance(); 219: // DocumentBuilder オブジェクトの作成 220: DocumentBuilder db = dbf.newdocumentbuilder(); 221: // XML の読み込み 222: Document document = db.parse(new File(XML_FILE)); 223: // BBS 要素の取得 224: Element root = (Element)document.getDocumentElement(); 225: // Message 要素一覧の取得 226: NodeList list = root.getchildnodes(); 227: for (int i = 0; i < list.getlength(); i++) { 228: if (list.item(i).getnodetype() == Node.ELEMENT_NODE) { 229: Element message = (Element)list.item(i); 230: if (message.getattribute("no").equals(_no)) { 231: // Subject 要素の取得と更新 232: Node subject = 233: message.getelementsbytagname("subject").item(0); 234: subject.getfirstchild().setnodevalue(_subject); 235: // Name 要素の取得と更新 236: Node name = 237: message.getelementsbytagname("name").item(0); 238: name.getfirstchild().setnodevalue(_name); 239: // Comment 要素の取得と更新 240: Node comment = 241: message.getelementsbytagname("comment").item(0); 242: comment.getfirstchild().setnodevalue(_comment); 243: break; 244: } 245: } 246: } 247: // ファイルへ書き出し 248: // TransformerFactory オブジェクトの作成 249: TransformerFactory tf = TransformerFactory.newInstance(); 250: // Transformer オブジェクトの作成 251: Transformer t = tf.newtransformer(); 252: // 出力プロパティを指定 253: t.setoutputproperty("encoding", "Shift_JIS"); 254: t.setoutputproperty("indent", "yes"); 255: // 書き出し 256: t.transform(new DOMSource(document), 257: new StreamResult(XML_FILE)); 258: 259: // 通常表示 260: // Transformer オブジェクトの作成 261: t = tf.newtransformer(new StreamSource(XSL_FILE)); 262: // 書き出し 263: t.transform(new StreamSource(XML_FILE),

55 264: new StreamResult(out)); 265: } catch (Exception e) { 266: // 例外処理 ( メッセージの出力 ) 267: OutputMessage(out, e.getmessage()); 268: return; 269: } 270: } else if (_mode.equals("delete")) { 271: // 削除 272: try { 273: // XML の作成 274: // DocumentBuilderFactory オブジェクトの作成 275: DocumentBuilderFactory dbf = 276: DocumentBuilderFactory.newInstance(); 277: // DocumentBuilder オブジェクトの作成 278: DocumentBuilder db = dbf.newdocumentbuilder(); 279: // XML の読み込み 280: Document document = db.parse(new File(XML_FILE)); 281: // BBS 要素の取得 282: Element root = (Element)document.getDocumentElement(); 283: // Message 要素一覧の取得 284: NodeList list = root.getchildnodes(); 285: for (int i = 0; i < list.getlength(); i++) { 286: if (list.item(i).getnodetype() == Node.ELEMENT_NODE) { 287: Element message = (Element)list.item(i); 288: if (message.getattribute("no").equals(_no)) { 289: // Delete 属性の設定 290: message.setattribute("delete", "true"); 291: break; 292: } 293: } 294: } 295: // ファイルへ書き出し 296: // TransformerFactory オブジェクトの作成 297: TransformerFactory tf = TransformerFactory.newInstance(); 298: // Transformer オブジェクトの作成 299: Transformer t = tf.newtransformer(); 300: // 出力プロパティを指定 301: t.setoutputproperty("encoding", "Shift_JIS"); 302: t.setoutputproperty("indent", "yes"); 303: // 書き出し 304: t.transform(new DOMSource(document), 305: new StreamResult(XML_FILE)); 306: 307: // 通常表示 308: // Transformer オブジェクトの作成 309: t = tf.newtransformer(new StreamSource(XSL_FILE)); 310: // 書き出し 311: t.transform(new StreamSource(XML_FILE), 312: new StreamResult(out)); 313: } catch (Exception e) { 314: // 例外処理 ( メッセージの出力 ) 315: OutputMessage(out, e.getmessage()); 316: return; 317: }

56 318: } else if (_mode.equals("search")) { 319: // 検索 320: if (_keyword == null _keyword.length() == 0) { 321: OutputMessage(out, " キーワードを入力してください "); 322: return; 323: } 324: try { 325: // SAXParserFactory オブジェクトの作成 326: SAXParserFactory spfactory = SAXParserFactory.newInstance(); 327: // SAXParser オブジェクトの作成 328: SAXParser parser = spfactory.newsaxparser(); 329: // SearchHandler で検索結果の一覧を表示 330: parser.parse(new File(XML_FILE), 331: new SearchHandler(out, _keyword)); 332: } catch (Exception e) { 333: // 例外処理 ( メッセージの出力 ) 334: OutputMessage(out, e.getmessage()); 335: return; 336: } 337: } else if (_mode.equals("list")) { 338: // 一覧表示 339: try { 340: // SAXParserFactory オブジェクトの作成 341: SAXParserFactory spfactory = SAXParserFactory.newInstance(); 342: // SAXParser オブジェクトの作成 343: SAXParser parser = spfactory.newsaxparser(); 344: // ListHandler で一覧を表示 345: parser.parse(new File(XML_FILE), new ListHandler(out)); 346: } catch (Exception e) { 347: // 例外処理 ( メッセージの出力 ) 348: OutputMessage(out, e.getmessage()); 349: return; 350: } 351: } else if (_mode.equals("regist_form")) { 352: // 追加フォームの表示 353: out.println("<form action='/bbs/bbs' method='post'>"); 354: out.println("<div style='margin-left:40'>"); 355: out.println("<input type='hidden' name='mode' value='regist'>"); 356: out.println("<table>"); 357: out.println("<tr>"); 358: out.println("<td><b> 題名 </b></td>"); 359: out.println("<td>"); 360: out.println("<input type='text' name='subject' size='30'" + 361: " maxlength='100' tabindex='1'>"); 362: out.println("</td>"); 363: out.println("</tr>"); 364: out.println("<tr>"); 365: out.println("<td><b> 名前 </b></td>"); 366: out.println("<td>"); 367: out.println("<input type='text' name='name' size='30'" + 368: " maxlength='100' tabindex='2'>"); 369: out.println("<input type='submit' value=' 追加する ' tabindex='4'>"); 370: out.println("<input type='reset' value=' リセット ' tabindex='5'>"); 371: out.println("</td>");

Microsoft Word - 2部-3.doc

Microsoft Word - 2部-3.doc 目 次... 3 1. 課題の概要... 3 図 1 XSLT スタイルシートによる HTML 変換...3 リスト1 プログラム実行イメージ (HTML 変換モード )... 3 図 2 HTML 変換モードの HTML をブラウザで表示したときの例...4 リスト2 プログラム実行イメージ ( 人気ランキングモード )... 5 リスト3 人気ランキングモードのリストの条件... 5 図 3 人気ランキングモードのリストのツリー構造...

More information

メディプロ1 Javaサーブレット補足資料.ppt

メディプロ1 Javaサーブレット補足資料.ppt メディアプロジェクト演習 1 Java サーブレット補足資料 CGI の基本 CGI と Java サーブレットの違い Java サーブレットの基本 インタラクティブな Web サイトとは Interactive q 対話 または 双方向 q クライアントとシステムが画面を通して対話を行う形式で操作を行っていく仕組み 利用用途 Web サイト, シミュレーションシステム, ゲームなど WWW = インタラクティブなメディア

More information

XMLとXSLT

XMLとXSLT XML と XSLT 棚橋沙弥香 目次 現場のシステム構成とXML/XSLの位置づけ XMLとは XSL/XSLTとは Xalanのインストール いろいろなXSL XMLマスター試験の紹介 現場のシステム構成 HTML 画面上のデータ 電文 電文 外部 WEB サーバー (Java) CORBA 通信 認証サーバー (C 言語 ) DB XML 電文 HTML XSL XSLT 変換今回の説明範囲

More information

XSLT 4-1

XSLT 4-1 XSLT 4-1 XSLT XML XML HTML XSLT 1.0 (W3C ) http://www.w3.org/tr/xslt http://www.zvon.org/xxl/xsltreference/output/ ( ) XML 4-2 XSLT XML

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 1 2 3 /usr/local javalib xerces-2_6_2 xalan-2_6_0 4 XERCES_HOME=/usr/local/javalib/xerces-2_6_2 CLASSPATH=$XERCES_HOME/xmlParserAPIs.jar:$CLASSPATH CLASSPATH=$XERCES_HOME/xercesImpl.jar:$CLASSPATH CLASSPATH=$XERCES_HOME/xercesSamples.jar:$CLASSPATH

More information

第 7 回の内容 動的な Web サイト フォーム Web システムの構成

第 7 回の内容 動的な Web サイト フォーム Web システムの構成 第 7 回の内容 動的な Web サイト フォーム Web システムの構成 動的な Web サイト 静的なリソース ファイルシステムのパス / URI のパス a 公開ディレクトリ / b b GET /b HTTP/1.1 c c e d /a/b を送り返す d e 静的なリソース ファイルシステムのパス / / URI のパス f b c e GET /g/e HTTP/1.1 d /f/e

More information

WebOTXマニュアル

WebOTXマニュアル WebOTX アプリケーション開発ガイド WebOTX アプリケーション開発ガイドバージョン : 7.1 版数 : 第 2 版リリース : 2010 年 1 月 Copyright (C) 1998-2010 NEC Corporation. All rights reserved. 4-1-1 目次 4. J2EE WebOTX...3 4.1. Webアプリケーション...3 4.1.1. Webアプリケーションを作成する...3

More information

スライド 1

スライド 1 Web プログラミング 2 7. JSP と Servlet による Web プログラミング概要 ( 復習 )Web アプリケーションの実現方式 : 授業で扱う範囲 SSI (Server Side Include) C-Shellなど JSP (Java Server Pages) PHP など Web ブラウザ Internet Done Web サーバ Done JavaApplet JavaScript

More information

Microsoft PowerPoint - Lecture_3

Microsoft PowerPoint - Lecture_3 プログラミング III 第 3 回 : サーブレットリクエスト & サーブレットレスポンス処理入門 Ivan Tanev 講義の構造 1. サーブレットの構造 2. サーブレットリクエスト サーブレットレスポンスとは 3. 演習 2 Lecture2_Form.htm 第 2 回のまとめ Web サーバ Web 1 フォーム static 2 Internet サーブレ4 HTML 5 ットテキスト

More information

Servlet/JSP ( 作成中 ) 2010 年 x 月 x 日作成 Firebird 日本ユーザー会 Naoyuki Sano 1

Servlet/JSP ( 作成中 ) 2010 年 x 月 x 日作成 Firebird 日本ユーザー会 Naoyuki Sano     1 Servlet/JSP ( 作成中 ) 2010 年 x 月 x 日作成 Firebird 日本ユーザー会 Naoyuki Sano http://rururu.sakura.ne.jp/ http://rururublog.sblo.jp/ 1 Servlet/JSP を教わった人 2004/9/25-2005/5/21 秦崇 [ はたたかし ] さん (http:// 秦崇.jp/) 2009

More information

XSLT XSLT xsd XSLT XML xsd XPath <xsl:template ]

XSLT XSLT xsd XSLT XML xsd XPath <xsl:template ] XML Week splat XML XML Web 2005,2006 WS-Security End-to-End XSLT (xsd) XSLT MUST MAY Java class MUST,MAY XSLT XSLT xsd XSLT XML xsd XPath

More information

Part1 159 a a

Part1 159 a a Tomcat 158 Part1 159 a a Tomcat hello World!

More information

XML Week Web 2.0 Day (1) SOA2.0 KM2.0? REST API + XSLT Amazon hon. hon.jp API XML Consortium XML ( ) REST(GET)API Amazon.co.jp hon.jp REST

XML Week Web 2.0 Day (1) SOA2.0 KM2.0? REST API + XSLT Amazon hon. hon.jp API XML Consortium XML ( ) REST(GET)API Amazon.co.jp hon.jp REST XML Week Web 2.0 Day (1) SOA2.0 KM2.0? REST API + XSLT Amazon hon. hon.jp API XML Consortium 2006-05-23 XML ( ) REST(GET)API Amazon.co.jp hon.jp REST + XSLT ( ) hon.jp hon.jp + Aamazon.co.jp Exif to RDF(kanzaki.com)

More information

スライド 1

スライド 1 XML with SQLServer ~let's take fun when you can do it~ Presented by 夏椰 ( 今川美保 ) Agenda( その 1) XML XML XSLT XPath XML Schema XQuery Agenda( その 2) SQLServer における XML XML 型 XML Schema XQuery & XPath チェック制約

More information

Web 1 p.2 1 Servlet Servlet Web Web Web Apache Web Servlet JSP Web Apache Tomcat Jetty Apache Tomcat, Jetty Java JDK, Eclipse

Web 1 p.2 1 Servlet Servlet Web Web Web Apache Web Servlet JSP Web Apache Tomcat Jetty Apache Tomcat, Jetty Java JDK, Eclipse Web 1 p.1 1 Servlet 1.1 Web Web WWW HTML CGI Common Gateway Interface Web HTML Web Web CGI CGI CGI Perl, PHP C Java Applet JavaScript Web CGI HTML 1.2 Servlet Java Servlet Servlet CGI Web CGI 1 Java Java

More information

Microsoft PowerPoint - Lecture_2

Microsoft PowerPoint - Lecture_2 プログラミング Java III 第 2 回 :WebForm および サーブレット入門 Ivan Tanev 講義の構造 1. ダイナミックWebコンテンツとサーブレット 2.Webフォーム 3. 演習 2 1. ダイナミック Web コンテンツとサーブレット 3 1. ダイナミック Web コンテンツとサーブレット Internet Response: HTML テキスト ユーザー 4 1. ダイナミック

More information

Web2.0 REST API + XSLT Amazon hon.jp API XML Consortium XML ( ) REST(GET)API hon.jp Amazon.co.jp Google Map Exif to RDF(kanzaki.com) REST +

Web2.0 REST API + XSLT Amazon hon.jp API XML Consortium XML ( ) REST(GET)API hon.jp Amazon.co.jp Google Map Exif to RDF(kanzaki.com) REST + Web2.0 REST API + XSLT Amazon hon.jp API XML Consortium 2006-04-11 XML ( ) REST(GET)API hon.jp Amazon.co.jp Google Map Exif to RDF(kanzaki.com) REST +XSLT hon.jp hon.jp + Aamazon.co.jp Exif to RDF(kanzaki.com)

More information

PowerPoint Presentation

PowerPoint Presentation プログラミング Java III 第 4 回 : サーブレットの HTTP Request の処理 Ivan Tanev 講義の構造 1. サーブレットの HTTP Request の処理 2. 演習 2 第 3 回のまとめ Internet Explorer のアドレス バー : http://isd-si.doshisha.ac.jp/teaching/programming_3/xxxxxxxx/lecture3_form1.html

More information

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版   Copyright 2018 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. はじめに 2.1. 本書の目的 2.2. 対象読者 2.3. サンプルコードについて 2.4. 本書の構成 3. 辞書項目 API 3.1. 最新バージョン 3.1.1. 最新バージョンの辞書を取得する 3.2. 辞書項目 3.2.1. 辞書項目を取得する 3.2.2.

More information

HTML Java Tips dp8t-asm/java/tips/ Apache Tomcat Java if else f

HTML Java Tips   dp8t-asm/java/tips/ Apache Tomcat Java if else f 1 Servlet 1.1 Web Web WWW HTML CGI Common Gateway InterfaceWeb HTML Web Web CGI CGI CGI Perl C Java Applet JavaScript Web CGI HTML 1.2 Servlet Java Servlet Servlet CGI Web CGI 1 Java / Java Java CGI Servlet

More information

HTML Java Tips dp8t-asm/java/tips/ Apache Tomcat Java if else f

HTML Java Tips   dp8t-asm/java/tips/ Apache Tomcat Java if else f 1 Servlet 1.1 Web Web WWW HTML CGI Common Gateway InterfaceWeb HTML Web Web CGI CGI CGI Perl C Java Applet JavaScript Web CGI HTML 1.2 Servlet Java Servlet Servlet CGI Web CGI 1 Java / Java Java CGI Servlet

More information

II 1 p.1 1 Servlet 1.1 Web Web WWW HTML CGI Common Gateway Interface Web HTML Web Web CGI CGI CGI Perl, PHP C JavaScript Web CGI HTML 1.2 Servlet Java

II 1 p.1 1 Servlet 1.1 Web Web WWW HTML CGI Common Gateway Interface Web HTML Web Web CGI CGI CGI Perl, PHP C JavaScript Web CGI HTML 1.2 Servlet Java II 1 p.1 1 Servlet 1.1 Web Web WWW HTML CGI Common Gateway Interface Web HTML Web Web CGI CGI CGI Perl, PHP C JavaScript Web CGI HTML 1.2 Servlet Java Servlet Servlet CGI Web CGI Java Java JVM Java CGI

More information

II 2 p.2 2 GET POST form action URL Aisatsu 2.1 Servlet GET GET : Query String QueryStringTest.java 1 import java.io.ioexception; 2 import java.io.pri

II 2 p.2 2 GET POST form action URL Aisatsu 2.1 Servlet GET GET : Query String QueryStringTest.java 1 import java.io.ioexception; 2 import java.io.pri II 2 p.1 2 GET POST Servlet Servlet Servlet CGI/Servlet GET POST 2 GET URL? FORM GET : http://maps.google.co.jp/maps?hl=ja&ll=34.292821,134.063587&z=15 POST HTML HTML : Aisatsu.html HTML 1

More information

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   Copyright 2013 NTT DATA INTRAMART CORPORATION 1 Top 目次 intra-mart Accel Platform イベントナビゲータ開発ガイド初版 2013-07-01 改訂情報概要イベントフローの作成 更新 削除をハンドリングするイベントフローを非表示にする回答を非表示にするリンクを非表示にするタイトル コメントを動的に変更するリンク情報を動的に変更するナビゲート結果のリンクにステータスを表示する

More information

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid(text_box02_id); if (001 == statee 全体のヒント 1. テキストボックスの制御 1.1. 日付入力日付の入力ボックスは フォーカスが入った時にスラッショを消し フォーカスが他の項目等に移るとスラッシュが加わるようにする オンフォーカス 20100101 オフフォーカス 2010/01/01 1.1.1 オンフォーカス時にスラッシュを消す入力項目のスラッシュを消すには include/function.js ファイル内の var delslash

More information

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド Brekeke PBX Version 2.1 ARS プラグイン開発ガイド Brekeke Software, Inc. バージョン Brekeke PBX v2.1 ARS プラグイン開発ガイド, 2008 年 2 月 著作権本書の著作権は Brekeke Software, Inc. にあります Copyright 2003-2008 Brekeke Software, Inc. 本書の一部または全部を

More information

Webプログラミング演習

Webプログラミング演習 Web プログラミング演習 STEP11 XSLT を使った画面生成 XML:Extensible Markup Language コンピュータが扱うデータや文書を表現する技術 SGML(Standard Generalized Markup Language) の改良 利用者が自由に拡張可能なマークアップ言語を設計 HTML=SGML を利用して作成された Web ページ記述言語 XHTML=XML

More information

--- サーバ側処理 Java servlet の例 // 通常の Java servlet での POST で受信と同じ protected void dopost(httpservletrequest request, HttpServletResponse response) throws S

--- サーバ側処理 Java servlet の例 // 通常の Java servlet での POST で受信と同じ protected void dopost(httpservletrequest request, HttpServletResponse response) throws S 2 サーバとの連携と BlazeDS Flex アプリケーションではクライアント ( ブラウザ ) で処理できる機能が多いですが データベースへのアクセスや クライアントでは負担が大きい処理などはサーバ側で行います また パソコンのローカルディスクへのアクセスのように セキュリティの都合でクライアントで直接処理できない場合は一旦サーバにアップロードするなどして処理します 2-1 ファイルアップロードファイルをアップロードする場合は

More information

Prog2_10th

Prog2_10th 2013 年 11 月 28 日 ( 木 ) 実施 ファイル操作とディレクトリ操作今回の授業では,Java 言語でのファイル操作とディレクトリ操作とについて学習する ファイル操作ファイル操作は,C 言語プログラミングで学んだように, 次の順序で行う 1) ストリームを開く 2) ストリームからの入力, ストリームへの出力 3) ストリームを閉じる Java 言語では, ファイル操作に関係するクラスが複数用意されている

More information

PowerPoint Presentation

PowerPoint Presentation 上級プログラミング 2( 第 1 回 ) 工学部情報工学科 木村昌臣 今日のテーマ 入出力に関わるプログラムの作り方 ネットワークプログラミングの続き TCP の場合のプログラム 先週のプログラムの詳細な説明 URLクラス サーバープログラムの例 データ入出力プログラミングの復習 テキストの読み込み関係のクラス テキストからデータを読み込むときには 通常 三段構えで行う バイナリデータとして読み出し

More information

.xml.xsl bcs.dtd 2. 提案 BCS.DTD のエレメントと属性 BCS.DTD のエレメントの属性を以下に示す 出 エレメント説明 現 属性 下位構造 数 code 適宜工事コード等を記述する 任 意 Common Docinfo Reference UkeoiKeiyakusyoHikaeSoufusyo KoujiTyakusyuTodoke SongaihokenKeiyakuHoukokusyo

More information

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None クイック検索検索 目次 Copyright 2013 NTT DATA INTRAMART CORPORATION 1 Top 目次 intra-mart Accel Platform イベントナビゲータ開発ガイド初版 2013-07-01 None 改訂情報概要イベントフローの作成 更新 削除をハンドリングするイベントフローを非表示にする回答を非表示にするリンクを非表示にするタイトル コメントを動的に変更するリンク情報を動的に変更するナビゲート結果のリンクにステータスを表示する

More information

Webデザイン論

Webデザイン論 2008 年度松山大学経営学部開講科目 情報コース特殊講義 Web デザイン論 檀裕也 (dan@cc.matsuyama-u.ac.jp) http://www.cc.matsuyama-u.ac.jp/~dan/ 出席確認 受講管理システム AMUSE を使って 本日の出席登録をせよ 学籍番号とパスワードを入力するだけでよい : http://davinci.cc.matsuyama-u.ac.jp/~dan/amuse/

More information

Microsoft PowerPoint _2b-DOM.pptx

Microsoft PowerPoint _2b-DOM.pptx 要素ノードの参照 プロパティで参照可能な親 子 兄弟ノード 要素ノードの他に, テキストノード, ノード, コメントノードなど様々なノードが含まれる ( 処理中に判別が必要 ) 要素ノードのみ参照するプロパティ プロパティ 参照先 parentelement 親要素 firstelementchild 先頭の子要素 lastelementchild 末尾の子要素 nextelementsibng 直後の兄弟要素

More information

実験 5 CGI プログラミング 1 目的 動的にWebページを作成する手法の一つであるCGIについてプログラミングを通じて基本的な仕組みを学ぶ 2 実験 実験 1 Webサーバの設定確認と起動 (1)/etc/httpd/conf にある httpd.conf ファイルの cgi-bin に関する

実験 5 CGI プログラミング 1 目的 動的にWebページを作成する手法の一つであるCGIについてプログラミングを通じて基本的な仕組みを学ぶ 2 実験 実験 1 Webサーバの設定確認と起動 (1)/etc/httpd/conf にある httpd.conf ファイルの cgi-bin に関する 実験 5 CGI プログラミング 1 目的 動的にWebページを作成する手法の一つであるCGIについてプログラミングを通じて基本的な仕組みを学ぶ 2 実験 実験 1 Webサーバの設定確認と起動 (1)/etc/httpd/conf にある httpd.conf ファイルの cgi-bin に関する次の項目を調べよ このとき CGIプログラムを置く場所 ( CGI 実行ディレクトリ) と そこに置いたCGIプログラムが呼び出されるURLを確認せよ

More information

PowerPoint Presentation

PowerPoint Presentation 上級プログラミング 2( 第 7 回 ) 工学部情報工学科 木村昌臣 今日のテーマ Web アプリケーションとは Web アプリケーションとはなにか Web アプリケーションの仕組み 三層アプリケーション サーブレット JSP JavaBeans MVC モデル Web アプリケーションの環境構築 Web サーバー (Apache) Web アプリケーションサーバー (Tomcat) Web アプリケーションとは

More information

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説 Java セキュアコーディングセミナー東京第 3 回入出力と例外時の動作 演習解説 2012 年 11 月 11 日 ( 日 ) JPCERT コーディネーションセンター脆弱性解析チーム戸田洋三 1 Hands-on Exercises コンパイルエラーに対処しよう ファイルからのデータ入力を実装しよう 2 Hands-on Exercise(1) サンプルコードの コンパイルエラーに対処しよう 3

More information

Web JavaScript Java Applet Flash ActionScript CGI (C, perl, ruby ) PHP Servlet, JSP (JavaServer Pages) ASP 7-2

Web JavaScript Java Applet Flash ActionScript CGI (C, perl, ruby ) PHP Servlet, JSP (JavaServer Pages) ASP 7-2 Servlet 7-1 Web JavaScript Java Applet Flash ActionScript CGI (C, perl, ruby ) PHP Servlet, JSP (JavaServer Pages) ASP 7-2 Servlet Java CGI Tomcat Apache+Tomcat JSP Web HTML Java Java Servlet ( ) 7-3 Servlet

More information

9iAS_DEV.PDF

9iAS_DEV.PDF Oracle9i Application Server for Windows NT 1.0.2.0.0 2001.2.1 1 1 PL/SQL...3 1.1...3 1.2 PL/SQL Web Toolkit...5 1.3 Database Access Descriptor...6 1.4 PL/SQL...8 1.5 PL/SQL...10 1.6 PL/SQL...12 2 SERVLET...13

More information

... 2 1 Servlet... 3 1.1... 3 1.2... 4 2 JSP... 6 2.1... 6 JSP... 6... 8 2.2... 9 - Servlet/JSP における 日 本 語 の 処 理 - 1

... 2 1 Servlet... 3 1.1... 3 1.2... 4 2 JSP... 6 2.1... 6 JSP... 6... 8 2.2... 9 - Servlet/JSP における 日 本 語 の 処 理 - 1 Servlet/JSP Creation Date: Oct 18, 2000 Last Update: Mar 29, 2001 Version: 1.1 ... 2 1 Servlet... 3 1.1... 3 1.2... 4 2 JSP... 6 2.1... 6 JSP... 6... 8 2.2... 9 - Servlet/JSP における 日 本 語 の 処 理 - 1 Servlet

More information

Android Layout SDK プログラミング マニュアル

Android Layout SDK プログラミング マニュアル プログラミングマニュアル Version 1.3.0 用 更新履歴 年月日 バージョン 履歴 2014.09.08 1.2.0.0 新規 (Layout Utilities ユーザーズ ガイド ) 2016.08.16 1.3.0.0 モバイル端末用レイアウトで直線部品と矩形部品に対応 モバイル端末用レイアウトファイルを CLFX から XML へ変更 Layout Print Engine から

More information

オブジェクト指向プログラミング・同演習 5月21日演習課題

オブジェクト指向プログラミング・同演習 5月21日演習課題 オブジェクト指向プログラミング 同演習 5 月 21 日演習課題 問題 1 配列の例外処理例外が発生する可能性のある処理を try で囲み その後に catch で例外を捕捉します 例外処理の終了処理として finally が行われます これは書かなくて自動的に行われます 提出課題 1 (Kadai052301.java) 以下のプログラムは例外処理をしていない ArrayIndexOutOfBoundsException

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 演習 9 入力した条件に従いデータベースからデータを抽出する 1 演習 9 製品情報を取得するサンプル パソコン製品情報が格納された表から 任意のメーカー IDを取得するプログラムの構造を検討する sample1.htm sample1.asp SDEV_MST_PRODUCT 2 データベース クライアント サーバー PC_KATABAN KOBAN MAKER_ID HD-0001 1 NED

More information

Web データ管理 JavaScript (1) (4 章 ) 2011/12/7( 水 ) 湘南工科大学講義資料 Web データ管理 (2011) 阿倍 1/21

Web データ管理 JavaScript (1) (4 章 ) 2011/12/7( 水 ) 湘南工科大学講義資料 Web データ管理 (2011) 阿倍 1/21 Web データ管理 JavaScript (1) (4 章 ) 2011/12/7( 水 ) 1/21 演習室の PC のハードディスクには演習で作成したデータは保管できません 各 PC の ネットワーク接続 ショートカットからメディア情報センターのサーバーにアクセスしてください (Z ドライブとして使用できます ) 演習名 使用するフォルダ 演習 1 Z: Web データ管理 20111207 演習

More information

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~ .NET プログラマー早期育成ドリル VB 編 付録文法早見表 本資料は UUM01W:.NET プログラマー早期育成ドリル VB 編コードリーディング もしくは UUM02W:.NET プログラマー早期育成ドリル VB 編コードライティング を ご購入頂いた方にのみ提供される資料です 資料内容の転載はご遠慮下さい VB プログラミング文法早見表 < 基本文法 > 名前空間の定義 Namespace

More information

演習室の PC のハードディスクには演習で作成したデータは保管できません 各 PC の ネットワーク接続 ショートカットからメディア情報センターのサーバーにアクセスしてください (Z ドライブとして使用できます ) 講義で使うフォルダ 2/23

演習室の PC のハードディスクには演習で作成したデータは保管できません 各 PC の ネットワーク接続 ショートカットからメディア情報センターのサーバーにアクセスしてください (Z ドライブとして使用できます ) 講義で使うフォルダ 2/23 Web データ管理 CGI (3 章 ) 2011/11/30( 水 ) 1/23 演習室の PC のハードディスクには演習で作成したデータは保管できません 各 PC の ネットワーク接続 ショートカットからメディア情報センターのサーバーにアクセスしてください (Z ドライブとして使用できます ) 講義で使うフォルダ 2/23 CGI とは Common Gateway Interface の略 通常のページでは

More information

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文 Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文字 0x0000 ~ 0xffff byte 1バイト整数 - 2 8 ~ 2 8-1 short 2バイト整数

More information

JavaScript 演習 2 1

JavaScript 演習 2 1 JavaScript 演習 2 1 本日の内容 演習問題 1の解答例 前回の続き document.getelementbyid 関数 演習問題 4 イベント処理 基本的なフォーム テキストボックスの入力値の取得 演習問題 5 演習問題 1 prompt メソッドと document.write メソッドを用いて, ユーザから入力されたテキストと文字の色に応じて, 表示内容を変化させる JavaScript

More information

Java講座

Java講座 ~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト

More information

Gartner Day

Gartner Day J2EE 1 J2EE C AP 2 J2EE AP DD java *.class java *.class java *.class *.class DD EAR, WAR, JAR orionapplicationclient.xmweb.xmapplication.jar.xml orion- orion-ejb- ml Oracle Application Server 10g *.jsp

More information

E4X in Firefox nanto_vi (TOYAMA Nao)

E4X in Firefox nanto_vi (TOYAMA Nao) E4X in Firefox nanto_vi (TOYAMA Nao) 自己紹介 外山真 ( とやまなお ) a.k.a. nanto_vi ( なんと ) http://www.ne.jp/asahi/nanto/moon/ http://nanto.asablo.jp/blog/ 肩書き : 学生 Not in Education, Employment or Training E4X とは?

More information

演習室の PC のハードディスクには演習で作成したデータは保管できません 各 PC の ネットワーク接続 ショートカットからメディア情報センターのサーバーにアクセスしてください (Z ドライブとして使用できます ) Web プログラミング 1 CGI (3 章 ) 2012/6/12( 水 ) 講義

演習室の PC のハードディスクには演習で作成したデータは保管できません 各 PC の ネットワーク接続 ショートカットからメディア情報センターのサーバーにアクセスしてください (Z ドライブとして使用できます ) Web プログラミング 1 CGI (3 章 ) 2012/6/12( 水 ) 講義 演習室の PC のハードディスクには演習で作成したデータは保管できません 各 PC の ネットワーク接続 ショートカットからメディア情報センターのサーバーにアクセスしてください (Z ドライブとして使用できます ) Web プログラミング 1 CGI (3 章 ) 2012/6/12( 水 ) 講義で使うフォルダ 1/23 2/23 CGI とは Common Gateway Interface の略

More information

Webプログラミング演習

Webプログラミング演習 Web プログラミング演習 特別編 いいね ボタンの実装 いいね ボタン ( 英語では Like) Facebook で, 他の人のコンテンツ ( コメント 写真など ) の支持を表明するためのボタン クリックすると, 自分の Facebook のタイムラインに支持したことが記録される ( コメントを同時投稿することも可能 ) 友達のニュースフィードに表示 コンテンツ毎にクリックしたユーザ数がカウントされる

More information

1/8 ページ Java 基礎文法最速マスター Java Javaの文法一覧です 他の言語をある程度知っている人はこれを読めばJavaの基礎をマスターしてJavaを書くことができるようになっています 簡易リファレンスとしても利用できると思いますので これは足りないと思うものがあれば教えてください 1. 基礎 class の作成プログラムはclassに記述します たとえばSampleという名前のclassを作る場合

More information

2003年度 情報処理概論

2003年度 情報処理概論 提出課題 課題 1( 提出課題 ): 利用者の情報を入力し 登録 ボタンを押すと, 入力されたデータで利用者 (user) テーブルにレコードを新規登録する Web ページを作りましょう. 手順 1:HTML のファイル ( 利用者情報の入力 Web ページ ) を input_regist_user.html という名前で作業フォルダに作成する. 手順 2:DB に登録処理を行う PHP プログラムのファイルを

More information

JavaScript演習

JavaScript演習 JavaScript 演習 2 1 本日の内容 prompt 関数 演習 1 演習 2 document.getelementbyid 関数 演習 3 イベント処理 基本的なフォーム テキストボックスの入力値の取得 演習 4 IE における JavaScript のデバッグ方法 1. ツール インターネットオプションメニューを実行 2. 詳細設定タブの スクリプトエラーごとに通知を表示する をチェック

More information

ビジネスサーバ設定マニュアル_Standard応用編

ビジネスサーバ設定マニュアル_Standard応用編 ビジネスサーバ シリーズ設定マニュアル ~Standard 応用編 ~ 本マニュアルの内容は サービスの各機能に関する解説資料としてご利用いただくことを目的としております 設定変更にあたっては 予め変更対象のファイル等のバックアップを取られることをお奨め致します ( 弊社側でのファイル復旧は出来ませんのでご注意ください ) 第 1.3 版 株式会社 NTT ぷらら 本ご案内に掲載している料金等は消費税相当額を含んでおりません

More information

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac Actual4Test http://www.actual4test.com Actual4test - actual test exam dumps-pass for IT exams Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN

More information

http://localhost:8080 /idoapp/helloworld server-ido request HTML ttp://localhost:8080 /idoapp/helloworld ):8080 /idoapp/helloworld http://(ip import java.io.*; import javax.servlet.*; import javax.servlet.http.*;

More information

C:\Apache Software Foundation\Apache2.2\htdocs\sample\login.html サンプルプログラム passworddisc.php <head><title> ログイン </title></head> $user=$_post['user']; $

C:\Apache Software Foundation\Apache2.2\htdocs\sample\login.html サンプルプログラム passworddisc.php <head><title> ログイン </title></head> $user=$_post['user']; $ PHP を利用すると 動的に Web ページを生成することが出来る 予め HTML ファイルを準備しておき その内で必要に応じてスクリプトを記載することで Web アプリケーションを容易に開発することが出来る Java に比べて 比較的にサーバーの設定などが 簡単である ホームページから PHP 応用演習ソースプログラム をダウンロードして C:\Apache Software Foundation\Apache2.2\htdocs\sample\

More information

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

Javaセキュアコーディングセミナー2013東京第1回 演習の解説 Java セキュアコーディングセミナー東京 第 1 回オブジェクトの生成とセキュリティ 演習の解説 2012 年 9 月 9 日 ( 日 ) JPCERT コーディネーションセンター脆弱性解析チーム戸田洋三 1 演習 [1] 2 演習 [1] class Dog { public static void bark() { System.out.print("woof"); class Bulldog

More information

XMLプログラミング(DOM編)

XMLプログラミング(DOM編) XML プログラミング DOM に依る XML 文書の操作 DOM と DOMDocument オブジェクト プログラミング言語から XML を扱うには DOM(Document Object Model) と呼ばれるプログラミングインターフェイスを利用するのが最も簡単で有る DOM は Internet Explorer 5.x 以降の XML パーサ (MSXML) に実装されて居る DOMDocument

More information

XMLの利用(XMLとXSL)

XMLの利用(XMLとXSL) XML の利用 XML(Extensible Markup Language) とは XML の基礎知識 XML とは WC(World Wide Web Consortium) で標準化された情報記述言語で有る 情報記述言語には HTML(Hyper Text Markup Language) が有り インターネット上の文書を標準化し世界規模の文書の閲覧を可能に仕たが 固定的なタグしか使用出来ない為

More information

JAVA入門

JAVA入門 JAVA 入門後期 10 情報処理試験例題解説 H14 年度秋問 8 次の Java プログラムの説明及びプログラムを読んで, 設問に答えよ プログラムの説明 ディジタル論理回路シミュレータを作成するためのクラスとテスト用クラスである (1) ゲートを表す抽象クラス Gate のサブクラスとして, NOT ゲートを表すクラス NotGate 及び AND ゲートを表すクラス AndGate を定義する

More information

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲 Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲を決定します 次の型が利用でき これらの型は特に基本型とよばれます 基本型 値の種類 値の範囲 boolean

More information

プログラミング入門1

プログラミング入門1 プログラミング入門 2 第 8 回表形式データ (1) 1 テーマ : 表形式データ (1) 配列と複合データを用いた表形式データ データの登録 データの検索 データの更新 実際的はソフトウェアでは 表形式データの ( 例えば データベースのデータ ) を利用する場面が非常に多く とても重要である そこで 表形式を扱うプログラミングを繰り返しとりあげる 2 テーマ : 表形式データ (1) 配列と複合データを用いた表形式データ

More information

Microsoft Word - PHP演習資料.doc

Microsoft Word - PHP演習資料.doc PHP 概要ホームページは 毎回同じ画面しか表示する事が出来ない 従って ログインごとにパスワード認証をしたり 現在の時刻を表示したりするためには プログラムで HTML の構文を動的に作成する必要がある 一般的には Java や C# が使われるが それらは多少大がかりな仕掛けが必要になる 従ってプロバイダのレンタルサーバ等で 利用できるプログラムは 基本的には Pearl や PHP しか無い

More information

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String 目次 1.SqlCtl クラスリファレンス 2 (1)Connect() メソッド 2 (2)DisConnect() メソッド 3 (3)Commit() メソッド 3 (4)Rollback() メソッド 4 2.SqlStm クラスリファレンス 5 (1)Prepare() メソッド 5 (2)Execute() メソッド 6 (3)Release() メソッド 6 (4)Immediate()

More information

Prog1_6th

Prog1_6th 2019 年 10 月 31 日 ( 木 ) 実施配列同種のデータ型を有する複数のデータ ( 要素 ) を番号付けして, ひとまとまりの対象として扱うものを配列と呼ぶ 要素 point[0] point[1] point[2] point[3] point[4] 配列 配列の取り扱いに関して, 次のような特徴がある 1. プログラム中で用いる配列変数 ( 配列の本体を参照する参照型の変数 ) は必ず宣言しておく

More information

Microsoft PowerPoint - 05XMLによるデータの表現.pptx

Microsoft PowerPoint - 05XMLによるデータの表現.pptx 九州大学工学府海洋システム工学専攻講義資料担当 : 木村船舶海洋情報学 05. XMLによるデータの表現 XML(Extensible Markup Language) 情報を保管 ラベル付け 構造化 または保護するための コンテナ のようなもの異なるシステムが相互にコミュニケーションするための手段 基盤 1) データは XML 文書 ( テキスト ) で表現される 2) タグによって情報は 要素

More information

think9i Oracle Internet File System i を使用した ソフトウェア開発手法 日本オラクル株式会社製品本部システム製品マーケティング部 Copyright 2001 Oracle Corporation Japan. All Rights Reserved.

think9i Oracle Internet File System i を使用した ソフトウェア開発手法 日本オラクル株式会社製品本部システム製品マーケティング部 Copyright 2001 Oracle Corporation Japan. All Rights Reserved. think9i Oracle Internet File System i を使用した ソフトウェア開発手法 日本オラクル株式会社製品本部システム製品マーケティング部 1. Oracle 9iFS SDK とは 2. Oracle 9iFS SDK でカスタマイズできる機能 3. Oracle 9iFS の開発環境 4. デモンストレーション 5. Oracle 9iFS Java API を使用した基本的なプログラム

More information

第7回 Javascript入門

第7回 Javascript入門 Slide URL https://vu5.sfc.keio.ac.jp/slide/ Web 情報システム構成法第 9 回 JavaScript 入門 (2) 萩野達也 (hagino@sfc.keio.ac.jp) 1 JavaScript 入門 ( 前回 ) オブジェクト指向について JavaScriptの誕生プロトタイプベースのオブジェクト指向 言語 構文および制御構造 代入条件文繰り返し関数

More information

Prog2_12th

Prog2_12th 2018 年 12 月 13 日 ( 木 ) 実施クラスの継承オブジェクト指向プログラミングの基本的な属性として, 親クラスのメンバを再利用, 拡張, または変更する子クラスを定義することが出来る メンバの再利用を継承と呼び, 継承元となるクラスを基底クラスと呼ぶ また, 基底クラスのメンバを継承するクラスを, 派生クラスと呼ぶ なお, メンバの中でコンストラクタは継承されない C# 言語では,Java

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅱ 10 回目への出力 ストリーム ストリームとは入力または出力の流れをもつデータの連鎖ですストリームは異なる機器からのデータを統一的に扱う考え方です 文字ストリーム 文字ベースの入出力をサポートします - Unicode(Java 内部 ) とローカルコード (Java 外部 ) の変換が行われ プログラマはその違いを意識しなくてすみます バイトストリームバイナリデータの入出力をサポートします

More information

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版   Copyright 2012 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. IM- 共通マスタの拡張について 2.1. 前提となる知識 2.1.1. Plugin Manager 2.2. 表記について 3. 汎用検索画面の拡張 3.1. 動作の概要 3.1.1. 汎用検索画面タブの動作概要 3.2. 実装の詳細 3.2.1. 汎用検索画面タブの実装

More information

第1章 ビジュアルプログラミング入門

第1章 ビジュアルプログラミング入門 付録 A 既存のクラスの利用の仕方 第 7 章では フレームクラス (NewJFrame.java) とそこから呼び出されるクラス (Meibo.java など ) を同じプロジェクト内 つまり同じパッケージ内に定義しました しかし 一般には 別のパッケージ ( フォルダ ) に保管されているクラスを利用する場合があります ここでは その方法を説明します なお フォルダは Java の用語ではパッケージに対応するので

More information

Javaプログラムの実行手順

Javaプログラムの実行手順 戻り値のあるメソッド メソッドには 処理に使用する値を引数として渡すことができました 呼び出し 側からメソッドに値を渡すだけでなく 逆にメソッドで処理を行った結果の値を 呼び出し側で受け取ることもできます メソッドから戻してもらう値のことを もどりち戻り値といいます ( 図 5-4) 図 5-4. 戻り値を返すメソッドのイメージ 戻り値を受け取ることによって ある計算を行った結果や 処理に成功したか失

More information

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt) 独習 JAVA 第 3 版 8.4 例外とエラークラス 8.5 throws ステートメント 8.6 独自の例外 Throwable コンストラクタ catch ブロックには Throwable 型のパラメータが必ず 1 つなければならない Throwable コンストラクタ Throwable() Throwable( String message ) message には問題を通知する文字列のメッセージ

More information

Prog1_15th

Prog1_15th 2017 年 7 月 27 日 ( 木 ) 実施 応用プログラム (3) キー検索 コレクションには, ハッシュテーブルと呼ばれるものがある これは, キー (key) と値 (value) とを組として保持しているものである 通常の配列が添字により各要素にアクセス出来るのに比べて, ハッシュテーブルではキーを用いて各値にアクセスすることが出来る キー及びそのキーから連想される値の組を保持していることから,

More information

WEBシステムのセキュリティ技術

WEBシステムのセキュリティ技術 WEB システムの セキュリティ技術 棚橋沙弥香 目次 今回は 開発者が気をつけるべきセキュリティ対策として 以下の内容について まとめました SQLインジェクション クロスサイトスクリプティング OSコマンドインジェクション ディレクトリ トラバーサル HTTPヘッダ インジェクション メールヘッダ インジェクション SQL インジェクションとは 1 データベースと連動した Web サイトで データベースへの問い合わせや操作を行うプログラムにパラメータとして

More information

052-XML04/fiÁ1-part3-’ÓŠ¹

052-XML04/fiÁ1-part3-’ÓŠ¹ & XML Data Store Part 3 Feature*1 AKIMOTO, Shougo i i i i i i inter 52 XML Magazine 04 i i i i i i i i P a r t 3 i i i i i XML Magazine 04 53 & XML Data Store Feature*1 i i inter i inter i inter inter

More information

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spark API との通信 このラーニングモジュールでは Python を使用した Spark API とのインターフェイスを扱います

More information

KeyWeb Creator 概要 What s KeyWeb Creator? 動的なホームページを作成するためのツール!! 従来の Web ページ DB を利用した Web ページ <HTML> <HEAD> <TITLE>show_book</TITLE> </HEAD> <BODY> <DI

KeyWeb Creator 概要 What s KeyWeb Creator? 動的なホームページを作成するためのツール!! 従来の Web ページ DB を利用した Web ページ <HTML> <HEAD> <TITLE>show_book</TITLE> </HEAD> <BODY> <DI KeyWeb Creator R3.0 Beta 日本オラクル株式会社システム製品マーケティング部 1 KeyWeb Creator 概要 What s KeyWeb Creator? 動的なホームページを作成するためのツール!! 従来の Web ページ DB を利用した Web ページ show_book

More information

情報処理Ⅰ

情報処理Ⅰ Java フローチャート -1- フローチャート ( 流れ図 ) プログラムの処理手順 ( アルゴリズム ) を図示したもの 記号の種類は下記のとおり 端子記号 ( 開始 終了 ) 処理記号計算, 代入等 条件の判定 条件 No ループ処理 LOOP start Yes データの入力 出力 print など 定義済み処理処理名 end サンプルグログラム ( 大文字 小文字変換 ) 大文字を入力して下さい

More information

基礎計算機演習 実習課題No6

基礎計算機演習 実習課題No6 実習課題 No.6 課題は 3 題ある. 課題 6-1 時間内提出 次の実行例のように, 名簿を出力するプログラムをつくりたい. このプログラムでは, まず人数をたずね, 次にその人数分の名前を入力し, それを再びコンソールに出力する. なお, 空の名前が入力されても終了せずにその欄は空欄で出力するものとする. 注意とヒント この課題では,string 型の配列をまず宣言する. このとき, 配列の要素はちょうど名簿に入力する人数分だけを宣言すること

More information

デジタル表現論・第6回

デジタル表現論・第6回 デジタル表現論 第 6 回 劉雪峰 ( リュウシュウフォン ) 2016 年 5 月 16 日 劉 雪峰 ( リュウシュウフォン ) デジタル表現論 第 6 回 2016 年 5 月 16 日 1 / 16 本日の目標 Java プログラミングの基礎配列 ( 復習 関数の値を配列に格納する ) 文字列ファイルの書き込み 劉 雪峰 ( リュウシュウフォン ) デジタル表現論 第 6 回 2016 年

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 3 回目変数 今日の講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能です 変数は 型 ( データ型ともいいます ) と識別子をもちます 2 型 変数に記憶できる値の種類です型は 値の種類に応じて次の 8 種類があり これを基本型といいます 基本型値の種類値の範囲または例 boolean 真偽値 true または

More information

プレポスト【問題】

プレポスト【問題】 コース名 : サーブレット /JSP/JDBC プログラミング ~Eclipse による開発 ~ 受講日 氏名 1 JDBC の説明として 間違っているものを 1 つ選びなさい 1. JDBC を使用してデータベースへアクセスするときには JDBC API が必要である 2. JDBC API は java.lang パッケージとして提供されている 3. JDBC には JDBC API JDBC

More information

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の まで処理しますどれにも一致致しない場合 default: から直後の まで処理します 式の結果 ラベル 定数 整数または文字 (byte, short, int,

More information

Dolteng Scaffoldに対する機能追加とマスタ-ディテールScaffoldの紹介

Dolteng Scaffoldに対する機能追加とマスタ-ディテールScaffoldの紹介 Dolteng Scaffold に対する機能追加 とマスタ - ディテール Scaffold の紹介 せいいち (takao) 2009/03/07 目次 Dolteng Scaffold に対する機能追加 Scaffold に関して Ruby on Rails の Scaffold RoR Scaffold と Dolteng Scaffold の比較 Scaffold のデモ Scaffold

More information

問題1 以下に示すプログラムは、次の処理をするプログラムである

問題1 以下に示すプログラムは、次の処理をするプログラムである 問題 1 次に示すプログラムは 配列 a の値を乱数で設定し 配列 a の値が 333 より大きく 667 以下の値 の合計値を求めるプログラムである 1 と 2 に適切なコードを記述してプログラムを完 成させよ class TotalNumber { public static void main(string[] args) { int[] a = new int[1000]; // 1 解答条件

More information

橡SPA2000.PDF

橡SPA2000.PDF XSLT ( ) d-oka@is.s.u-tokyo.ac.jp ( ) hagiya@is.s.u-tokyo.ac.jp XSLT(eXtensible Stylesheet Language Transformations) XML XML XSLT XSLT XML XSLT XML XSLT XML XML XPath XML XSLT XPath XML XSLT,XPath 1 XSLT([6])

More information

IT プロジェクト

IT プロジェクト オブジェクト指向設計による卓球 ゲームの試作 (2) 劉少英 情報科学部コンピュータ科学科 Email:sliu@hosei.ac.jp ホームページ : http://cis.k.hosei.ac.jp/~sliu/ 講義内容 1. 卓球ボールをテーブルの上に移動させる 2. 関連しているクラスにメソッドを加える 3. プログラムの文書化技術 1. 卓球ボールをテーブルの上に 移動させる 8 9

More information

データアダプタ概要

データアダプタ概要 データベース TableAdapter クエリを実行する方法 TableAdapter クエリは アプリケーションがデータベースに対して実行出来る SQL ステートメントやストアドプロシージャで TableAdapter で型指定されたメソッドと仕て公開される TableAdapter クエリは 所有るオブジェクトのメソッドと同様に 関連付けられたメソッドを呼び出す事に依り実行出来る TableAdapter

More information

フォームとインナー HTML を使って動的にページ内の文章を変更しよう 問題 1. つぎの指示と画面を参考に HTML を組みなさい 仕様 テキストボックスに任意の文字を入力し [ コメント ] ボタンをクリックすると 下部の文章がテキストボックスの内容に置き換わる フォーム名 : f1 テキストボ

フォームとインナー HTML を使って動的にページ内の文章を変更しよう 問題 1. つぎの指示と画面を参考に HTML を組みなさい 仕様 テキストボックスに任意の文字を入力し [ コメント ] ボタンをクリックすると 下部の文章がテキストボックスの内容に置き換わる フォーム名 : f1 テキストボ フォームとインナー HTML を使って動的にページ内の文章を変更しよう 問題 1. つぎの指示と画面を参考に HTML を組みなさい 仕様 テキストボックスに任意の文字を入力し [ コメント ] ボタンをクリックすると 下部の文章がテキストボックスの内容に置き換わる フォーム名 : f1 テキストボックス名 : t1 関数名 : MM() test-a.htm function MM(){ a=document.f1.t1.value;

More information

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1 Java (9) 1 Lesson 7 2008-05-20 Java System.out.println() 1 Java API 1 Java Java 1 GUI 2 Java 3 1.1 5 3 1.0 10.0, 1.0, 0.5 5.0, 3.0, 0.3 4.0, 1.0, 0.6 1 2 4 3, ( 2 3 2 1.2 Java (stream) 4 1 a 5 (End of

More information

情報システム設計論II ユーザインタフェース(1)

情報システム設計論II ユーザインタフェース(1) 中村研究室ゼミ Web API / 取り込んで利用する 中村聡史 1 PHP + MySQL どうでした? データを集めるのが大変 データベースを構築するのが大変 データを入力してくのが大変 2 3 API Web API とは? Application Program Interface( 何らかの機能をプログラミングするための仕組み ) メソッド名 + 引数で何らかの動作を実現する! Web API

More information

HighLight.java import java.io.bufferedreader; import java.io.file; import java.io.fileinputstream; import java.io.ioexception; import java.io.inputstr

HighLight.java import java.io.bufferedreader; import java.io.file; import java.io.fileinputstream; import java.io.ioexception; import java.io.inputstr 2 GET POST Servlet Servlet Servlet CGI/Servlet GET POST 2 GET URL? FORM GET : http://maps.google.co.jp/maps?hl=ja&ll=34.292821,134.063587&z=15 POST HTML HTML : Aisatsu.html HTML

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 独習 Java ( 第 3 版 ) 6.7 変数の修飾子 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 Object クラスと Class クラス 6.7 変数の修飾子 (1/3) 変数宣言の直前に指定できる修飾子 全部で 7 種類ある キーワード final private protected public static transient volatile 意味定数として使える変数同じクラスのコードからしかアクセスできない変数サブクラスまたは同じパッケージ内のコードからしかアクセスできない変数他のクラスからアクセスできる変数インスタンス変数ではない変数クラスの永続的な状態の一部ではない変数不意に値が変更されることがある変数

More information