2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明 Webプログラミング2 8. JSPによるWebプログラミング(1) 9. JSPによるWebプログラミング(2) 10. JSPによるWebプログラミング(3) 11. JSPによるWebプログラミング(4)
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
Webプログラミング2
8. JSPによるWebプログラミング(1)
9. JSPによるWebプログラミング(2)
10. JSPによるWebプログラミング(3)
11. JSPによるWebプログラミング(4)
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
Web ブラウザ
エディタ等 ①作成
③確認
PC(クライアント/Webサーバ)
Tomcat
・コンテンツ: samp.html samp.jsp
mydir
http://localhost:8080/mydir/
index.html
samp.html
samp.jsp
②配置
(復習)動作概要(JSP)
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
(復習)JSPの書式
●JSP 書式 : ディレクティブ <%@ %> JSPから生成されるServletを制御 宣言部 <%! %> 定数、メンバ変数、ユーザ定義メソッドを定義 スクリプトレット<% %> スクリプトの記述 式 <%= %> out.println( ); の短縮系 コメント <%-- --%> コメントアウト
<%@ page contentType="text/html;charset=Shift_JIS" %> <HTML><TITLE>samp</TITLE><BODY> <%-- これは練習です。 --%> <%! int flag=100; %> <% out.print("Hello World!"); out.print("<BR>"); out.print(new java.util.Date()); out.print( flag+100 ); %> <BR> <%= "Hello World" %> </BODY></HTML>
例
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
(復習)JSPプログラミング方法
●とりあえずやってみる(HTML+JSP)
・動作確認:mydir 配下に以下を配置
samp.html <HTML> <TITLE>sample</TITLE> <BODY> Hello World <BR> </BODY> </HTML>
http://localhost:8080/mydir/samp.html または http://127.0.0.1:8080/mydir/samp.html
・ブラウザから以下のURLで確認
samp.jsp <%@ page contentType="text/html;charset=Shift_JIS" %> <HTML> <TITLE>sample</TITLE> <BODY> <%= "Hello World" %> <BR> </BODY> </HTML>
http://localhost:8080/mydir/samp.jsp または http://127.0.0.1:8080/mydir/samp.jsp
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
演習
(自分の好きなもの得意なものの) 紹介サイト/解説サイトの開発
レストランや居酒屋の紹介サイト、地域やクラブの紹介サイト 車やスポーツ選手の解説サイトなど扱うテーマは自由 例えば: 料理や目的別に分類されたカテゴリの中から目的のお店(レシピ)を選ぶと、そのお店(レシピ)の詳細が表示される。 そこを訪問(作ってみた)人の感想も書き込めるようになっている。 必要に応じて検索できるようになっている。
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
(1)ソースコードを共有フォルダから入手 (2)改造方針を決めて改造(ブラウザで動作確認) ・システムのテーマを決める ⇒ コンテンツの中身を決める コンテンツを作る ・つくりを細かくする ⇒ 見た目をきれいにする ・規模を大きくする ⇒ データを増やす ・追加機能を作る ⇒ 検索できるようにする データを入力できるようにする など (3)できたものをクラスで発表、レポートとして提出
演習の進め方
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
トップ画面 メイン画面
Enter
レシピナビ
ロゴ
ボタン クリックでメイン画面に遷移
(2)トップ画面
index.html
enter.jpg
logo.jpg
画面例
(1) 画面遷移
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
料理1 料理2 料理3 料理4 ・ ・ ・
写真
料理名のタイトル
説明文
コンテンツのメニュー 料理名をクリックで右 画面に料理のレシピ が表示される 初期画面はなにも表示されない
料理1 料理2 料理3 料理4 ・ ・ ・
(3)メイン画面 main.html
menu.jsp
fristpage.html
show.jsp
画面例
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
1.ファイル構造 本システムは次のようなファイルの配置構造をとる。
mydir WEB-INF
Index.html
main.html
img
data
fristpage.html
menu.jsp
show.jsp
enter.jpg logo.jpg
XXXX1.txt
XXXX1.jpg
XXX10.txt
XXX10.jpg
・・・
・・・
構造例
学籍番号 フォルダ (number)
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
2.ファイルリスト 本システムで作成するファイルは次のとおりである。 (1)画像ファイル logo.jpg ・・・ 本システムのロゴ画像 enter.jpg ・・・ 本システムに入るためのアイコン content01.jpg ・・・ 同じファイル名のコンテンツに対応した画像ファイル ・・・ (コンテンツの数だけファイルを用意する) content10.jpg (2)HTMLファイル index.html ・・・ 本システムのトップページ main.html ・・・ 本システムのメインページ(フレームの設定ファイル) firstpage.html ・・・ 本システムのメインページにおける初期画面 (3)JSPファイル menu.jsp ・・・ コンテンツリストを生成するjspファイル show.jsp ・・・ 指定したコンテンツを表示するjspファイル
構造例
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
(4)データファイル content01.txt ・・・ コンテンツファイル コンテンツファイルは下図のような1行目を ヘッダとするデータ形式とする。 ヘッダ部分は、Title: のあとにコンテンツの 題名を記述する。 ・・・ content10.txt
Title:
説明文
コンテンツファイルのデータ形式
構造例
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
① mydir の中に 自分の学籍番号フォルダを作る
② 学籍番号フォルダ(=number)の中に
imgフォルダ
dataフォルダ
index.html
main.html
firstpage.html
dummy.html
を作る
③ htmlファイルを記述
index.htmlから main.html へのリンクもはる
画像ファイルを読み込んでも良い
④ ブラウザから確認する http://localhost:8080/mydir/学籍番号/
全体像を把握する
作業1
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
ソースコード例
(1)画像ファイル ・・・ 略 (2)HTMLファイル -------------------index.html------------------------ <HTML> <HEAD> <TITLE>実習課題</TITLE> <!-- Webプログラミング2 2012/10/10 初期画面--> </HEAD> <BODY> <CENTER> <IMG SRC=“/mydir/number/img/logo.jpg”> <BR> <A HREF=“/mydir/number/main.html”> <IMG SRC=“/mydir/number/img/enter.jpg” BORDER=“0”> </A> </CENTER> </BODY> </HTML> -------------------------------------------------
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
-------------------main.html------------------------ <HTML> <HEAD> <TITLE>実習課題</TITLE> <!-- Webプログラミング2 2012/10/10 メイン画面 フレーム設定--> <FRAMESET COLS="250,*" BORDER="0"> <FRAME NAME="left" SRC="/mydir/number/menu.jsp"> <FRAME NAME="right" SRC=“/mydir/number/firstpage.html"> </FRAMESET> </HEAD> </HTML> ----------------------------------------------------
ソースコード例
まずはdummy.html で代用する
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
-------------------firstpage.html---------------------- <HTML> <HEAD> <TITLE>実習課題</TITLE> <!-- Webプログラミング2 2012/10/10 メイン画面 初期画面--> </HEAD> <BODY> <CENTER> <IMG SRC="/mydir/number/img/logo.jpg"> </CENTER> </BODY> </HTML> ----------------------------------------------------
ソースコード例
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
-------------------dummy.html---------------------- <HTML> <HEAD> <TITLE>実習課題</TITLE> <!-- Webプログラミング2 2012/10/10 dummy画面 --> </HEAD> <BODY> ・リスト1<BR> ・リスト2<BR> ・リスト3<BR> ・リスト4<BR> ・リスト5<BR> ・リスト6<BR> ・リスト7<BR> ・リスト8<BR> ・リスト9<BR> ・リスト10<BR> </BODY> </HTML> ----------------------------------------------------
ソースコード例
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
①コンテンツを作成する
10個程度、所定のデータ構造で記述し、所定のフォルダに配置
mydir/number/data の下に配置
②検索プログラム menu.jsp を作成する
③menu.jsp単体でブラウザから動作確認する
③ main.htmlの
dummy.htmlをmenu.jspに置き換える
④ブラウザで初期画面からの動作確認する
作業2
Title: ○○××
説明文
XXX.txt
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
(4)データファイル -------------------content01.txt------------------- Title: カレーライス カレーライスの作り方は・・・ 材料は・・・ ---------------------------------------------------- ・・・ コンテンツの数だけ同様のファイル形式で記述 ・・・ -------------------content10.txt------------------- Title: 味噌汁 味噌汁の作り方は・・・ 材料は・・・ ----------------------------------------------------
ソースコード例
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
方針
料理1 料理2 料理3 料理4 ・ ・ ・
menu.jsp mydir
index.html
main.html
img
data
fristpage.html
XXXX1.txt XXX10.txt ・・・
その1.データフォルダ内のファイルの一覧を出力する
Title: ○○××
説明文
ポイント①:特定のフォルダのファイルの
一覧を取り出す
ポイント②:ファイルの1行目の一部分を取り出す ポイント③:1行目の不要な部分を消す
学籍番号 フォルダ (number)
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
1.ファイルの入出力の扱い方
・ファイル操作の基本
実行プログラムからみたパスとWebから見たパスの違い
絶対パスと相対パスの違い
主要操作 Windows UNIX Java
ファイル一覧 dir ls list()
ファイル生成 createNewFile()
ファイルコピー copy cp
ファイル名変更 ren rename renameTo()
ファイル削除 del rm delete()
ディレクトリ作成 mkdir mkdir mkdir()
ディレクトリ削除 rd rm delete()
ディレクトリ ¥ / /
・ファイルパス
・ファイル(読み出し、書き込み) open ⇒ close
●Javaでは、以下のクラスで実施する: ・Fileクラス
・FileReaderクラス
(BufferedReaderクラスも併用する) ・FileWriterクラス
(BufferedWriterクラスも併用する)
解説
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
2.ファイルの一覧を取り出すプログラム例
data
file1.txt file2.txt file3.txt
<%@ page contentType=“text/html;charset=Shift_JIS” import="java.io.*,java.util.*" %> <HTML><HEAD><TITLE>実習課題</TITLE> <%! //変数の型宣言 String[] filelists; //コンテンツファイルを入れる配列 String filename; //コンテンツファイルを示す変数 FileReader readfile; //ファイル名を示す変数 BufferedReader line; //ファイルをハンドルするための変数 //コンテンツファイルを格納するディレクトリの変数 File datadir =new File(“c:/・・・/mydir/number/data"); %> </HEAD><BODY> <% //コンテンツディレクトリからファイルの一覧を読み出す filelists = datadir.list(); for (int i=0;i<filelists.length ; i++ ) { //ファイルの読み出し filename=datadir + "/" + filelists[i]; readfile = new FileReader( filename ); line = new BufferedReader( readfile ); while( line.ready() ) { out.println( line.readLine() + "<BR>" ); } line.close(); readfile.close(); } %> </BODY></HTML>
↑各自のPCのパスに修正
解説
Webブラウザ
出力
http://localhost:8080/mydir/samp1.jsp
samp1.jsp
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
3.ファイルの中身を確認するプログラム例
kiroku.txt
<%@ page contentType="text/html;charset=Shift_JIS" import="java.io.*,java.util.*" %> <HTML> <HEAD> <TITLE>実習課題</TITLE> <%! //コンテンツファイルを示す変数とファイル名の定義 String filename =“c:/・・・/mydir/number/kiroku.txt"; %> </HEAD> <BODY> <HR> <% //コンテンツファイルの読み出し FileReader readfile = new FileReader( filename ); BufferedReader line = new BufferedReader( readfile ); //ファイルの中身を1行づつ表示する(HTMLとして出力) while( line.ready() ) { out.println( line.readLine() + "<BR>" ); } //ファイルのクローズ処理 line.close(); readfile.close(); %> <HR> </BODY> </HTML>
samp2.jsp
↑各自のPCのパスに修正
解説
Webブラウザ
出力
http://localhost:8080/mydir/samp2.jsp
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
4.パターンマッチング
AAABBBCCCDDDEEEFFFXXXYYYZZZ XXX
AAABBBCCCDDDEEEFFF YYYZZZ
matcher
true/false
XXX
split
パターンマッチ(複数の方法あり)
分割
置換 XXX
split xxx
AAABBBCCCDDDEEEFFFxxxYYYZZZ
AAABBBCCCDDDEEEFFFXXXYYYZZZ
AAABBBCCCDDDEEEFFFXXXYYYZZZ
正規表現の利用で記述する ^ ・・・行の先頭 $ ・・・行末 . ・・・ 任意の一文字 * ・・・0回以上の繰り返し など
解説
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
5.文字列に対するパターンマッチプログラム例
<%@ page contentType="text/html;charset=Shift_JIS" import="java.io.*,java.util.*,java.util.regex.*"%> <HTML> <HEAD> <TITLE>実習課題</TITLE> <%! //変数の型宣言 String Bunsyo="abc:defgh:ijk"; String[] Word; String Bunsyo2; %> </HEAD> <BODY> <% //分割 Word=Bunsyo.split(":"); for( int i=0 ; i< Word.length ; i++ ) { out.println( Word[ i ] + "<BR>"); } //置換 Bunsyo2=Bunsyo.replace(":","."); out.println( Bunsyo2 + "<BR>");
//マッチ(正規表現なし) Pattern pattern = Pattern.compile("abc"); Matcher matchvalue; for( int i=0 ; i< Word.length ; i++ ) { matchvalue= pattern.matcher( Word[ i ] ); if( matchvalue.matches() ) { out.println( Word[ i ] +"<BR>" ); } } //マッチ(正規表現あり) pattern = Pattern.compile(".*a.*"); for( int i=0 ; i< Word.length ; i++ ) { matchvalue= pattern.matcher( Word[ i ] ); if( matchvalue.matches() ) { out.println( Word[ i ] +"<BR>" ); } } %> <HR> </BODY> </HTML>
←処理対象文字列
つづき
解説
samp3.jsp
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
(3)JSPファイル -------------------menu.jsp------------------- <%@ page contentType="text/html;charset=Shift_JIS" import="java.io.*,java.util.*"%> <HTML> <HEAD> <TITLE>実習課題</TITLE> <!-- Webプログラミング2 2012/10/10 コンテンツ一覧出力JSP --> <%! //変数の型宣言 String[ ] filelists; //コンテンツファイルを入れる配列 String filename; //コンテンツファイルを示す変数 String filetitle; //コンテンツファイル内のヘッダを入れる変数 String titlename; //ヘッダからタイトル部分を抜き出した変数 File datadir; //コンテンツファイルを格納するディレクトリの変数 FileReader readfile; //ファイル内のデータを読み出すための変数 BufferedReader line; //ファイル内のデータを一行ごとに扱うための変数 %> </HEAD> -----------------(次ページへつづく)-----------------
ソースコード例
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
----------------------(前ページから)------------------------- <BODY> <HR> <% //ディレクトリ内のファイル一覧 datadir =new File("c:/・・・/mydir/number/data"); //コンテンツディレクトリからファイルの一覧を読み出す filelists = datadir.list( ); // コンテンツファイルの数だけ繰り返す for (int i=0;i<filelists.length ; i++ ) { //ファイルの読み出し filename=datadir + "/" + filelists[i]; readfile = new FileReader( filename ); line = new BufferedReader( readfile ); // コンテンツファイルの1行目(=ヘッダ)の読み出し filetitle = line.readLine( ); -----------------(次ページへつづく)-----------------
各自のPCで異なる
ソースコード例
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
----------------------(前ページから)------------------------- //ヘッダの題名だけを抜き出し titlename = filetitle.replace("Title:", ""); //題名とファイル名をHTML形式で出力、 //ファイル名をURLの変数としてリンク先へ送信 out.println( "<A HREF=¥"/mydir/number/show.jsp? " + filelists[i] + " ¥"TARGET=¥"right¥"> " + titlename + "</A><BR>"); //ファイルのクローズ処理 line.close( ); readfile.close( ); } %> <HR> </BODY> </HTML> ----------------------------------------------------
ソースコード例
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
①一覧表示プログラム menu.jsp の出力では、
ファイル一覧から選択したファイルを引数にして表示プログラムに
渡すようなリンク(Aタグ)を作る。
②ファイル指定の入力があることを前提に表示プログラム show.jsp を作成。
③show.jsp単体を適宜ブラウザから動作確認する
(引数は手入力する)
④ブラウザで初期画面から動作を確認する
作業3
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
方針
料理1 料理2 料理3 料理4 ・ ・ ・
menu.jsp
mydir WEB-INF
index.html
jsp
img
data XXXX1.txt XXX10.txt ・・・
2.選択したファイルの中身を右側フレームの画面に出力する
XXXX1.jpg XXX10.jpg ・・・
show.jsp
ポイント③:引数で入力されたファイル(テキストと画像)を表示する
ポイント④:あらかじめ決めておいたフォルダ構造(テキストと画像は
格納フォルダと拡張子が異なるだけ)に従って合成して出力
ポイント⑤:データファイルは1行目はヘッダなので表示させない
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
-------------------show.jsp------------------- <%@ page contentType= "text/html;charset=Shift_JIS" import="java.io.*,java.util.*"%> <HTML> <HEAD> <TITLE>実習課題</TITLE> <!-- Webプログラミング2実習 2012/10/10 コンテンツ表示JSP --> <%! //変数の型宣言 String datafile; //コンテンツのファイル名(URLの変数) String filename; //コンテンツファイルを示す変数 String picfile; //コンテンツの画像ファイル String filetitle; //コンテンツファイル内のヘッダを入れる変数 FileReader readfile; //ファイル内のデータを読み出すための変数 BufferedReader line; //ファイル内のデータを一行ごとに扱うための変数 %> </HEAD> -----------------(次ページへつづく)-----------------
ソースコード例
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
----------------------(前ページから)------------------------- <BODY> <% //URLの変数から入力されたファイル名を取得 datafile=request.getQueryString( ); //ファイル名からコンテンツの画像ファイルを指定 picfile = datafile.replace("txt", "jpg"); //画像ファイルをHTML形式のリンクとして出力 out.println("<CENTER><IMG SRC=¥"/mydir/number/img/"+ picfile + "¥"> </CENTER><BR>" ); //コンテンツファイルの読み出し filename="c:/・・・/mydir/number/data/" + datafile; readfile = new FileReader( filename ); line = new BufferedReader( readfile ); //最初の一行(ヘッダ)を無視する String filetitle = line.readLine( ); -----------------(次ページへつづく)-----------------
ソースコード例
各自のPCで異なる
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
----------------------(前ページから)------------------------- //二行目以降はコンテンツなので表示する(HTMLとして出力) while( line.ready( ) ) { out.println( line.readLine( ) + "<BR>" ); } //ファイルのクローズ処理 line.close( ); readfile.close( ); %> <HR> </BODY> </HTML> ----------------------------------------------------
ソースコード例
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
①基本動作が確認できたら、自分なりの改造をしてみる。
②初期画面に自分の学籍番号と名前を入れる。
③自分のIPアドレスを調べ友人にアクセスしてもらう
(反対に友人の作成したWebページもアクセスしてみる)
④作成した自分の学籍番号フォルダを所定の場所に提出(課題終了)
作業4
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
<HTML> <TITLE>samp</TITLE> <BODY> <FORM METHOD="POST" ACTION="http://localhost/mydir/samp4.jsp"> 入力してください。<INPUT TYPE="text" NAME="sono1"><BR> 入力してください。<INPUT TYPE="text" NAME="sono2"><BR> <INPUT TYPE="submit" VALUE="submit"> </FORM> </BODY> </HTML>
samp4.html
<%@ page contentType="text/html;charset=Shift_JIS" %> <HTML> <%! String input; %> <TITLE>samp</TITLE> <BODY> <% request.setCharacterEncoding("Shift_JIS"); input=request.getParameter("sono1"); out.print( input ); input=request.getParameter("sono2"); out.print( input ); %> </BODY> </HTML>
samp4.jsp
入力したデータが表示される
応用例 1.ブラウザからの入力受け付け
http://localhost:8080/mydir/samp4.html
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
応用例 2.ブラウザからの入力データをセーブする <%@ page contentType="text/html;charset=Shift_JIS" import="java.io.*,java.util.*" %> <HTML> <%! //変数宣言 String input1,input2; //書き出しファイル名 String filename =“c:/・・・/mydir/kiroku.txt"; %> <TITLE>samp</TITLE><BODY> <% //データの受取 request.setCharacterEncoding("Shift_JIS"); input1=request.getParameter("sono1"); input2=request.getParameter("sono2"); //上書きの指定(どちらかを有効にする) FileWriter writefile = new FileWriter( filename); //追記の指定(どちらかを有効にする) //FileWriter writefile = new FileWriter( filename, true ); //書き出し BufferedWriter line = new BufferedWriter( writefile ); line.write( input1 ); line.newLine(); line.write( input2 ); line.newLine(); //ファイルのクローズ処理 line.close(); writefile.close(); %> </BODY></HTML>
↑各自のPCのパスに修正
kiroku.txt
samp5.jsp
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
応用例 3.テキストファイルDB
file1.txt file2.txt file3.txt
sampdata
ポイント①:データの内容を1枚のテキストファイル(csv形式など)に記録 (1件のデータ量は適度にしておく:文章を丸々入れない、 文字数制限をするか、コンテンツへのリンクにしておくなど) ポイント②:テキストファイルに対して検索などをかける (カラムごとに検索をかける)
CSVデータの例
カレーライス, 2012/10/10, 斉藤, content1.txt ・・・ 味噌汁, 2012/11/11, 斉藤, content10.txt ・・・
2012年 Webプログラミング 湘南工科大学講義資料 斉藤典明
応用例 4.JavaScriptの活用
①URLの入力
②検索入力画面
⑤検索結果の表示
Webサーバ
③入力確認画面 JavaScript
④検索中画面 JavaScript
http://localhost・・・