サーブレットの活用事例 ある飲食チェーン店の例 条件 全国の店舗や取引先のパソコンに特別なソフトをインストールすることはできない 全国の店舗や取引先に特別な教育をすることはできない 本部側で対応できる仕組み として JAVA サーブレットを採用 1

Size: px
Start display at page:

Download "サーブレットの活用事例 ある飲食チェーン店の例 条件 全国の店舗や取引先のパソコンに特別なソフトをインストールすることはできない 全国の店舗や取引先に特別な教育をすることはできない 本部側で対応できる仕組み として JAVA サーブレットを採用 1"

Transcription

1 JAVA サーブレット IS04 システム 組込

2 サーブレットの活用事例 ある飲食チェーン店の例 条件 全国の店舗や取引先のパソコンに特別なソフトをインストールすることはできない 全国の店舗や取引先に特別な教育をすることはできない 本部側で対応できる仕組み として JAVA サーブレットを採用 1

3 2

4 ショッピングサイト 1. インターネット利用による市場の変化 今までの死に筋を積み上げれば 口コミ情報 一定以上のシェアや規模 ( アクセス数 ) がないと商売が成り立たない ユーザがつい書き込みしたくなるような魅力的なサイト構成 3

5 HTML によるホームページの閲覧インターネットでホームページを閲覧するには ホームページのアドレスを指定して 該当するファイルを受信し これをブラウザで解析して自分の画面に表示する という手順をふみます この手順を司るソフトウェアを Web サーバと言います インターネットでは 初期の頃から HTML で記述されたファイルが使われてきました ページの要求 サーバ クライアント Web サーバ index.html next.html 応答 : ファイルが送信される <HTML> <HEAD> <TITLE> 名前 </TITLE> </HEAD> <BODY> 私の名前は です <BR> どうぞよろしく </BODY> </HTML> 4

6 サーバサイドプログラミング HTML は 決まった内容の情報しか表示することができません そこで サーバ側に 状況に応じて HTML を自動生成するプログラムを用意しました そのときの環境やデータによって 異なった HTML を作成することができるのです このようなプログラムをサーバサイドプログラミングと言います ページの要求 サーバ クライアント Web サーバ HTML 作成 応答 : 作成されたファイルが送信される プログラム クライアントで受け取るのは 従来と同じ HTML ですから サーバ側で行われていることを 知るよしもありません 普通のブラウザで表示することができます データ処理のすべてをサーバ側が引き受けているので 改版が必要なときは サーバ側だけを修正すればよいのです また クライアント側に特別なソフトやハードウエアを用意する必要がない ということは 保守 運用の点で大きなメリットとなります クライアント側に送られてくるのは普通の HTML しかし状況に応じて変化します <HTML> <HEAD> <TITLE> 名前 </TITLE> </HEAD> <BODY> 私の名前は です <BR> どうぞよろしく </BODY> </HTML> 5

7 web データベースシステムデータの保存場所としてデータベースを利用したものを web データベースシステムと言います 本講座で利用する MySQL は オープンソースのリレーショナルデータベース管理システム (RDBMS) です 無料でダウンロードして利用することができるマルチスレッド マルチユーザのデータベースサーバです 無料でありながら 堅牢で処理速度が速く アメリカの Yahoo ファイナンスや NASA をはじめ世界的に多くの企業で利用されています データベースサーバとは データベースを利用したいプログラムからの要求に対して応答するデータベースシステムです データベースに対する要求は SQL と呼ばれる言語で行います ページの要求 サーバ クライアント Web サーバ HTML 作成 応答 : 作成されたファイルが送信される プログラム SQL の発行 要求に応じたデータ データベース クライアント側に送られてくるのは やっぱり普通の HTML しかしデータに応じて変化します <HTML> <HEAD> <TITLE> 名前 </TITLE> </HEAD> <BODY> 私の名前は です <BR> どうぞよろしく </BODY> </HTML> 6

8 サーブレット JSP JavaBeans サーバーサイドプログラミングを JAVA で記述したものをサーブレットと言います サーブレットは スレッドで動作しますので 複数のクライアントが同じページを要求しても 一度しかプログラムはロードされません クライアントごとにスレッドが生成されます サーブレットは CGI と同様 データの処理を行った結果に基づいて HTML を作成するのが目的です そこで 簡単に HTML を生成することのできる言語 JSP(Java Server Pages) が開発されました JSPは HTML の記述の中に Javaの命令を埋め込んだ そんなイメージの言語です また データ をオブジェクト化するために設計した Java のクラスを JavaBeans と言います JavaBeans は コーヒー豆 の名前のとおり サーバーアプリケーションにとっての重要な小さな部品です そして JavaBeans は データを扱いますので その後ろのデータベースとの連携も重要です このように サーバサイドアプリケーションは サーブレットと JSP それに JavaBeans の絶妙な連携で実現されるのです 7

9 8

10 簡単な Web サーバを作ってみよう 通信するには 複数のコンピュータが接続されているネットワーク環境で コンピュータ同士がデータのやり取りをするには お互いに送受信の手順を約束しておかなければなりません この約束をプロトコルと言います インターネットでは TCP/IP プロトコルが使用されています IP アドレスとポート番号 TCP/IP では IP アドレスで コンピュータを識別します が それだけでは 1 台のコンピュータで1つの接続しかできませんので ポートという考え方が導入されています ポートは 論理的な入口に付けられた 1 番から65535 番までの番号で 実際にこれだけの数のハードウエアが装備されているわけではありません ソフトスイッチのようなものです TCP/IP プロトコルでは IP アドレスとポート番号の組を指定して通信を行います ソケット TCP/IP プロトコルに沿って通信するプログラムを書くためには TCP/IP の規約の詳細を知らなければなりません これらの規則を包含したアプリケーションプログラムのことをソケットと言います ソケットを使うと 詳細を気にすることなく あたかもファイルとの入出力と同じ感覚でプログラムを書くことができます つまり ソケットを使って 2 台のコンピュータの間にストリームを確立するのです Java では ソケットとして Socket クラスと ServerSocket クラスが用意されています クライアント側の Socket からの接続要求を サーバ側の ServerSocket が常に監視し 両者が接続したとき そこにストリームを確立して データの送受信をすることができます 9

11 ソケットを使って 2 台のコンピュータを接続するプログラムを作りましょう 片方をサー バ 他方をクライアントとします (1) サーバ側 ServerSocket クラスのオブジェクトをインスタンス化してサーバをスタートさせます このとき サーバが使用するポート番号を指定します ssock = new ServerSocket( ポート番号 ); accept メソッドで クライアントからの接続要求を待ちます 受信すると Socket クラ スのオブジェクトを受け取ります sock = ssock.accept(); 受けとった Socket クラスのオブジェクトを調べることにより 接続を要求してきたク ライアントの IP アドレスを知ることができます InetAddress sockip = sock.getinetaddress(); (2) クライアント側 Socket クラスのオブジェクトをインスタンス化することにより サーバに接続要求を出します このとき 要求先のマシンのホスト名または IP アドレスとポート番号を指定します sock = new Socket( サーバ名, ポート番号 ); 接続を終了するときは ソケットをクローズします sock.close(); このプログラムでは ホスト名 ( または IP アドレス ) とポート番号はプログラム起動時にコマンドから指定することにしましょう 10

12 サーバ側 1: /****************************************************************** 2: SesrverTest: サーバー起動 3: ******************************************************************/ 4: import java.net.*; 5: 6: public class ServerTest{ 7: /************* main ************************/ 8: public static void main(string[] args){ 9: 10: 11: ServerSocket ssock = null; // サーバー側のソケット 12: Socket sock = null; // クライアント側のソケット 13: 14: // サーバースタート 15: System.out.println("Server start..."); 16: try{ 17: ssock = new ServerSocket(8088); 18: //8088 番ポートをサーバとして起動 19: while(true){ 20: sock = ssock.accept(); // クライアントからの待ち 21: // 受信したら 22: InetAddress sockip = sock.getinetaddress(); 23: System.out.println("accept from " + sockip); 24: 25: 26: catch(exception e){ 27: System.exit(1); 28: 29: 30: 11

13 クライアント側 /* ClientTest: クライアント側コマンド ClientTest サーバ名ポート番号 */ import java.io.ioexception; import java.net.*; public class ClientTest{ /*************** main *****************************/ public static void main(string[] args){ Socket sock = null; // クライアント用ソケット if(args.length == 2){ try{ sock = new Socket(args[0],Integer.parseInt(args[1])); // ソケット接続要求 catch(exception e){ System.out.println("Socket エラー "); finally{ // ソケットをクローズする try { if(sock!= null){ sock.close(); catch (IOException e1) { System.out.println("Socket closeエラー "); else{ System.out.println(" ホスト名とポート番号を指定してください "); 複数のコンピュータがネットワークで接続されている環境であれば 異なるマシン間で 接続実験をしてみてください 12

14 接続が成功したら サーバからクライアントへ クライアントからサーバへデータを送信 します 次のようなやりとりをすることを クライアントとサーバとで約束することにし ます ストリームの確立 データの送受信をするには まず お互いにデータの通る道を作ります Socket クラスには InputStream と OutputStream を取得するメソッドが用意されています InputStream fin = sock.getinputstream(); OutputStream fout = sock.getoutputstream(); これらのストリームをラップして 文字列を扱えるようにしましょう BufferedReader in = new BufferedReader(new InputStreamReader(fin)); PrintWriter out = new PrintWriter(fout,true); PrintWriter コンストラクタの 2 番目の引数は ストリームのバッファを自動的にフラッシ ュすることを指定するものです 13

15 データの送受信 ストリームが確立されれば あとは それぞれのストリームクラスのメソッドを使ってデータを送受信します 出力には PrintWriter クラスの Println() 入力には BufferedReader クラスの readline() サーバ側 /****************************************************************** SesrverTest: サーバー起動 ******************************************************************/ import java.io.*; import java.net.*; public class ServerTestA { public static void main(string[] args) throws IOException{ ServerSocket ssock = null; // サーバー側のソケット Socket sock = null; // クライアント側のソケット InputStream fin = null; // 入力ストリーム OutputStream fout = null; // 出力ストリーム PrintWriter out = null; // 文字列入力ストリーム BufferedReader in = null; // 文字列出力ストリーム int counter=0; // 要求クライアントへのID 番号 // サーバースタート System.out.println("Server start..."); ssock = new ServerSocket(8088); //20 番ポートをサーバとして起動 while(true){ sock = ssock.accept(); // クライアントからの待ち System.out.println("accept..."); // 受信しました counter++; // クライアントのID // ストリームの確立 fin = sock.getinputstream(); fout = sock.getoutputstream(); in = new BufferedReader(new InputStreamReader(fin)); out = new PrintWriter(fout,true); //ID 番号送信 out.println("counter="+counter); // 送信 System.out.println("counter="+counter); // ログ // クライアントからのメッセージ受信 String s = in.readline(); System.out.println("accept data>" + s ); 14

16 // 確認送信 out.println("ok"); // 送信 System.out.println("ok to counter="+counter); // ログ // クローズ in.close(); out.close(); sock.close(); クライアント側 /*************************************************************** ClientTestA: クライアント側コマンド ClientTestA サーバ名ポート番号 ***************************************************************/ import java.io.*; import java.net.*; public class ClientTestA{ /*************** main *****************************/ public static void main(string[] args) throws Exception{ Socket sock = null; // クライアント用ソケット BufferedReader in = null; // サーバからの入力ストリーム PrintWriter out = null; // サーバへの出力ストリーム InputStream fin=null; OutputStream fout = null; // キーボードからの入力ストリーム BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in)); if(args.length == 2){ sock = new Socket(args[0],Integer.parseInt(args[1])); // ソケット接続要求 // ストリームの確立 fin = sock.getinputstream(); fout = sock.getoutputstream(); in = new BufferedReader(new InputStreamReader(fin)); out = new PrintWriter(fout,true); 15

17 // サーバから受付番号を受信 String myno = in.readline(); System.out.println("server:"+myNo); // サーバにメッセージ送信 System.out.print("key in>"); // プロンプト String msg = keyin.readline(); // キー入力 out.println(myno + ";" + msg); // 送信 // サーバから確認を受信 String ack = in.readline(); System.out.println("server:"+ack); // 閉じる in.close(); out.close(); sock.close(); else{ System.out.println(" ホスト名とポート番号を指定してください "); 実験 ここで このプログラムを使って 通信の実験をしてみましょう このプログラムは サーバからの ID を受信したクライアントは キ ボードからの入力を待って 入力されたデータをサーバに送信します これは 時間のかかる処理です 人間がすぐには キー入力をしないかもしれないからです この長い時間の間に 別のクライアントが接続要求をしてきたら どうなるか という実験です MS-DOS プロンプトを 3 枚起動します 1 枚はサーバ用 残りの 2 枚は 2 人のクライアント用とします 1 サーバを起動します >c:\javasrc\java ServerTestA Server start... 2 クライアント1を起動します >c:\javasrc\java ClientTestA localhost 8088 サーバから ID が送られてきてキーボ server from:counter=1 ード入力待ちになります key in> 3 クライアント2を起動しますサーバからは ID が送られてきません! >c:\javasrc\java ClientTestA localhost

18 これは サーバのプログラムが クライアント1からの受信を待ったまま 止まっているので 次の要求をうけつることができないのです クライアント1がキーボード入力を終え データを送信すると クライアント2は 接続を受け付けられて ID 番号をもらえます 実際のサーバが一人としか接続できないのでは困ります 前ページの実験を解決するのが スレッドです スレッドを使って 同時に何人もの要求を処理できるサーバを作りましょ う 17

19 (1) サーバーソケットの待ち行列サーバーソケットに あるクライアントからの接続要求があったとき すでに他のクライアントとの接続中であったとしても 待ち行列を形成し 接続要求を受け付けることができます つまり 同時に複数のクライアントと 1 個のポートでやりとりができるのです (2) マルチスレッドマルチスレッドは 複数の処理を同時に行うためのプログラミングテクニックです 接続を受信したら スレッドを生成して あとの処理 ( 送受信 ) は スレッドに任せてしまいます こうすると メインプログラムは すぐに次の接続要求を待つことができます Thread クラスを拡張したクラスを作ります 18

20 /****************************************************************** SesrverTestThread: スレッドを使ったサーバ ******************************************************************/ import java.io.*; import java.net.*; public class ServerTestThread{ public static void main(string[] args) throws IOException{ ServerSocket ssock = null; // サーバー側のソケット Socket sock = null; // クライアント側のソケット int counter=0; // 要求クライアントへのID 番号 // サーバースタート System.out.println("Server start..."); ssock = new ServerSocket(20); //20 番ポートをサーバとして起動 while(true){ sock = ssock.accept(); // クライアントからの待ち System.out.println("accept..."); // 受信しました counter++; // クライアントのID ServerToClient t = new ServerToClient(sock,counter); t.start(); スレッドの生成と起動 ServerToClient クラスの run が呼び出される /********************************************************* クライアントとの通信を担当するスレッド *********************************************************/ class ServerToClient extends Thread { private Socket sock; private InputStream fin = null; // 入力ストリーム private OutputStream fout = null; // 出力ストリーム private PrintWriter out = null; // 文字列入力ストリーム private BufferedReader in = null; // 文字列出力ストリーム private int counter; //ID 番号 /******** コンストラクタ *****************/ public ServerToClient(Socket sock,int id){ this.sock = sock; counter = id; /************ run ****************/ public void run(){ try{ // ストリームの確立 fin = sock.getinputstream(); fout = sock.getoutputstream(); in = new BufferedReader(new InputStreamReader(fin)); 19

21 out = new PrintWriter(fout,true); //ID 番号送信 out.println("counter="+counter); // 送信 System.out.println("counter="+counter); // ログ // クライアントからのメッセージ受信 String s = in.readline(); System.out.println("accept data>" + s ); // 確認送信 out.println("ok"); // 送信 System.out.println("ok to counter="+counter); // ログ catch(ioexception e){ System.out.println(" エラー " + e); finally{ try{ // クローズ if(in!= null){ in.close(); if(out!= null){ out.close(); if(fin!= null){ fin.close(); if(fout!= null){ fout.close(); if(sock!= null){ sock.close(); catch(ioexception e){ System.out.println(" エラー " + e); 20

22 サーブレットの構成サーブレットは HttpServlet クラスを継承して作ります サーブレットの基本構成を以下に示します サーブレットの基本構造 package パッケージ名 import public class クラス名 extends HttpServlet{ クラス変数の宣言 public void init(){ 初期化処理 public void dopost( ){ public void doget( ){ doget メソッドは HTTP の GET リクエストに対し 呼び出されます また dopost メソッドは POST リクエストに対して 呼び出されます クライアントが URL を指定してサーブレットを要求すると doget メソッドが呼び出され HTML のフォームから POST 指定で要求すると dopost メソッドが呼び出されます いづれも 以下の2つの引数をとります HttpServletRequest: クライアントからのリクエスト情報 HttpServletResponse: サーバ側からの応答情報 コンテントタイプの設定クライアントに応答する形式を設定します HTML を生成して出力するときは res.setcontenttype("text/html"); と書きます この文は 次の HTML の送信より先に書かなければなりません ブラウザに表示したい内容が日本語の場合には このままでは文字化けしてしまいます これは サーブレットのデフォルトの文字コードが iso という規格にあるのに対し,Windows が シフト JIS であって 異なるためです 文字化けを防ぐために setcontenttype では漢字コードの指定をします res.setcontenttype("text/html; charset=utf-8"); 21

23 HTML の生成 HttpServletResponse クラスの getwriter メソッドを使うと PrintWriter クラスの出力ストリームを確立することができます PrintWriter out = res.getwriter(); HTML はテキストですから 1 行作成するたびに println メソッドで送信します MS-DOS の画面に表示したときと全く同様に 文字列をクライアントに送信することができます out.println("<html><head>"); //HTML の送信 out.println("<title>hello Servlet</title>"); out.println("</head><body>"); out.println(" こんにちは <BR>"); out.println(" はじめてのサーブレットです "); out.println("</body></html>"); 22

24 POST メソッドによるクライアントからの受信 エコーバックします indata.html の form はどのように書いたらよいでしょうか? <form action=" servlet/confdata " method="post"> web.xml は? <servlet> <servlet-name>confdata</servlet-name> <display-name>this is the display name of my J2EE component</display-name> <description>this is the description of my J2EE component</description> <servlet-class>servlets.confdata</servlet-class> </servlet> <servlet-mapping> <servlet-name>confdata</servlet-name> <url-pattern> servlet/confdata </url-pattern> /confdata </servlet-mapping> 23

25 サーブレット側でのパラメータの受け取り HTML のフォームから METHOD = POST でサーブレットを呼び出すと HTTP プロトコル の POST コマンドが発行され サーブレットの dopost メソッドが呼び出されます ブラウザから URL を指定してサーブレットを呼び出す GET HTTP プロトコルの GET コマンド発行 サーブレット class servlet extends HttpServlet{ public void doget( ){ ブラウザに配置されたボタンでサーグレットを呼び出す public voif dopost( ){ 送信 HTTP プロトコルの POST コマンド発行 POST HTML からは NAME と VALUE の組が渡されます サーブレット側では NAME を指定して対応 する VALUE を取得します String p = request.getparameter( NAME で指定した識別子 ); request: サーブレットの dopost メソッドに引数として 渡される HttpRequest クラスのオブジェクト これは 取得できるデータが1つであれば HTML でのフォームの種類に因りません つまり テキストボックスに入力されたデータも ラジオボタンで選ばれたデータも みな この形式で受け渡しができます NAME が変数名のようなもので VALUE がその内容といったイメージです 複数の VALUE 値が渡される場合には 配列になります String[] p=request.getparametervalues( NAME で指定した識別子 ); request: サーブレットの dopost メソッドに引数として 渡される HttpRequest クラスのオブジェクト 24

26 日本語の取り扱いブラウザからの入力データの文字コードは iso であり Windows のそれと異なるため このままでは文字化けしてしまいます そこで 取得した文字列を一度 iso モードでバイト列に変換し これを今度は 自動認識モード utf-8 モードで String クラスに変換しなおします String p = req.getparameter("param1"); // パラメータを取得 byte[] b = p.getbytes("iso "); // バイト型の配列に変換 String text = new String(b,"utf-8"); // 指定された文字セットを使用してバイト配列から新しい String クラスを // インスタンス化するコンストラクタ package servlets; import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class ConfData extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String p = request.getparameter("name"); String name = new String(p.getBytes("iso "), "utf-8"); p = request.getparameter("kana"); String kana = new String(p.getBytes("iso "), "utf-8"); response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC "-//W3C//DTD HTML

27 Transitional//EN ">"); out.println("<html>"); out.println(" <head>"); out.println(" <title> 入力確認 </title>"); out.println(" </head>"); out.println(" <body>"); out.println(" 氏名 :" + name + "<br>"); out.println(" ふりがな :" + kana + "<br>"); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 26

28 練習 HTML の 1 つのフォームの中に複数個のボタンがあり どのボタンが押されたかに よって 異なる動作をさせてみましょう 赤ボタンを押すと 緑ボタンを押すと 赤い画面 緑の画面 黄色ボタンを押すと 黄色い画面 1つのフォーム内に3つの submit ボタンが配置してありますので どのボタンが押されても PostServletButton.java の dopost メソッドが呼び出されます ですから このメソッド内で どのボタンが押されたのか を調べ それぞれに対応する処理を行うことになります if(request.getparameter( 識別子 )!= null){ 識別子 を持つボタンが押されたときの処理 27

29 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> </head> <body> ボタンを押すと色が変わります <br> <form action="servlet/selectservlet" method="post"> <input type="submit" name="red" value=" 赤 "> <input type="submit" name="green" value=" 緑 "> <input type="submit" name="yellow" value=" 黄 "> </form> </body> </html> import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class SelectServlet extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String colorcode = ""; if(request.getparameter("red")!= null){ colorcode = "#FF0000"; if(request.getparameter("green")!= null){ colorcode = "#00FF00"; 28

30 if(request.getparameter("yellow")!= null){ colorcode = "#FFFF00"; response.setcontenttype("text/html"); this.preventcaching(request, response); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<html>"); out.println(" <head>"); out.println(" <title>a Servlet in POST</title>"); out.println("<style type='text/css'>"); out.println("body{"); out.println("background-color:"+colorcode+";"); out.println(""); out.println("</style>"); out.println(" </head>"); out.println(" <body>"); out.print(" This is <b>"); out.print(this.getclass().getname()); out.println("</b>, using the <b>post</b> method <br>"); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 29

31 JSP で受け取ると indata.html の form は <form action=" " method="post"> 普通に HTML で書けるので CSS なども簡単に実装できます page language="java" contenttype="text/html;charset=utf-8" %> <% String p = request.getparameter("name"); String name = new String(p.getBytes("iso "), "utf-8"); p = request.getparameter("kana"); String kana = new String(p.getBytes("iso "), "utf-8"); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title> 入力確認 </title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style type="text/css"> td, th{ border-style:solid; border-color:#0000ff; border-width:1px; table{ border-collapse:collapse; th{ text-align:right; </style> </head> <body> <table> <tr> <th> 氏名 :</th> <td><%= name %></td> </tr> <tr> <th> ふりがな :</th> <td><%= kana %></td> </tr> </table> </body> </html> 30

32 JSP(Java Server Pages) は HTML の中に JAVA のコードを埋め込むことができる言語です JSP は JAVA のように コンパイルする必要がありません ソースファイルをそのままサーバーに置きます JSP が通常の完全なインタプリタと異なる点は 実行時に 実行に先立ってサーブレットに変換され コンパイルされることです サーブレットへの変換やコンパイルがうまくできないと実行できません 従って 通常の完全なインタプリタのように とりあえずできたところまで動かしてみる というわけにはいかないのです また 初めて実行したときは 変換したりコンパイルしたりする時間がかかります が 一度実行されると メモリ上にロードされたまま 何度も使われるので 2 度目からは 高速に動作できます << 注意 >> JSP のファイルを同じ名前で作り直して差し替えた場合 ファイルのタイムスタンプが現在コンパイルされているものより新しい場合のみサーブレットに変換され コンパイルされます 古いファイルに差し替えようとすると変換されませんので, 一度保存しなおして タイムスタンプを最新にしてから実行してください 31

33 JSP は サーブレットと全く同じことができます ですから JSP だけでサーブレットを記述することもできます しかし JSP は HTML を出力する 機能に優れており サーブレットのうち 画面出力の部分だけを担当することにより プログラミングの経験の浅い デザイナでも HTML さえ知っていれば 容易に記述することができます それにより プログラマとデザイナが同時に作業を進行することできますし 画面デザインだけが変更された場合には JSP だけを差し替えればすむ というメリットがあります 逆に JAVA のコードも記述できますので JAVA の for 文や if 文などのロジックを加えた動的なページを作ることができます サーブレットでは 一般に3つの役割に分け 以下のように分担します モデル 必要なデータの保持と業務ロジック JAVABeans ビュー 画面デザイン JSP コントロール 入力情報を受け取り モデルとビューをコントロールサーブレット このような分担の方法を MVC モデルと言います JSP を構成する要素 JSP の記述は 3つの要素に分類することができます 1. ディレクティブ (Directive) JSP ファイルを実行する JSP コンテナに対する指令です 例 page language="java" contenttype="text/html;charset=shift_jis" %> 2. スクリプト (Script) HTML を動的に生成するための JAVA コードを記述します 例 <% for(int i=0;i<5;i++){ %> 3. アクション (Action) JavaBeans や他の JSP を呼び出すための記述をします 例 <jsp:usebean id= beanid scope= page class= MyBeans /> 32

34 ページの属性 はじめに このページの属性を指定します JSP では 属性を指定するタグは以下のよう に書きます page 属性名 = 属性 %> 属性名は 下表の中から 必要なものを指定します 複数の属性を指定したいときは 並 べて書くことができます 属性名 説明 例 language いつも = java と書く language = java extends サーブレットの extends にあたりま ( ほとんと使用しない ) す import ページの中で利用しているクラスが所 import = 属するパッケージを指定します サー java.util.*,java.text.* ブレットの import にあたります import したいパッケージが複数ある ときは, で区切って並べます 以 下のパッケージは指定がなくても import されます java.lang.* javax.servlet.* javax.servlet.http.* javax.servlet.jsp.* session true のとき session 管理するするが session = true false のときは session を作らない デフォルトで true buffer HTML をクライアントに送信する際の buffer = 8KB バッファサイズをキロバイト単位で指定 デフォルトでは8KB autoflush true のとき バッファを自動的にフラ autoflush = true ッシュする指定がなければ true isthreadsafe true のときはマルチスレッドにし isthreadsafe = true false1 のときは SingleThreadModel にする デフォルトでは true info この JSP ページに関する情報 ( 作成日や制作者など ) を記録しておく 他のページから getservletinfo() で読み出す文字列を info = ore_ga_tukutta 33

35 errorpage contenttype iserrorpage 設定エラーが発生したときに表示するページを指定する HTTP ヘッダの ContentType を設定 サーブレットの setcontettype にあたる ture であるとき このページがエラー発生時に呼び出されるページであることを示す errorpage = err.html contenttype = text/html;charset = Shift_JIS iserrorpage = true 例 <%@ page language="java" contenttype="text/html;charset=shift_jis" %> contenttype に html を指定し 文字セットとして Shift_JIS を指定してます文字セットの指定をしないと サーブレット同様 日本語を正しく表示することができません HTML の記述 通常の HTML は そのまま記述します JSP 内に Java の構文を書く JSP 内に Java の構文を埋め込むには 以下のタグで囲みます <% Java の構文 %> 文の途中でも JAVA の命令の部分だけ このタグで囲みます このタグで囲まれた中には Java の命令を何でも書くことができます 例 ) <% for(int i = 0;i<3;i++){ %> こんにちは <BR> <% %> こんにちは を3 回表示します 34

36 変数の内容を HTML としてクライアントに送信する通常の決まった文字であれば そのまま書きますが ( 前ページの例の こんにちは のように ) 変数の内容を HTML としてクライアントに送信するには 以下のタグで囲みます <%= 送信したい内容 %> 変数の内容や メソッドを実行した結果などを送信したいときに使います 例 <%= text %> 変数 text の内容を送信します 変数名 text はあらかじめ宣言されて データが記録されていなければなりません <% %> と組み合わせると 配列の内容を1つずつ送信することができます 例 <% for(int i = 0;i<kamoku.length;i++){ %> <%= kamoku[i]+" " %> <% %> クラス変数の宣言 <% %> タグの中で 変数の宣言を行うと ローカル変数として宣言されます クラス変数を宣言したいときには 以下のタグを使います <%! クラス変数の宣言 %> クラス変数は スレッドが終了しても継続して使うことができますが その反面 複数のスレッドが同時に起動されていても1つしか存在しないので その取り扱いには 注意が必要です 例 <%! int Total = 0; %> この total は JSP がロードされている間 最初の1 回しか初期化されないため 合計値を求めようとすると 履歴のすべてが累積されてしまいます HTML のコメント文 HTML にもコメントを沢山入れておきましょう HTML では 以下のタグで囲まれた部分は 無視されます <!-- =--> このタグは HTML のタグです 従って このタグで囲まれた部分 クライアントに送信されます 35

37 JSP のコメント文 JSP にもコメントを沢山入れておきましょう <% %> で囲まれた部分は JAVA なので JAVA のコメント /* */ と // がそのまま使えます その他に 下記のタグが JSP のコメント文となり クライアントにも送信されません <%-- コメント文 --%> 暗黙のオブジェクト JSP では 宣言せずに使える暗黙のオブジェクト名が用意されています 以下に一覧表を 示します 暗黙のオブジェクト 変換後のクラス 説明 request ServletRequest サーブレットの doget や dopost の1つ目の引数にあたります クライアントからの要求情報を保持します 例 <% request.getparameter( ); %> response ServletResponse サーブレットの doget や dopost の2つ目の引数にあたります クライアントに対する応答情報を保持します 例 <% response.getwriter(); %> pagecontext PageContext PageContext クラスは サーブレットで持っているセッションやオブジェクトの情報を管理するクラスです JSP 内では あまり使われません session HttpSession HttpSession は セッション情報を保持するクラスです 例 <% session.getattribute(); %> application ServletContext ServletContext クラスは サーブレットの環境情報を保持しているクラスで API のバーションやファイルが実際に置かれているパス名などを取り出すことができますが JSP 内では あまり使われません out JSPWriter クライアントに対する文字列の出力先です 例 <% out.print(text); %> config ServletConfig ServletConfig クラスは サーブレットの設定情報を保持しているクラスす JSP 内ではあまり使われません page Object サーブレットの this と同じです exception Throwable Throwable は エラー情報を保持するクラスです 36

38 サーブレットからのリクエストの転送 本来は ID とパスワードは データベースから取得するのですが ここでは ID に IS04 パスワードに kamata と入力されたときだけログインできることにしましょう login.html のフォームは? <form action=" servlet/logincheck " method="post"> 37

39 package servlets; import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class LoginCheck extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getparameter("id"); String pass = request.getparameter("pass"); boolean loginok = false; // 本来は ここでデータベースに接続する //SELECT * FROM users where id =? if(id.equals("is04")){ if(pass.equals("kamata")){ loginok = true; response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<html>"); out.println(" <head>"); out.println(" <title> ログイン </title>"); out.println(" </head>"); out.println(" <body>"); if (loginok){ out.println(" ログインできました "); else{ out.println("id またはパスワードが違います "); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 38

40 サーブレットからのリクエストをほかのサーブレットや JSP に転送するには RequestDispatcher インターフェイスの forword メソッドを使って 次のように書きます getservletcontext().getrequestdispatcher(" 転送先 ").forward(request, response); ここでの転送先には コンテキストルートからの絶対パスを書きます 絶対パスですから 先頭は必ず / で始まります JSP や HTML は拡張子まで書きますが サーブレットの場合 には サーブレット名を指定するので 拡張子は書きません サーブレットからほかのサーブレットや JSP にリクエストを転送する際 serattribute メソッドを使って パラメータを一緒に転送することができます パラメータは パラメータ名 と パラメータ値 を一対の組として指定します パラメータ値は 文字列でなければなりませんが パラメータ値は オブジェクトをなんでも指定できます req.setattribute(" パラメータ名 ", パラメータ値 ); 転送先では 以下のようにパラメータを取り出します ( パラメータ値の型 )request.getattribute( パラメータ名 ); 39

41 実際には ログインしたときは コンテンツを表示し できなかったときは 入力画面に 移動します package servlets; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.*; public class LoginCheck extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getparameter("id"); String pass = request.getparameter("pass"); boolean loginok = false; // 本来は ここでデータベースに接続する //SELECT * FROM users where id =? if(id.equals("yokohama")){ if(pass.equals("system")){ loginok = true; if(loginok){ getservletcontext().getrequestdispatcher("/loginok.html").forward(request, response); else{ getservletcontext().getrequestdispatcher("/loginng.html").forward(request, response); 40

42 loginok.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> </head> <body> ログインできました </body> </html> loginng.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> </head> <body> IDまたはパスワードがちがいます </body> </html> 41

43 html を jsp に変えて id を表示します loginok.jsp page language="java" import="java.lang.*,java.util.*" contenttype="text/html;charset=utf-8" %> <% String path = request.getcontextpath(); String basepath = " String id = (String)request.getAttribute("id"); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basepath%>"> <title>my JSP 'loginok.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=iso "> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> This is my 'loginok.jsp' JSP page. <br> 受け取ったIDは <%= id %> </body> </html> 42

44 loginng.jsp page language="java" import="java.lang.*,java.util.*" %> <% String path = request.getcontextpath(); String basepath = " %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basepath%>"> <title>my JSP 'loginng.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=iso "> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> This is my 'loginng.jsp' JSP page. <br> </body> </html> 43

45 logincheck.java public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getparameter("id"); String pass = request.getparameter("pass"); // 本来はここでデータベースに問い合わせる // テーブル名 :users // フィールド名 :id passwordである場合 //"SELECT * from users where id='"+id+ // "' and password='"+pass+"'" // 本来はセキュリティを考える boolean loginok; if (id.equals("is04") && pass.equals("kamata")){ loginok = true; else{ loginok = false; request.setattribute("id", id); if (loginok){ this.getservletcontext().getrequestdispatcher("/loginok.jsp"). forward(request, response); else{ this.getservletcontext().getrequestdispatcher("/loginng.jsp"). forward(request, response); 44

46 45

47 練習 ラジオボタンで画面を振り分ける 46

48 language.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> </head> <body> <form action="servlet/selectlanguage" method="post"> <input type="radio" name="select" value="0" checked>english<br> <input type="radio" name="select" value="1" > 日本語 <br> <input type="submit" value=" 選択 "> </form> </body> </html> SelectLanguage.java public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String p = request.getparameter("select"); int lang = Integer.parseInt(p); String[] htmlname ={"/english.html", "/Japanese.html"; this.getservletcontext().getrequestdispatcher(htmlname[lang]). forward(request, response); 47

49 JavaBeans の設計 情報をまとめてクラス化することを JavaBeans といい また 作成したクラスを Bean と言 います Beans はパッケージに収めておかなければなりません Bean の条件 Bean は 今まで作成してきたクラスとなんら変わりませんが 以下のような条件があります 引数なしのコンストラクタが用意されていることインスタンス化するだけのコンストラクタ セッタ ゲッタが用意されていること JSP のコマンドにより セッタ ゲッタを呼び出すとき メソッド名ではなく メンバ変数名を使う JSP による Bean の利用 JSP では Bean のオブジェクトを利用するためのタグが用意されています 1 <jsp:usebean> アクションこのタグにより 指定のクラスのオブジェクトが利用できるようになります <jsp:usebeans id= オブジェクト名 scope= オブジェクト有効範囲 class= クラス名 /> または <jsp:usebean id= オブジェクト名 scope= オブジェクト有効範囲 class= クラス名 /> bean に関する処理 </jsp:usebean> 各属性には 以下のような値を与えます属性説明 id オブジェクト名を与える このタグ以降 JSP に埋め込まれた Java コード中で インスタンス化されたオブジェクトとして利用できる scope 以下のいずれか値説明 page このページ中でのみ参照できる デフォルト request このリクエストの処理の間 参照できる include されたページ中でも参照できる 48

50 session application セッションが継続する間 参照できる セッションにこの id のオブジェクトが存在した場合 あらためてインスタンス化せず 同じものを参照する セッションにバインドされていない場合には 新しくインスタンス化するアプリケーションが継続している間 参照できる セッションを超えて ほかのサーブレットや JSP から同一のオブジェクトが参照できる 2 <jsp:setproperty> アクション Bean のセッタメソッドを呼び出して フィールドに値を設定する <jsp:setproperty name= オブジェクト名 property= フィールド名 value= 値 /> または <jsp:setproperty name= オブジェクト名 property= フィールド名 param= パラメータ名 /> フィールドに設定する値を直接書く場合は 前者を使います フォームを持つ JSP や HTML から呼び出され パラメータを伴う場合は 後者を使います 3 <Jsp:getProperty> アクション Bean のゲッタメソッドを呼び出してフィールドに設定されている値を取得するタグで す <jsp:getproperty name= オブジェクト名 property= フィールド名 /> 49

51 学生を扱う JavaBean package datas; public class Personal { // メンバ変数 private String id; private String name; private int age; // 学籍番号 // 名前 // 年齢 // コンストラクタ public Personal(){ id = null; name = null; age = 0; public Personal(String id, String name, int age){ this.id = id; this.name = name; this.age = age; public void setid(string id){ this.id = id; public String getid(){ return id; public String getname() { return name; public void setname(string name) { this.name = name; public int getage() { return age; public void setage(int age) { this.age = age; 50

52 学生情報をホームページに表示してみましょう import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import datas.personal; public class DispPersonal extends HttpServlet { /** * The doget method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * request the request send by the client to the server response the response send by the server to the client ServletException if an error occurred IOException if an error occurred */ public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { Personal p1 = new Personal("K101C0000", " じゅげむじゅげむ ", 20); response.setcontenttype("text/html ; charset=utf-8"); this.preventcaching(request, response); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<html>"); out.println(" <head>"); 51

53 out.println(" <title>a Servlet in GET</title>"); out.println(" </head>"); out.println(" <body>"); out.println(" 学籍番号 :" + p1.getid() + "<br>"); out.println(" 氏名 :" + p1.getname() + "<br>"); out.println(" 年齢 :" + p1.getage() + "<br>"); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); /** * Prevents navigator from caching data. * request the request send by the client to the server response the response send by the server to the client */ protected void preventcaching(httpservletrequest request, HttpServletResponse response) { // see String protocol = request.getprotocol(); if ("HTTP/1.0".equalsIgnoreCase(protocol)) { response.setheader("pragma", "no-cache"); else if ("HTTP/1.1".equalsIgnoreCase(protocol)) { response.setheader("cache-control", "no-cache"); // "no-store" work also response.setdateheader("expires", 0); スタイルシートを入れて表にしてみましょう 52

54 html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> <style> <!-- table{ border-collapse:collapse; td,th{ padding:5px; border-style:solid; border-color:#0033ff; border-width:1px; --> </style> </head> <body> <table> <tr> <th> 学籍番号 </th> <td>k010c0000</td> </tr> <tr> <th> 氏名 </th> <td> じゅげむじゅげむ </td> </tr> <tr> <th> 年齢 </th> <td>20 才 </td> </tr> </table> </body> </html> の部分が Bean からのデータになります 53

55 JSP で表示してみましょう page language="java" import="java.lang.*,java.util.*,datas.*" contenttype="text/html; charset=utf-8" %> <% Personal p1 = new Personal("K101C0000", " じゅげむじゅげむ ", 20); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my JSP 'disppersonal.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> <!-- table{ border-collapse:collapse; td,th{ padding:5px; border-style:solid; border-color:#0033ff; border-width:1px; --> </style> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <table> <tr> <th> 学籍番号 </th> <td><%= p1.getid() %></td> 54

56 </tr> <tr> <th> 氏名 </th> <td><%= p1.getname() %></td> </tr> <tr> <th> 年齢 </th> <td><%= p1.getage() %> 才 </td> </tr> </table> </body> </html> JSP には JavaBeans を扱う特別な記述があります page language="java" import="java.lang.*,java.util.*,datas.*" contenttype="text/html; charset=utf-8" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my JSP 'disppersonal.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> <!-- table{ border-collapse:collapse; td,th{ padding:5px; border-style:solid; border-color:#0033ff; border-width:1px; --> </style> 55

57 <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <jsp:usebean id="p1" class="datas.personal" scope="request" /> <jsp:setproperty name="p1" property="id" value="k010c0000" /> <jsp:setproperty name="p1" property="name" value = " じゅげむじゅげむ " /> <jsp:setproperty name="p1" property="age" value="20" /> <table> <tr> <th> 学籍番号 </th> <td><jsp:getproperty name="p1" property="id" /></td> </tr> <tr> <th> 氏名 </th> <td><jsp:getproperty name="p1" property="name" /></td> </tr> <tr> <th> 年齢 </th> <td><jsp:getproperty name="p1" property="age" /> 才 </td> </tr> </table> </body> </html> 56

58 データを取り込みたいときは <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> </head> <body> <form action="servlet/getpersonal" method="post"> 学籍番号 :<input type="text" name="id"><br> 氏名 :<input type="text" name="name"><br> 年齢 :<input type="text" name="age"><br> <input type="submit" value=" 送信 "> </form> </body> </html> import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; 57

59 import datas.personal; public class GetPersonal extends HttpServlet { /** * The dopost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * request the request send by the client to the server response the response send by the server to the client ServletException if an error occurred IOException if an error occurred */ public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String id = (String)request.getParameter("id"); String p = (String)request.getParameter("name"); String name = new String(p.getBytes("iso "),"utf-8"); int age = Integer.parseInt((String)request.getParameter("age")); Personal p1= new Personal(id, name, age); response.setcontenttype("text/html;charset=utf-8"); this.preventcaching(request, response); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<html>"); out.println(" <head>"); out.println(" <title>a Servlet in POST</title>"); out.println(" </head>"); out.println(" <body>"); out.println(" 学籍番号 :" + p1.getid() + "<br>"); out.println(" 氏名 :" + p1.getname() + "<br>"); out.println(" 年齢 :" + p1.getage() + "<br>"); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 58

60 /** * Prevents navigator from caching data. * request the request send by the client to the server response the response send by the server to the client */ protected void preventcaching(httpservletrequest request, HttpServletResponse response) { // see String protocol = request.getprotocol(); if ("HTTP/1.0".equalsIgnoreCase(protocol)) { response.setheader("pragma", "no-cache"); else if ("HTTP/1.1".equalsIgnoreCase(protocol)) { response.setheader("cache-control", "no-cache"); // "no-store" work also response.setdateheader("expires", 0); JSP では <%@ page language="java" import="java.lang.*,java.util.*,datas.*" contenttype="text/html; charset=utf-8" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my JSP 'disppersonal.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> <!-- table{ border-collapse:collapse; td,th{ 59

61 padding:5px; border-style:solid; border-color:#0033ff; border-width:1px; --> </style> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <jsp:usebean id="p1" class="datas.personal" scope="request" /> <jsp:setproperty name="p1" property="id" param="id" /> <jsp:setproperty name="p1" property="name" param = "name" /> <jsp:setproperty name="p1" property="age" param="age" /> <table> <tr> <th> 学籍番号 </th> <td><jsp:getproperty name="p1" property="id" /></td> </tr> <tr> <th> 氏名 </th> <td><jsp:getproperty name="p1" property="name" /></td> </tr> <tr> <th> 年齢 </th> <td><jsp:getproperty name="p1" property="age" /> 才 </td> </tr> </table> </body> </html> 文字化けしちゃいました 60

62 Bean を直します public void setname(string p) { String name; try { name = new String(p.getBytes("iso "),"utf-8"); catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block name = "*****"; this.name = name; うまくいきました Java では このように 複数のファイルが連携して動作するので ソースの管理はとても 重要です HTML の name と Bean のメンバ名が完全に一致しているときは 次のように書けます <jsp:setproperty name="p1" property="*" /> 61

63 今のままでは 空欄があったら そのまま渡されてしまいます inputdata.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> </head> <body> <form action="servlet/datacheck" method="post"> 学籍番号 :<input type="text" name="id"><br> 氏名 :<input type="text" name="name"><br> 年齢 :<input type="text" name="age"><br> <input type="submit" value=" 送信 "> </form> </body> </html> 62

64 空欄があったら 元の画面に戻して再度入力を促すようにしてみましょう 一部の情報だけ入力されていない場合には そこだけ再入力させたいものです たとえば 学籍番号だけ入力するのを忘れたら 入力された内容は 表示されるようにしたい HTML 資料を改定してあります 63

65 DataCheck.java import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class DataCheck extends HttpServlet { /** * The dopost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * request the request send by the client to the server response the response send by the server to the client ServletException if an error occurred IOException if an error occurred */ public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getparameter("id"); String name = request.getparameter("name"); String age = request.getparameter("age"); if(!id.equals("") &&!name.equals("")&&!age.equals("")){ // 次に進む datas.personal p1 = new datas.personal(id,name,integer.parseint(age)); request.setattribute("data", p1); this.getservletcontext().getrequestdispatcher("/disp.jsp").forward(request, response); else{ // 戻す request.setattribute("id", id); request.setattribute("name", name); request.setattribute("age", age); this.getservletcontext().getrequestdispatcher("/inputdata.jsp").forward(request, response); 64

66 inputdata.jsp import="datas.personal"%> page language="java" import="java.lang.*,java.util.*" contenttype="text/html;charset=utf-8" %> <% String id = (String)request.getAttribute("id"); String name = (String)request.getAttribute("name"); String age = (String)request.getAttribute("age"); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my JSP 'inputdata.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <!-- 65

67 <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> please input all datas<br> <form action="datacheck" method="post"> number:<input type="text" name="id" value="<%= id %>"><br> name:<input type="text" name="name" value="<%= name %>"><br> age:<input type="text" name="age" value="<%= age %>"><br> <input type="submit" value="send"> </form> <body> This is my 'inputdata.jsp' JSP page. <br> </body> </html> そして 学籍番号だけ入れなおして 再送したら 何が起きたでしょうか? 転送先を servlet/ DataCheck にしていると 404 になる 66

68 参考 JavaScript で入力値のチェック JavaScript はクライアント側で動作するプログラムです サーブレットがサーバサイドで動作して HTML を出力するのに対し JavaScript は プログラムをそのままクライアント側に送ります そのため クライアント側で発生したイベントに応じた処理を実装できます JavaScript は Java と似て非なるものです インドとインドネシアくらい違います if 文や for 文の文法は同じですが 変数に型がありません var 変数名 ; のように宣言します 関数の定義は 以下のように記述します function 関数名 ( 仮引数名の並び ){ return 戻り値 ; 呼び出し側は HTML に埋め込んで書きます <input type= submit value= 送信 onclick= return 関数名 () > この例では 関数の戻りが true のときだけ submit が有効になり false のときは submit はキャンセルされます また JavaScript により 表示領域に文字を書き込んだり スタイルを変更したりすることができます スタイルシートの ID と組み合わせて使います 以上を利用すると クライアント側で 入力の状態をチェックし 条件を満たしたときだ けサーバ側に送信することができるようになります 67

69 全部入力されたときだけ サーバ側に飛ばす 68

70 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title> 情報の入力 </title> <style type="text/css">.errmsg{ color:red; font-weight:bold; font-style:italic; </style> <script type="text/javascript"> function checkit(){ var done = true; var id = document.getelementbyid("id").value; if(id == ""){ document.getelementbyid("idmessage").innerhtml ="idを入力してください "; done = false; else{ document.getelementbyid("idmessage").innerhtml =""; var name = document.getelementbyid("name").value; if(name == ""){ document.getelementbyid("namemessage").innerhtml =" 氏名を入力してください "; done = false; else{ document.getelementbyid("namemessage").innerhtml 69

71 =""; var age = document.getelementbyid("age").value; if(age == ""){ document.getelementbyid("agemessage").innerhtml =" 年齢を入力してください "; done = false; else{ document.getelementbyid("agemessage").innerhtml =""; return done; </script> </head> <body> <form action="servlet/getpersonal" method="post"> 学籍番号 :<input type="text" name="id" id="id"><span id="idmessage" class="errmsg"></span><br> 氏名 :<input type="text" name="name" id="name" ><span id="namemessage" class="errmsg"></span><br> 年齢 :<input type="text" name="age" id="age"><span id="agemessage" class="errmsg"></span><br> <input type="submit" value=" 送信 " onclick="return checkit();"> </form> </body> </html> 70

72 情報がいっぱい Personal クラスのインスタンスがたくさんあったら それをまとめて表示してみましょう Personal クラスを ArrayList で管理すると 可変長配列になります HashMap で管理すると 連想配列になります サーブレットで import java.io.ioexception; import java.io.printwriter; import java.util.arraylist; import java.util.list; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import datas.personal; public class DiapPersonalList extends HttpServlet { cc public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { // データがいっぱい List<Personal> list = new ArrayList<Personal>(); list.add(new Personal("K010C0000", " じゅげむ ", 20)); list.add(new Personal("K010C9999", " ごこうのすりきり ",62)); list.add(new Personal("K010C8888", " かいじゃりすいぎょ ", 43)); 71

73 response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<html>"); out.println(" <head>"); out.println(" <title>a Servlet in GET</title>"); out.println(" </head>"); out.println(" <body>"); for(int i = 0; i < list.size(); i++){ out.println(list.get(i).getid() + ":" + list.get(i).getname() + ":" + list.get(i).getage() + " 才 <br>"); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 繰り返しの部分は 以下のようにも書けます for(personal p : list){ out.println(p.getid() + ":" + p.getname() + ":" + p.getage() + " 才 <br>"); 72

74 JSP では page language="java" import="java.lang.*,java.util.*,datas.*" contenttype="text/html; charset=utf-8" %> <% %> // データがいっぱい List<Personal> list = new ArrayList<Personal>(); list.add(new Personal("K010C0000", " じゅげむ ", 20)); list.add(new Personal("K010C9999", " ごこうのすりきり ",62)); list.add(new Personal("K010C8888", " かいじゃりすいぎょ ", 43)); <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my JSP 'disppersonallist.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% for(personal p : list){ %> <%= p.getid() %>:<%= p.getname() %>:<%= p.getage() %> 才 <br> 73

75 <% %> </body> </html> 74

76 メモリの共有実験 import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class TestServlet extends HttpServlet { int counter = 0; /** * The doget method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * request the request send by the client to the server response the response send by the server to the client ServletException if an error occurred IOException if an error occurred */ public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { counter++; response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<html>"); out.println(" <head>"); out.println(" <title>a Servlet in GET</title>"); 75

77 out.println(" </head>"); out.println(" <body>"); out.println("counter=" + counter); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 各クライアントからのリクエスト要求で counter の値は 1 ずつ増加していく これを利用して 各クライアントからの情報の入力を受け付けると 情報をためることが できます 76

78 データがたまっていく HTML <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> </head> <body> <form action="servlet/testservlet" method="post"> 学籍番号 :<input type="text" name="id"><br> 氏名 :<input type="text" name="name"><br> 年齢 :<input type="text" name="age"><br> <input type="submit" value=" 送信 "> </form> </body> </html> 77

79 TestServelt import java.io.ioexception; import java.io.printwriter; import java.util.arraylist; import java.util.list; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import datas.personal; public class TestServlet extends HttpServlet { List<Personal> list = new ArrayList<Personal>(); /** * The doget method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * request the request send by the client to the server response the response send by the server to the client ServletException if an error occurred IOException if an error occurred */ public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getparameter("id"); String name = request.getparameter("name"); int age = Integer.parseInt(request.getParameter("age")); Personal p = new Personal(id, name, age); list.add(p); response.setcontenttype("text/html"); 78

80 this.preventcaching(request, response); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<html>"); out.println(" <head>"); out.println(" <title>a Servlet in GET</title>"); out.println(" </head>"); out.println(" <body>"); for(personal p1 : list){ out.println(p1.getid()+":"+p1.getname()+":"+p1.getage()+" 才 <br>"); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 79

81 はじめに 1 回だけリストの初期化をします 上のプログラムでは List<Personal> list = new ArrayList<Personal>(); のように 初期化で対応しましたが 最初の 1 回だけやりたい というときは init() メソッドに書きます import java.io.ioexception; import java.io.printwriter; import java.util.arraylist; import java.util.list; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import datas.personal; public class TestServlet extends HttpServlet { List<Personal> public void init() throws ServletException { list = new ArrayList<Personal>(); public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getparameter("id"); String name = request.getparameter("name"); name = new String(name.getBytes("iso "), "utf-8"); int age = Integer.parseInt(request.getParameter("age")); Personal p = new Personal(id, name, age); list.add(p); response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN ">"); out.println("<html>"); out.println(" <head>"); out.println(" <title>a Servlet in GET</title>"); out.println(" </head>"); 80

82 out.println(" <body>"); for(personal p1 : list){ out.println(p1.getid()+":"+p1.getname()+":"+p1.getage()+" 才 <br>"); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 81

83 HashMap による管理 HashMap は連想配列と言われるもので 配列の添字を 0 からはじまる連番の整数以外にでき るという考え方のものです これを使うと 検索ができます <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> </head> <body> <form action="servlet/hashservlet" method="post"> 学籍番号 :<input type="text" name="id"> <input type="submit" value=" 検索 "/> </form> </body> </html> 82

84 HashServlet.java import java.io.ioexception; import java.io.printwriter; import java.util.hashmap; import java.util.map; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import datas.personal; public class HashServlet extends HttpServlet { Map<String, Personal> map; public void init() throws ServletException { map = new HashMap<String, Personal>(); map.put("k010c0000", new Personal("K010C0000", "abc", 20)); map.put("k010c9999", new Personal("K010C9999", "bbc", 22)); map.put("k010c8888", new Personal("K010C8888", "nhk", 28)); public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getparameter("id"); Personal p = map.get(id); response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<html>"); out.println(" <head>"); out.println(" </head>"); out.println(" <body>"); if(p!= null){ out.println(p.getid()+":"+p.getname()+":"+p.getage()+" 歳 "); 83

85 else{ out.println(" 該当なし "); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 84

86 セッション HTTP では 1 回のリクエストに対して 1 回のレスポンスで接続が切れてしまいます ( ステートレス ) そのため さっきリクエストした人と今度の人が同じであるという識別ができません そこで サーバ側のメモリに 番号札のついた荷台を置いておき 番号札をやり取りして さっきと同じ人からのリクエストかどうかを判定します セッションを使うと 個人に専用のデータセットを作成することができます セッションの取得戻り値メソッドの詳細 HttpSession getsession() HTTP リクエストに対応するセッションを取得します まだセッションがない場合には 新しくセッションを作成します HttpSession session = request.getsessino(); 85

87 HttpSession クラスセッションを管理するために HttpSession インタフェイスが用意されています 主なメソッドは 以下のとおりです戻り値メソッドの詳細 void invalidate() セッションを終了し バインドされている情報を無効にします boolean isnew() セッションが新しく作られたものであるときは true を すでに存在していたときは false を返します String getid() セッション ID を取得します セッションに情報をバインド戻り値メソッドの詳細 void setattribute(string name, Object value) 1 組の情報セッションにバインドします session.setattribute( userinfomation, userid); バインドされたオブジェクトを取得する戻り値メソッドの詳細 Object getattribute(string name) バインドされたオブジェクトの中から name に該当するオブジェクトを取得します PersonalList list = (PersonalList)session.getAttribute( datas ); JSP では 暗黙のオブジェクトとして session が用意されており サーブレットでは書かなければならない HttpSession session = request.getsessino(); を省略して いきなり session を使います 86

88 セッションを切るには 以下のいずれかを行います 1. ブラウザを全て閉じる 2. プログラムでセッションを切る 3.Tomcat を停止する 同じブラウザからだと継続する 87

89 ブラウザが異なると ユーザが違うので セッションは継続しない 88

90 豆を入れて台車に乗せるための缶 PersonalLIst.java package datas; import java.util.arraylist; import java.util.list; public class PersonalList { List<Personal> list; // コンストラクタ public PersonalList() { list = new ArrayList<Personal>(); // セッタ ゲッタ public List<Personal> getlist() { return list; public void setlist(list<personal> list) { this.list = list; // メソッド public Personal getpersonal(int index){ return list.get(index); // 豆を缶に入れるためのメソッド public void add(personal p){ list.add(p); 89

91 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title> ログイン </title> </head> <body> </body> </html <form action="servlet/login" method="post"> </form> Login.java key:<input type="text" name="key"><br> pass:<input type="password"name="pass"><br> <input type="submit" value=" ログイン "> import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import datas.personal; import datas.personallist; import datas.user; public class SessionServlet extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { // セッションを取得する HttpSession session = request.getsession(); PersonalList list = (PersonalList) session.getattribute("datas"); if (list == null){ // 初めてだったら 缶を作る list = new PersonalList(); 90

92 //HTML 側から情報ゲット String id = request.getparameter("id"); String name = request.getparameter("name"); name = new String(name.getBytes("iso "), "utf-8"); int age = Integer.parseInt(request.getParameter("age")); Personal p = new Personal(id, name, age); list.add(p); // 豆を缶に入れる // 缶を台車に載せる session.setattribute("datas", list); response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN ">"); out.println("<html>"); out.println(" <head>"); out.println(" <title>a Servlet in POST</title>"); out.println(" </head>"); out.println(" <body>"); for(int i = 0; i < list.getlist().size();i++){ p = list.getpersonal(i); out.println(p.getid()+":"+p.getname() + ":" + p.getage()); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 91

93 ログインしているときだけ豆を積むログインしていないときは ログインしてください と表示する ログインすると ログインした後であれば 豆を積むことができる 92

94 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title> ログイン </title> </head> <body> <form action="servlet/login" method="post"> key:<input type="text" name="key"><br> pass:<input type="password"name="pass"><br> <input type="submit" value=" ログイン "> </form> </body> </html> 93

95 Login.java import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import datas.user; public class Login extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getsession(); String key = request.getparameter("key"); String pass = request.getparameter("pass"); // 本当はここで DB などで正しいかどうかをチェックする // みんな正しいとする User user = new User(key, pass); session.setattribute("user", user); response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<html>"); out.println(" <head>"); out.println(" <title>a Servlet in POST</title>"); out.println(" </head>"); out.println(" <body>"); out.println("login できました "); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 94

96 SessionServlet.java import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import datas.personal; import datas.personallist; import datas.user; public class SessionServlet extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { // セッションを取得する HttpSession session = request.getsession(); PersonalList list = (PersonalList) session.getattribute("datas"); // ログインしているかどうかを調べる User user = (User) session.getattribute("user"); boolean flg; if (user == null){ // ログインしていない flg = false; else{ // ログインしているときだけ豆を缶に入れる flg = true; if (list == null){ // 初めてだったら 缶を作る list = new PersonalList(); //HTML 側から情報ゲット String id = request.getparameter("id"); String name = request.getparameter("name"); name = new String(name.getBytes("iso "), "utf-8"); int age = Integer.parseInt(request.getParameter("age")); Personal p = new Personal(id, name, age); 95

97 list.add(p); // 豆を缶に入れる // 缶を台車に載せる session.setattribute("datas", list); response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN ">"); out.println("<html>"); out.println(" <head>"); out.println(" <title>a Servlet in POST</title>"); out.println(" </head>"); out.println(" <body>"); if(flg){ // ログインしている for(int i = 0; i < list.getlist().size();i++){ Personal p = list.getpersonal(i); out.println(p.getid() + ":" + p.getname() + ":" + p.getage()); else{ // ログインしていない out.println(" ログインしてください "); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 96

98 97

99 ブラウザが変わると ユーザが違うので 98

100 package datas; public class Music { String id; // 番号 String player; // 歌手 String song; // 曲 // コンストラクタ public Music(String id, String player, String song) { this.id = id; this.player = player; this.song = song; public Music() { // セッタ ゲッタ public String getid() { return id; public void setid(string id) { this.id = id; public String getplayer() { return player; public void setplayer(string player) { this.player = player; public String getsong() { return song; public void setsong(string song) { this.song = song; 99

101 package datas; import java.util.hashmap; import java.util.map; public class MusicMap { private Map<String, Music> map; public MusicMap() { map = new HashMap<String, Music>(); // セッタ ゲッタ public Map<String, Music> getmap() { return map; public void setmap(map<string, Music> map) { this.map = map; // 音楽を追加 public void add(music m){ map.put(m.getid(), m); // 取り出す public Music get(string key){ return map.get(key); 100

102 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> </head> <body> <form action="servlet/buymusic" method="post"> 番号 :<input type="text" name="id"><br> 歌手 :<Input type="text" name="player"><br> 曲 :<input type="text" name="song"><br> <input type="submit" value=" 購入 "> </form> </body> </html> import java.io.ioexception; import java.io.printwriter; import java.util.set; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import datas.music; import datas.musicmap; public class BuyMusic extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getsession(); 101

103 MusicMap kan = (MusicMap) session.getattribute("music"); if (kan == null){ kan = new MusicMap(); String id = request.getparameter("id"); String player = request.getparameter("player"); player = new String(player.getBytes("iso "), "utf-8"); String song = request.getparameter("song"); song = new String(song.getBytes("iso "), "utf-8"); Music m = new Music(id, player, song); kan.add(m); // 缶に入れる session.setattribute("music", kan); response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<html>"); out.println(" <head>"); out.println(" <title>a Servlet in POST</title>"); out.println(" </head>"); out.println(" <body>"); out.println(" 購入しました "); out.println(kan.getmap().size() + " 曲購入されています "); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 102

104 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> </head> <body> <form action="servlet/listen" method="post"> 番号 :<input type="text" name="id"> <input type="submit" value=" 聞く "> </form> </body> </html> import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import datas.music; import datas.musicmap; public class Listen extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getsession(); MusicMap mm = (MusicMap) session.getattribute("music"); 103

105 String id = request.getparameter("id"); // 番号 Music music = null; if (mm!= null){ music = mm.get(id); response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<html>"); out.println(" <head>"); out.println(" <title>a Servlet in POST</title>"); out.println(" </head>"); out.println(" <body>"); if(music!= null){ out.println(" 歌手 :" + music.getplayer() + "<br>"); out.println(" 曲 :" + music.getsong() + "<br>"); else{ out.println(" 聞く権利がありません "); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 104

106 サーブレットでためて JSP で表示 105

107 import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import datas.personal; import datas.personallist; public class IntoData extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getsession(); PersonalList list = (PersonalList) session.getattribute("datas"); if(list == null){ list = new PersonalList(); String id = request.getparameter("id"); String name = request.getparameter("name"); name = new String(name.getBytes("iso "), "utf-8"); int age = Integer.parseInt(request.getParameter("age")); Personal p1 = new Personal(id, name, age); list.add(p1); session.setattribute("datas", list); this.getservletcontext().getrequestdispatcher("/sessionlist.jsp").forward(request, response); 106

108 sessionlist.jsp page language="java" import="java.lang.*,java.util.*,datas.*" contenttype="text/html; charset=utf-8" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my JSP 'sessionlist.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style type="text/css"> table{ border-collapse:collapse; td,th{ padding:5px; border-style:solid; border-color:#0000ff; border-width:1px; </style> </head> <body> セッションに保存されたデータは以下のとおりです <Br> <jsp:usebean id="datas" class="datas.personallist" scope="session" /> <table> <tr> <th> 学籍番号 </th> <th> 氏名 </th> 107

109 <th> 年齢 </th> </tr> <% for(personal p : datas.getlist()){ %> <tr> <td><%= p.getid() %></td> <td><%= p.getname() %></td> <td><%= p.getage() %> 才 </td> </tr> <% %> </table> </body> </html> 108

110 標準タグライブラリ for 文や if 文 出力も HTML ライクに記述するために また 国による通貨や日付の表記の 違いを吸収するために など JSP に Java を記述しないためのタグが開発されています jakarta-taglibs-standard zip をダウンロードして 解凍し jstl.jar standard.jar を WEB-INF\lib にコピーしてください 109

111 種類に分かれています ライブラリ URI プリフィックス コア taglib prefix="c" uri=" %> c XML <%@ taglib prefix="xml" uri=" %> x 国際化 <%@ taglib prefix="xml" uri=" %> fmt データベース <%@ taglib prefix="xml" uri=" %> sql この URI をページのはじめに必要なものを入れてください <%@ page language="java" contenttype="text/html;charset=utf-8" %> <%@ taglib prefix="c" uri=" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my JSP 'easy.jsp' starting page</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <body> <h1>jsp is as easy as...</h1> <%-- Calculate the sum of dynamically --%> = <c:out value="${ " /> </body> </html> 110

112 EL 式演算や変数を使うためには EL 式 を使います EL 式は JSTL との組み合わせでないと利用できません <% %> で宣言した変数は JSTL では使えません c:out 属性名 Java 型 動的な値の受け 説明 取り value 任意の型 Yes 必須 レスポンスに追加する値 escapexml Boolean Yes オプション true: 値に含まれる特殊文字を変換 false: 変換しない ( デフォルト ) default 任意の型 Yes オプション 値が null の場合に使用する値 c:foreach 属性名 Java 型 動的な値の受け 説明 取り items コレクション Yes オプション 繰り返し処理を行う値のコレクション 値が null のとき 繰り返しは行われない この指定がないときは begin end が必要 var String No オプション 現時点で保持している値を格納する変数名 varstatus String No オプション LoopTagStatus オプションを保持している変数名 begin int Yes オプション 0 からはじまる最初の添字 end int Yes オプション 0 からはじまる最後の添字 step int Yes オプション 繰り返しの増分 c:if 属性名 Java 型 動的な値の受け 説明 取り test boolean Yes 必須 true または false になる式 var String No オプション 論理型の結果を保持する変数の名前 scope String No オプション 変数のスコープ page, request, session, application 111

113 c:when 属性名 Java 型 動的な値の受け 説明 取り test boolean Yes 必須 true または false になる論理式 c:set 属性名 Java 型 動的な値の受け 説明 取り value 任意の型 Yes ボディで値を提供しない限り必須 セットする値 var String No オプション 値を保持する変数名 指定されない場合は target と property を使用 scope String No オプション 変数のスコープ page, request, session, application target Java Bean Yes オプション property の値 Map property String Yes オプション target で指定されるプロパティ 各国による通貨や日付の表現の違いを吸収し 文字セットを指定する fmt:formatdate 属性名 Java 型 動的な値 説明 の受け取 り value java.util.date Yes 必須 形式化される日付 pattern String Yes オプション 日付と時刻の両方に適用される独自 の形式パターン type String Yes オプション 形式化する部分 time,date,both デフォルトは date datestyle String Yes オプション 日付部分に適用される定義済みパタ ーン default,short,medium,long,full デフォルトは default timestyle String Yes オプション 時刻部分に適用する定義済みパター ン default,short,medium,long,full デフォルトは default timezone String or Yes オプション 日付 / 時刻に対するタイムゾーン java.util.timezone var String No オプション 形式化された値を保持する変数の名 前 112

114 scope String No オプション 変数のスコープ page,request,session,application デフォルトは page fmt:formatnumber 属性名 Java 型 動的な値の 説明 受け取り value String or Yes ボディで指定されない限り必須 形式化される数値 Number pattern String Yes オプション パターン type String Yes オプション number,currency,percentage currencycode String Yes オプション ISO-4217 の通貨コード日本円は JPY currencysymbol String Yes オプション 通貨記号 var String No オプション 形式化された値を保持する変数名 scope String No オプション 変数のスコープ page,request,session,application デフォルトは page fmt:requestencoding 属性名 Java 型 動的な値の受け取り 説明 value String or Number Yes オプション パラメータの文字セット 113

115 入力されたデータをセッションにためる JSP を taglib を使って書き直すと sessionlist.jsp page language="java" import="java.lang.*,java.util.*,datas.*" contenttype="text/html; charset=utf-8" %> taglib prefix="c" uri=" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my JSP 'sessionlist.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style type="text/css"> table{ border-collapse:collapse; td,th{ padding:5px; border-style:solid; border-color:#0000ff; border-width:1px; </style> </head> <body> セッションに保存されたデータは以下のとおりです <Br> <jsp:usebean id="datas" class="datas.personallist" scope="session" /> <table> <tr> <th> 学籍番号 </th> <th> 氏名 </th> <th> 年齢 </th> </tr> <c:foreach var="p" items="${datas.list" > <tr> <td><c:out value="${p.id" /></td> <td><c:out value="${p.name" /></td> <td><c:out value="${p.age" /> 才 </td> </tr> 114

116 </c:foreach> </table> </body> </html> 20 歳以上のときだけ * を付ける <%@ page language="java" import="java.lang.*,java.util.*,datas.*" contenttype="text/html; charset=utf-8" %> <%@ taglib prefix="c" uri=" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my JSP 'sessionlist.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style type="text/css"> table{ border-collapse:collapse; td,th{ padding:5px; 115

117 border-style:solid; border-color:#0000ff; border-width:1px; </style> </head> <body> セッションに保存されたデータは以下のとおりです <Br> <jsp:usebean id="datas" class="datas.personallist" scope="session" /> <table> <tr> <th> 学籍番号 </th> <th> 氏名 </th> <th> 年齢 </th> <th> 大人 </th> </tr> <c:foreach var="p" items="${datas.list" > <tr> <td><c:out value="${p.id" /></td> <td><c:out value="${p.name" /></td> <td><c:out value="${p.age" /> 才 </td> <td> <c:if test="${p.age > 20"> * </c:if> </td> </tr> </c:foreach> </table> </body> </html> 116

118 page language="java" import="java.lang.*,java.util.*,datas.*" contenttype="text/html; charset=utf-8" %> taglib prefix="c" uri=" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my JSP 'sessionlist.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style type="text/css"> table{ border-collapse:collapse; td,th{ padding:5px; border-style:solid; border-color:#0000ff; border-width:1px; </style> 117

119 </head> <body> セッションに保存されたデータは以下のとおりです <Br> <jsp:usebean id="datas" class="datas.personallist" scope="session" /> <table> <tr> <th> 学籍番号 </th> <th> 氏名 </th> <th> 年齢 </th> <th> 大人 </th> </tr> <c:foreach var="p" items="${datas.list" > <tr> <td><c:out value="${p.id" /></td> <td><c:out value="${p.name" /></td> <td><c:out value="${p.age" /> 才 </td> <td> <c:choose> <c:when test="${p.age > 20"> 大人 </c:when> <c:otherwise> 未成年 </c:otherwise> </c:choose> </td> </tr> </c:foreach> </table> </body> </html> 118

120 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> </head> <body> <h2> アンケート1</h2> <form action="servlet/get1" method="post"> <h3> 問 1: 性別 </h3> <input type="radio" name="sex" value="0" checked> 男 <input type="radio" name="sex" value="1"> 女 <h3> 問 2: 年齢 </h3> <select name="age"> <option value="0" selected>~16 歳 </option> <option value="1">17~22 才 </option> <option value="2">23~30 才 </option> <option value="3">31 才 ~ </option> </select> <p> <input type="submit" value=" 次へ "> </p> </form> </body> </html> 119

121 bean package answer; public class AnswerData { // メンバ変数 private int sex; // 性別 private int age; // 年齢帯 private int salary; // 時給 // コンストラクタ public AnswerData() { public AnswerData(int sex, int age) { this.sex = sex; this.age = age; // セッタ ゲッタ public int getsex() { return sex; public void setsex(int sex) { this.sex = sex; public int getage() { return age; public void setage(int age) { this.age = age; public int getsalary() { return salary; public void setsalary(int salary) { this.salary = salary; 120

122 servlet import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import answer.answerdata; public class Get1 extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getsession(); int sex = Integer.parseInt(request.getParameter("sex")); int age = Integer.parseInt(request.getParameter("age")); AnswerData data = new AnswerData(sex, age); session.setattribute("ans", data); this.getservletcontext().getrequestdispatcher("/index2.html").forward(request, response); 121

123 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> </head> <body> <h2> アンケート2</h2> <form action="get2" method="post"> <h3> 問 3: 時給 </h3> <input type="text" name="salary" > <p> <input type="submit" value=" 終わり "> </p> </form> </body> </html> 122

124 servlet Get2 import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import answer.answerdata; public class Get2 extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getsession(); AnswerData ans = (AnswerData) session.getattribute("ans"); int salary = Integer.parseInt(request.getParameter("salary")); ans.setsalary(salary); session.setattribute("ans", ans); this.getservletcontext().getrequestdispatcher("/final.jsp"). forward(request, response); 123

125 final.jsp page language="java" import="java.lang.*,java.util.*" contenttype="text/html; charset=utf-8" %> taglib prefix="c" uri=" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my JSP 'final.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <jsp:usebean id="ans" class="answer.answerdata" scope="session"/> 年齢 :<c:out value="${ans.age" /><br> 性別 :<c:out value="${ans.sex" /><br> 時給 :<c:out value="${ans.salary" /><br> </body> </html> これでは 表示が貧弱すぎるので 124

126 page language="java" import="java.lang.*,java.util.*" contenttype="text/html; charset=utf-8" %> taglib prefix="c" uri=" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my JSP 'final.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head> <body> <jsp:usebean id="ans" class="answer.answerdata" scope="session"/> 年齢 : <c:choose> <c:when test="${ans.age == 0">~16 才 </c:when> <c:when test="${ans.age == 1">17 才 ~22 才 </c:when> <c:when test="${ans.age == 2">23 才 ~30 才 </c:when> <c:otherwise>31 才 ~</c:otherwise> </c:choose> <br> 性別 : <c:choose> <c:when test="${ans.sex == 0"> 男 </c:when> <c:otherwise> 女 </c:otherwise> </c:choose> <br> 時給 :<c:out value="${ans.salary" /> 円 <br> </body> </html> 125

127 Beans に変換機能を持たせる方法もあります package answer; public class AnswerData { // メンバ変数 private int sex; // 性別 private int age; // 年齢帯 private int salary; // 時給 // コンストラクタ public AnswerData() { public AnswerData(int sex, int age) { this.sex = sex; this.age = age; // セッタ ゲッタ public int getsex() { return sex; << 中略 >> public String getsex2(){ if(sex == 0){ return " 男 "; else{ return " 女 "; public String getage2(){ String s; switch(age){ case 0: s = "~16 才 "; break; case 1: s = "17 才 ~22 才 "; 126

128 break; case 2: s = "23 才 ~30 才 "; break; default: s = ""; return s; final.jsp <%@ page language="java" import="java.lang.*,java.util.*" contenttype="text/html; charset=utf-8" %> <%@ taglib prefix="c" uri=" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my JSP 'final.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head> <body> <jsp:usebean id="ans" class="answer.answerdata" scope="session"/> 年齢 :<c:out value="${ans.age2 " /><br> 性別 :<c:out value="${ans.sex2 " /><br> 時給 :<c:out value="${ans.salary" /> 円 <br> </body> </html> 127

129 セッションを切る 以前のデータはなくなっている 128

130 import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; public class Logout extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getsession(); session.invalidate(); response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<html>"); out.println(" <head>"); out.println(" <title>a Servlet in GET</title>"); out.println(" </head>"); out.println(" <body>"); out.println(" セッションを切りました "); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 129

131 アプリケーション全体で共有するメモリ セッションが異なっても リクエストが異なっても共通に使えるメモリを用意します ServletContext application = this.getservletcontext(); application.setattribute(" パラメータ名 ", パラメータ値 ); application.getattribute(" パラメータ名 "); JSP では scope が application になります <jsp:usebean id=" パラメータ名 " class=" クラス名 " scope="application" /> アンケート結果一覧を表示してみましょう アンケート結果をまとめるための Bean を作成 package answer; import java.util.arraylist; import java.util.list; public class AnswerList { private List<AnswerData> list; // コンストラクタ public AnswerList() { list = new ArrayList<AnswerData>(); // セッタ ゲッタ public List<AnswerData> getlist() { return list; 130

132 public void setlist(list<answerdata> list) { this.list = list; // 回答を追加 public void add(answerdata data){ list.add(data); Get2.java import java.io.ioexception; import java.io.printwriter; import java.util.arraylist; import java.util.list; import javax.servlet.servletcontext; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import answer.answerdata; import answer.answerlist; public class Get2 extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getsession(); AnswerData ans = (AnswerData) session.getattribute("ans"); int salary = Integer.parseInt(request.getParameter("salary")); ans.setsalary(salary); session.setattribute("ans", ans); ServletContext application = this.getservletcontext(); 131

133 AnswerList list = (AnswerList) application.getattribute("answers"); if(list == null){ list = new AnswerList(); list.add(ans); application.setattribute("answers", list); this.getservletcontext().getrequestdispatcher("/final.jsp"). forward(request, response); 回答 Bean にメソッド追加 package answer; public class AnswerData { // メンバ変数 private int sex; // 性別 private int age; // 年齢帯 private int salary; // 時給 // コンストラクタ public AnswerData() { public AnswerData(int sex, int age) { this.sex = sex; this.age = age; // セッタ ゲッタ 略 //1 行分の文字列を取得 public String getall(){ return getsex2() + " " + getage2() + " " + getsalary() + " 円 "; 132

134 表示用 JSP page language="java" import="java.lang.*,java.util.*" contenttype="text/html; charset=utf-8" %> taglib prefix="c" uri=" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my JSP 'result.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head> <body> <jsp:usebean id="answers" class="answer.answerlist" scope="application" /> <h2> アンケート結果 </h2> <c:foreach var="ans" items="${answers.list "> <c:out value="${ans.all " /><br> </c:foreach> </body> </html> 133

135 演習 : ショッピングサイト まず HTMLで書いてみましょう <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> <style> <!-- table{ border-collapse:collapse; td,th{ padding:5px; border-style:solid; border-color:#0033ff; border-width:1px;.num{ text-align:right; --> </style> </head> 134

136 <body> <h2> 商品一覧 </h2> <table> <tr> <th> 商品番号 </th> <th> 商品名 </th> <th> 単価 </th> <th> 買う </th> </tr> <form aciton="" method="post"> <tr> <td>a001</td> <td> 東京タワー </td> <td class="num">300</td> <td> <input type="hidden" name="id" value="a001" > <input type="submit" value=" 買う "> </td> </tr> </form> <form aciton="" method="post"> <tr> <td>a002</td> <td> ピサの斜塔 </td> <td class="num">300</td> <td> <input type="hidden" name="id" value="a002" > <input type="submit" value=" 買う "> </td> </tr> </form> <form aciton="" method="post"> <tr> <td>a003</td> <td> スカイツリー </td> <td class="num">500</td> 135

137 <td> <input type="hidden" name="id" value="a003" > <input type="submit" value=" 買う "> </td> </tr> </form> <form aciton="" method="post"> <tr> <td>a004</td> <td> 国会議事堂 </td> <td class="num">250</td> <td> <input type="hidden" name="id" value="a004" > <input type="submit" value=" 買う "> </td> </tr> </form> </table> </body> </html> データ部分を配列で書くためには 1 件分のBeanとそれを束ねるBeanが必要です 136

138 Bean package shopdata; public class Product { private String id; // 商品番号 private String name; // 商品名 private int price; // 単価 // コンストラクタ public Product(String id, String name, int price) { this.id = id; this.name = name; this.price = price; public Product() { // セッタ ゲッタ public String getid() { return id; << 略 >> 束ねる Bean package shopdata; import java.util.hashmap; import java.util.map; public class ProductList { private Map<String, Product> list; // コンストラクタ public ProductList() { 137

139 list = new HashMap<String, Product>(); // セッタ ゲッタ public Map<String, Product> getlist() { return list; public void setlist(map<string, Product> list) { this.list = list; // データを追加 public void add(product p){ list.put(p.getid(), p); これを使って JSP で表示をします Map から 1 ずつデータを取り出した場合 key と value の組が出るの で これを扱うには 以下のように書きます <c:foreach var = "p" items="${productlist.list "> <c:out value="${p.key " /> keyの取り出し <c:out value="${p.value.name " /> valueのうちの1つ </c:foreach> 取り出される順はバラバラになってしまうので 順番はメチャメチャになります 138

140 商品リストは最初の1 回だけ作成すればよいサーブレット /* * 商品データを作成する */ import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletcontext; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import shopdata.product; import shopdata.productlist; public class Lineup extends HttpServlet { // 最初の1 回だけ呼ばれる public void init() throws ServletException { ProductList list = new ProductList(); list.add(new Product("A001", " 東京タワー ", 300)); list.add(new Product("A002", " ピサの斜塔 ", 300)); list.add(new Product("A003", " スカイツリー ", 500)); list.add(new Product("A004", " 国会議事堂 ", 250)); ServletContext application = this.getservletcontext(); application.setattribute("productlist", list); public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { //GET の処理は何もなく すぐ JSP を呼ぶ 139

141 this.getservletcontext().getrequestdispatcher("/lineuplist.jsp"). forward(request, response); page language="java" import="java.lang.*,java.util.*" contenttype="text/html; charset=utf-8" %> taglib prefix="c" uri=" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title> 商品一覧 </title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> <!-- table{ border-collapse:collapse; td,th{ padding:5px; border-style:solid; border-color:#0033ff; border-width:1px;.num{ text-align:right; --> </style> </head> <body> <jsp:usebean id="productlist" class = "shopdata.productlist" scope = "application" /> <h2> 商品一覧 </h2> <table> <tr> <th> 商品番号 </th> 140

142 <th> 商品名 </th> <th> 単価 </th> <th> 買う </th> </tr> <c:foreach var = "p" items="${productlist.list "> <form action="buy" method="post"> <tr> <td><c:out value="${p.key " /></td> <td><c:out value="${p.value.name " /></td> <td class="num"><c:out value="${p.value.price " /></td> <td> <input type="hidden" name="id" value="<c:out value="${p.key " />" > <input type="submit" value=" 買う "> </td> </tr> </form> </c:foreach> </table> </body> </html> 右クリック - ソースの表示 画面上で右クリックして HTML のソースを表示してみてください 141

143 ソースの一部 <form action="buy" method="post"> <tr> <td>a002</td> 一致 <td> ピサの斜塔 </td> <td class="num">300</td> <td> <input type="hidden" name="id" value="a002" > <input type="submit" value=" 買う "> </td> </tr> </form> <form action="buy" method="post"> <tr> <td>a001</td> 一致 <td> 東京タワー </td> <td class="num">300</td> <td> <input type="hidden" name="id" value="a001" > <input type="submit" value=" 買う "> </td> </tr> </form> 2 か所の商品番号が一致していることを確認 買うボタンが押されたら hidden で指定された値 ( 商品番号 ) を引いて POST メソッドが発行される まず 何を買ったのかを表示する A003 が買われたとき 142

144 A001 が買われたとき /* * 商品を買ったとき */ import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class Buy extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getparameter("id"); response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN ">"); out.println("<html>"); out.println(" <head>"); out.println(" <title>a Servlet in POST</title>"); out.println(" </head>"); out.println(" <body>"); out.println("id=" + id); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); これをセッションに積み 全部表示する まず 商品番号だけ 143

145 商品番号をためるBean /* * 買ったものを入れる */ package shopdata; import java.util.arraylist; import java.util.list; public class Cart { private List<String> cartlist; // 購入した商品の商品番号 // コンストラクタ public Cart() { cartlist = new ArrayList<String>(); // セッタ ゲッタ public List<String> getcartlist() { return cartlist; public void setcartlist(list<string> cartlist) { this.cartlist = cartlist; 144

146 // 購入商品を追加 public void add(string id){ サーブレット cartlist.add(id); /* * 商品を買ったとき */ import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import shopdata.cart; public class Buy extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getparameter("id"); // 購入した商品番号を取得 HttpSession session = request.getsession(); // セッションから Cart cart = (Cart) session.getattribute("cart"); // 買い物かごを取り出す if (cart == null){ // 初めてのときは cart = new Cart(); // かごを作成 cart.add(id); // 今買った商品をかごに入れる session.setattribute("cart", cart); // セッションに載せる this.getservletcontext().getrequestdispatcher("/kago.jsp"). forward(request, response); 145

147 page language="java" import="java.lang.*,java.util.*" contenttype="text/html; charset=utf-8" %> taglib prefix="c" uri=" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title> かご </title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> <!-- 商品一覧画面と同じなので省略 --> </style> </head> <body> <jsp:usebean id="cart" class="shopdata.cart" scope="session" /> <h3> お客様のかごの内容は以下のとおりです </h3> <table> <tr> <th> 商品番号 </th> </tr> <c:foreach var="id" items="${cart.cartlist "> <tr> <td><c:out value="${id " /></td> </tr> </c:foreach> </table> <a href="lineup"> 買い物を続ける </a> <a href="sessionout"> 清算する </a> </body> </html> 146

148 清算するときは セッションを切ってかごを空っぽにします /* * セッションを切る */ import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; public class SessionOut extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { // 本当は ここで清算処理を行う // 金額を計算するとか 支払方法と配送先を確認すると j か 履歴をデータベースにとるとか HttpSession session = request.getsession(); session.invalidate(); // セッションを切る response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN ">"); out.println("<html>"); out.println(" <head>"); out.println(" <title>a Servlet in GET</title>"); out.println(" </head>"); out.println(" <body>"); out.println(" お買い上げありがとうございました "); out.println(" </body>"); out.println("</html>"); out.flush(); out.close(); 147

149 かご画面に商品名と金額も表示してみましょう Cart クラスのリストの要素を商品番号だけでなく Product クラスにする Buy サーブレットで合計金額も求めて Cart クラスに入れておく Cart.java /* * 買ったものを入れる */ package shopdata; import java.util.arraylist; import java.util.list; public class Cart { private List<Product> cartlist; // 購入した商品の商品番号 private int total; // 合計金額 // コンストラクタ public Cart() { cartlist = new ArrayList<Product>(); // セッタ ゲッタ public List<Product> getcartlist() { return cartlist; public void setcartlist(list<product> cartlist) { this.cartlist = cartlist; 148

150 public int gettotal() { return total; public void settotal(int total) { this.total = total; // 購入商品を追加 public void add(product p){ cartlist.add(p); System.out.println(" 商品番号 =" + p.getid() + " 商品名 =" + p.getname()); // 合計の計算 public void calctotal(){ total = 0; for(product p : cartlist){ total += p.getprice(); Buy.java /* * 商品を買ったとき */ import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletcontext; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import shopdata.cart; import shopdata.product; import shopdata.productlist; 149

151 public class Buy extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getparameter("id"); // 購入した商品番号を取得 HttpSession session = request.getsession(); // セッションから Cart cart = (Cart) session.getattribute("cart"); // 買い物かごを取り出す if (cart == null){ // 初めてのときは cart = new Cart(); // かごを作成 ServletContext application = this.getservletcontext(); ProductList list = (ProductList) application.getattribute("productlist"); cart.add(list.getproduct(id)); // 今買った商品情報をかごに入れる // 合計金額を求める cart.calctotal(); session.setattribute("cart", cart); // セッションに載せる this.getservletcontext().getrequestdispatcher("/kago.jsp"). forward(request, respon kago.jsp <%@ page language="java" import="java.lang.*,java.util.*" contenttype="text/html; charset=utf-8" %> <%@ taglib prefix="c" uri=" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title> かご </title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> 150

152 <!-- table{ border-collapse:collapse; td,th{ padding:5px; border-style:solid; border-color:#0033ff; border-width:1px;.num{ text-align:right; --> </style> </head> <body> <jsp:usebean id="cart" class="shopdata.cart" scope="session" /> <h3> お客様のかごの内容は以下のとおりです </h3> <table> <tr> <th> 商品番号 </th> <th> 商品名 </th> <th> 金額 </th> </tr> <c:foreach var="product" items="${cart.cartlist "> <tr> <td><c:out value="${product.id " /></td> <td><c:out value="${product.name " /></td> <td class="num"><c:out value="${product.price " /></td> </tr> </c:foreach> <tr> <td colspan="2" class="num"> 合計金額 </td> <td class="num"><c:out value="${cart.total " /></td> </tr> </table> <a href="lineup"> 買い物を続ける </a> <a href="sessionout"> 清算する </a> </body> </html> 151

153 次の目標 かごから削除して 買うのをやめる 個数を指定できるようにする 個数を変更できるようにする 削除ボタンと一緒に何行目を消したいかをhiddenで送信する方法もあります 右クリック-ソース <form action="deletecart" method="post" > <tr> <td>a004</td> <td> 国会議事堂 </td> <td class="num">250 </td> <td><input type="submit" value=" 削除 " > <input type="hidden" name="i" value="0" > 152

154 </tr> </form> <form action="deletecart" method="post" > <tr> <td>a001</td> <td> 東京タワー </td> <td class="num">300 </td> <td><input type="submit" value=" 削除 " > <input type="hidden" name="i" value="1" > </tr> </form> kago.jsp page language="java" import="java.lang.*,java.util.*" contenttype="text/html; charset=utf-8" %> taglib prefix="c" uri=" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title> かご </title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style> <!-- table{ border-collapse:collapse; td,th{ padding:5px; border-style:solid; border-color:#0033ff; border-width:1px;.num{ text-align:right; 153

155 --> </style> </head> <body> <jsp:usebean id="cart" class="shopdata.cart" scope="session" /> <h3> お客様のかごの内容は以下のとおりです </h3> <table> <tr> <th> 商品番号 </th> <th> 商品名 </th> <th> 金額 </th> <th> 削除 </th> </tr> <c:set var="i" value="0" /> <c:foreach var="product" items="${cart.cartlist "> <form action="deletecart" method="post" > <tr> <td><c:out value="${product.id " /></td> <td><c:out value="${product.name " /></td> <td class="num"><c:out value="${product.price " /></td> <td><input type="submit" value=" 削除 " > <input type="hidden" name="i" value="<c:out value="${i" />" > </tr> </form> <c:set var="i" value="${i+1"/> </c:foreach> <tr> <td colspan="2" class="num"> 合計金額 </td> <td class="num"><c:out value="${cart.total " /></td> <td></td> </tr> </table> <a href="lineup"> 買い物を続ける </a> <a href="sessionout"> 清算する </a> </body> </html> i を受け取った削除用のサーブレットは 該当の情報を cartlist から削除して kago.jsp に引き 渡します 154

156 DeleteCart.java import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; import shopdata.cart; public class DeleteCart extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { int i = Integer.parseInt(request.getParameter("i")); // 削除する番号 HttpSession session = request.getsession(); // セッションから Cart cart = (Cart) session.getattribute("cart"); // 買い物かごを取り出す // 削除 cart.delete(i); // 合計金額を求める cart.calctotal(); session.setattribute("cart", cart); // セッションに載せる this.getservletcontext().getrequestdispatcher("/kago.jsp"). forward(request, response); 155

157 商品を複数個選ぶことができるようにするには 個数を 1 から 5 までリストボックスで選べるようにしてみましょう 右クリックしてソースを表示すると 以下のようになっています ( 以下はソースの一部 ) <form action="buy" method="post"> <tr> <td>a002</td> <td> ピサの斜塔 </td> <td class="num">300</td> <td><select name="kosu"> <option value=1 selected>1</option> <option value=2 >2</option> <option value=3 >3</option> <option value=4 >4</option> <option value=5 >5</option> </select> </td> <td> <input type="hidden" name="id" value="a002" > <input type="submit" value=" 買う "> </td> </tr> </form> 156

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

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

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

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

プレポスト【問題】

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

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

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

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある   インターネットアドレス Java 独習第 3 版 12.1 インターネットアドレス 12.2 サーバーソケットとソケット 2006 年 7 月 5 日 ( 水 ) 南慶典 12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある www.mycompany.com

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

PowerPoint Presentation

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

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

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

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

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

MySQL のインストール 2

MySQL のインストール   2 サーブレットとデータベースの結合 IS04 システム 組込み 1 MySQL のインストール http://dev.mysql.com/downloads/ 2 個人情報入力後 ダブルクリック 3 4 以前にインストールされているとき 5 パスワードを忘れないように ( 例 )1234 6 runnning 7 Java との接続 C:\Program Files\MySQL\Connector J

More information

第13回講義

第13回講義 オブジェクト指向概論 第 13 講 実装とサーバサイド Java 立命館大学 情報理工学部 黄宏軒 1 13.1 Java による実装 n フォワードエンジニアリング UML による表現をプログラミング言語による記述に変換 n リバースエンジニアリング UML User -name:string +getname():string プログラミング言語の情報を UML モデルに変換 UML User

More information

B2-Servlet-0112.PDF

B2-Servlet-0112.PDF B-2 Servlet/JSP Agenda J2EE Oracle8i J2EE Java Servlet JavaServer Pages PDA ( J2EE Java2 Enterprise Edition API API J2SE JSP Servlets RMI/IIOP EJB JNDI JTA JDBC JMS JavaMail JAF Java2 Standard Edition

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

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

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

... 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

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 12 回目クラス 今日の講義で学ぶ内容 クラスとは クラスの宣言と利用 クラスの応用 クラス クラスとは 異なる複数の型の変数を内部にもつ型です 直観的に表現すると int 型や double 型は 1 1 つの値を管理できます int 型の変数 配列型は 2 5 8 6 3 7 同じ型の複数の変数を管理できます 配列型の変数 ( 配列変数 ) クラスは double

More information

PowerPoint Presentation

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

More information

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

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

More information

プログラミング基礎I(再)

プログラミング基礎I(再) 山元進 クラスとは クラスの宣言 オブジェクトの作成 クラスのメンバー フィールド 変数 配列 メソッド メソッドとは メソッドの引数 戻り値 変数の型を拡張したもの 例えば車のデータベース 車のメーカー 車種 登録番号などのデータ データベースの操作 ( 新規データのボタンなど ) プログラムで使う部品の仕様書 そのクラスのオブジェクトを作ると初めて部品になる 継承 などの仕組みにより カスタマイズが安全

More information

サーブレット (Servlet) とは Web サーバ側で動作する Java プログラム 通常はapache 等のバックグラウンドで動作する Servletコンテナ上にアプリケーションを配置 代表的な Servlet コンテナ Apache Tomcat WebLogic WebSphere Gla

サーブレット (Servlet) とは Web サーバ側で動作する Java プログラム 通常はapache 等のバックグラウンドで動作する Servletコンテナ上にアプリケーションを配置 代表的な Servlet コンテナ Apache Tomcat WebLogic WebSphere Gla サーブレット 1 オブジェクト指向プログラミング特論 サーブレット (Servlet) とは Web サーバ側で動作する Java プログラム 通常はapache 等のバックグラウンドで動作する Servletコンテナ上にアプリケーションを配置 代表的な Servlet コンテナ Apache Tomcat WebLogic WebSphere GlassFish 2 オブジェクト指向プログラミング特論

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

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

メソッドのまとめ

メソッドのまとめ メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/ 授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか

More information

Javaの作成の前に

Javaの作成の前に メディアプロジェクト演習 1 参考資料 Javaとは JavaScript と Java 言語の違い オブジェクト指向 コンストラクタ サーブレット 本資料内のページ番号は, 以下の参考書のページを引用している 高橋麻奈 : やさしい Java, ソフトバンククリエイティブ (2,625 円 ) はじめに プログラミング言語とは? オブジェクト指向とは? Java 言語とは? JavaとJavaScriptの違いとは?

More information

GEC-Java

GEC-Java Copyright (C) Junko Shirogane, Waseda University 2019, All rights reserved. 1 プログラミング初級 (Java) 第 14 回継承 白銀純子 第 14 回の内容 継承 オーバーライド ポリモーフィズム Copyright (C) Junko Shirogane, Waseda University 2019, All rights

More information

メディプロ1 Javaプログラミング補足資料.ppt

メディプロ1 Javaプログラミング補足資料.ppt メディアプロジェクト演習 1 Javaプログラミング補足資料 l Javaとは l JavaScript と Java 言語の違い l オブジェクト指向 l コンストラクタ l 継承 抽象クラス 本資料内のページ番号は, 以下の参考書のページを引用している高橋麻奈 : やさしい Java, ソフトバンククリエイティブ (2,625 円 ) はじめに l プログラミング言語とは? l オブジェクト指向とは?

More information

Microsoft PowerPoint - web_and_dm08_servlet2.pptx

Microsoft PowerPoint - web_and_dm08_servlet2.pptx Webとデータモデリング Java によるサーバサイドプログラミング 北川博之, 森嶋厚行, 天笠俊之 1 Java Server Pages (JSP) の利用 2 Web とデータモデリング 1 サーブレットのコード例 public class HelloWorld extends HttpServlet { public void doget(httpservletrequest request,

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

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

Java言語 第1回

Java言語 第1回 Java 言語 第 2 回簡単な Java プログラムの作成と実行 知的情報システム工学科 久保川淳司 kubokawa@me.it-hiroshima.ac.jp 簡単な Java プログラム Java プログラムのファイル名 Java プログラムのファイル名命名ルール ファイル名とクラス名は同じでなければならない HelloJava.java public class HelloJava { public

More information

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt プログラミング言語 3 第 09 回 (2007 年 11 月 26 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/40 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 11 月 27 日分と書いてある部分が 本日の教材です

More information

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt プログラミング言語 3 第 09 回 (2007 年 11 月 26 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/40 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 11 月 27 日分と書いてある部分が 本日の教材です

More information

2016 年度 JAVA 講座第六週目 目次 パッケージ... 2 パッケージの作成... 2 パッケージの使用方法... 3 異なるパッケージ同名クラスの宣言... 4 パッケージの側面から見たアクセス修飾子... 4 ラッパークラス... 5 ラッパークラス利用法:キャスト... 5 ラッパーク

2016 年度 JAVA 講座第六週目 目次 パッケージ... 2 パッケージの作成... 2 パッケージの使用方法... 3 異なるパッケージ同名クラスの宣言... 4 パッケージの側面から見たアクセス修飾子... 4 ラッパークラス... 5 ラッパークラス利用法:キャスト... 5 ラッパーク 2016 年度 JAVA 講座第六週目 目次 パッケージ... 2 パッケージの作成... 2 パッケージの使用方法... 3 異なるパッケージ同名クラスの宣言... 4 パッケージの側面から見たアクセス修飾子... 4 ラッパークラス... 5 ラッパークラス利用法:キャスト... 5 ラッパークラス利用法:ArrayList... 5 例外:Exception... 6 ぬるぽ... 6 例外処理:try-catch-finaly...

More information

Microsoft Word - Android_SQLite講座_画面800×1280

Microsoft Word - Android_SQLite講座_画面800×1280 Page 24 11 SQLite の概要 Android にはリレーショナルデータベースである SQLite が標準で掲載されています リレーショナルデータベースは データを表の形で扱うことができるデータベースです リレーショナルデータベースには SQL と呼ばれる言語によって簡単にデータの操作や問い合わせができようになっています SQLite は クライアントサーバ形式ではなく端末の中で処理が完結します

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

Si 知識情報処理

Si 知識情報処理 242311 Si, 285301 MS 第 12 回 竹平真則 takemasa@auecc.aichi-edu.ac.jp 2015/12/21 1 本日の内容 1. 先週のおさらい 2. PHP のスクリプトを実際に動かしてみる 3. RDB についての説明 2015/12/21 2 資料の URL http://peacenet.info/m2is 2015/12/21 3 注意事項 ( その

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 基本 Java プログラミング演習 第 13 回 担当 : 植村 今後の予定 7/15 第 13 回 今回 7/22 第 14 回 小テスト ( クラス ) 7/29 第 15 回 総まとめテスト レポート提出 期末テストの時間割に Java のテストの欄がありますが無視してください 再テストはまた別途連絡いたします 2 CHAPTER 11 はじめてのクラス前回の復習 クラスクラスを構成する要素

More information

Javaプログラムの実行手順

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

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

Programming-C-9.key

Programming-C-9.key プログラミングC 第9回 例外 スレッド 白石路雄 2 finally try{ ( 例外が発生するかもしれない処理 ) catch(exception のクラス名 e){ ( 例外が発生した時の処理 ) finally{ ( 例外の発生の有無に関わらず 必ず行う処理 ) 3 Integer.parseInt() NumberFormatException

More information

... 1... 2... 2... 2... 4... 4... 5 HTML/JSP/Servlet... 7 JSP... 7 Servlet... 11 Struts... 15 Struts... 15 Struts... 16... 17... 25 FormBean LoginForm

... 1... 2... 2... 2... 4... 4... 5 HTML/JSP/Servlet... 7 JSP... 7 Servlet... 11 Struts... 15 Struts... 15 Struts... 16... 17... 25 FormBean LoginForm Oracle JDeveloper 10g Struts Creation Date: May 28, 2004 Last Update: Aug 19, 2004 Version 1.0.1 ... 1... 2... 2... 2... 4... 4... 5 HTML/JSP/Servlet... 7 JSP... 7 Servlet... 11 Struts... 15 Struts...

More information

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード] 第 3 回 Java 基本技術講義 クラス構造と生成 33 クラスの概念 前回の基本文法でも少し出てきたが, オブジェクト指向プログラミングは という概念をうまく活用した手法である. C 言語で言う関数に似ている オブジェクト指向プログラミングはこれら状態と振る舞いを持つオブジェクトの概念をソフトウェア開発の中に適用し 様々な機能を実現する クラス= = いろんなプログラムで使いまわせる 34 クラスの概念

More information

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

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

More information

Prog1_15th

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

More information

WebOTXマニュアル

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

More information

intra-mart WebPlatform/AppFramework

intra-mart WebPlatform/AppFramework intra-mart WebPlatform/AppFramework Ver.7.2 Struts 連携プログラミングガイド 2010/04/01 初版 変更年月日 2010/04/01 初版 > 変更内容 目次 > 1 はじめに...1 1.1 目的...1 2 アプリケーションの作成...2 2.1 Strutsからim-JavaEE Frameworkのイベントフレームワークへの連携...2

More information

forever朝活

forever朝活 forever 朝活 php 講座復習の巻 株式会社フォーエバー 目次 php の基本... 2 php とは?... 2 Web サーバーの代用品 xampp... 2 htdocs がドキュメントルート... 3 プログラムの基本... 4 変数の復習... 4 フォームデータを php で受け取る... 4 セッションでデータを渡す... 8 1 php の基本 今日は php の復習をしてみましょう

More information

Microsoft Word - PHP_SQLServer2012

Microsoft Word - PHP_SQLServer2012 PHP5.4+SQL Server 2012 1 表からデータを問い合わせる style.css table border-color:skyblue; border-style:solid; boder-widht:1px; width:300px;.hdrbackground-color:gainsboro 実行結果 1.1 ソース (Sample01.php)

More information

WebOTXマニュアル

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

More information

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

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

More information

(Microsoft PowerPoint - \223\306\217KJava\221\346\202R\224\305.ppt)

(Microsoft PowerPoint - \223\306\217KJava\221\346\202R\224\305.ppt) 独習 Java 第 3 版 12.1 インターネットアドレス 12.2 サーバーソケットとソケット 12.3 データグラムソケット とデータグラムパケット 12.4 URL インターネットアドレス インターネットアドレスとは? 32 ビットの長さを持ち インターネットに接続されたマシンの識別のために用いられる アドレスはピリオドで区切られた 4 つの番号からなる ピリオドで区切られたトークンの並びで表現されることもある

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅱ 10 回目への出力 ストリーム ストリームとは入力または出力の流れをもつデータの連鎖ですストリームは異なる機器からのデータを統一的に扱う考え方です 文字ストリーム 文字ベースの入出力をサポートします - Unicode(Java 内部 ) とローカルコード (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

デジタル表現論・第6回

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

More information

55 7 Java C Java TCP/IP TCP/IP TCP TCP_RO.java import java.net.*; import java.io.*; public class TCP_RO { public static void main(string[] a

55 7 Java C Java TCP/IP TCP/IP TCP TCP_RO.java import java.net.*; import java.io.*; public class TCP_RO { public static void main(string[] a 55 7 Java C Java TCP/IP TCP/IP 7.1 7.1.1 TCP TCP_RO.java import java.net.*; import java.io.*; public class TCP_RO { public static void main(string[] argv) { Socket readsocket = new Socket(argv[0], Integer.parseInt(argv[1]));

More information

SpringSecurity

SpringSecurity Spring Security 1/40 OUTLINE Spring Security Spring Securityを使った認証の仕組み Spring Securityを使った独自認証 認証エラーメッセージの変更 2/40 Spring Security 3/40 Spring Security とは アプリケーションのセキュリティを高めるためのフレームワーク 認証 認可機能 その他 多数のセキュリティ関連の機能を持つ

More information

Java知識テスト問題

Java知識テスト問題 Java 知識テスト SDAS プログラマ(Java 編 ) 運営事務局 このテストは J2EE プログラマとしての Java の知識を評価するものです 問題は 30 問, テスト時間は J2EE 知識テストとあわせて 90 分です 問題は全て択一式です 選択肢から 1 つだけ選択してください 資料の閲覧は禁止です テストが終わり次第 答案用紙を提出していただいてかまいません テスト終了後, 本テストの内容を他の方に話さないでください

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

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 情報システム基礎演習 B 2016/01/28 (Thurs.) テーマ 4 JavaScript による電卓 Web アプリを作成しましょう 健山智子 (t.tateyama.es@cc.it-hiroshima.ac.jp) 広島工業大学情報学部知的情報システム学科知的情報可視化戦略研究室 (ival) 講義のアウトライン 2 1. グループの決定 : 1. 5 人での 6 グループ ( ランダム

More information

プログラミングA

プログラミングA プログラミング A 第 10 回 演習 2015 年 6 月 29 日 東邦大学金岡晃 本日の内容 中間テストの解説 演習 1 2015/6/29 プログラミング A 中間テスト解説 : 問 1 < 問 1> 下記の命令が実行された後の a の値を書きなさい ( 省略 ). int a=13; 答え : 13 2 中間テスト解説 : 問 2 < 問 2> 下記の命令が実行された後の a の値を書きなさい

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

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション オブジェクト指向 プログラミング演習 第 4 回継承 オーバーライド ポリモルフィズム 今日のお題 継承 オーバーライド ポリモルフィズム 継承 (inherit) あるクラス c のサブクラス s を定義する : このとき s は c を継承していると言う 何かの下位概念を表すクラスは その上位概念を表すクラスの属性や機能を ( 基本的には ) 使える 継承の例 大学生 長崎県立大学の学生 大学生を継承する概念

More information

PowerPoint Presentation

PowerPoint Presentation ソフトウェア演習 B GUI を持つ Java プログラムの 設計と実装 4.1 例題 :GUI を持った電卓を作ろう プロジェクトCalculator パッケージ名 :example ソースファイル : Calculator.java GUI.java EventProcessor.java 2 4.2 GUI とイベント処理 GUI の構成 :Swing GUI の場合 フレーム JFrame:

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 6 回目 if 文と if else 文 今日の講義で学ぶ内容 関係演算子 if 文と if~else 文 if 文の入れ子 関係演算子 関係演算子 ==,!=, >, >=,

More information

2

2 プログラミング応用演習 b 10 月 5 日演習課題 2016/10/05 PAb 演習課題 プログラム仕様書作成課題 課題クラスを読み 次に示すクラスの仕様書を完成させよ なお 仕様書は クラス 1 つに付き 1 つ作成す る 加えて 図 1 のようなクラス継承の模式図を作成せよ < クラス名 のプログラム仕様書 > 作成者 : 学籍番号 名前 (1) クラスクラス名 : クラス名 説明 : クラスが何を表現しているか

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プログラミングⅠ

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

More information

Microsoft PowerPoint - chap10_OOP.ppt

Microsoft PowerPoint - chap10_OOP.ppt プログラミング講義 Chapter 10: オブジェクト指向プログラミング (Object-Oriented Programming=OOP) の入り口の入り口の入り口 秋山英三 F1027 1 例 : 部屋のデータを扱う // Test.java の内容 public class Test { public static void main(string[] args) { double length1,

More information

◎phpapi.indd

◎phpapi.indd PHP や HTML の知識がなくても大丈夫 PHP や HTML の基本も学べる FileMaker データベースを Web に公開したい FileMaker を使って動的な Web サイトを作りたい FileMaker しか知らない人が Web アプリケーションを作れるようになる! はじめに まず 本書を手に取ってくださりありがとうございます 本書はある程度 FileMaker Pro の扱いに慣れ

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

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション オブジェクト指向 プログラミング演習 第 2 回クラス インスタンス メソッド コンストラクタ 先週の出席確認 Webブラウザはどのようなプログラムでできているかこの問に答える前に Webブラウザとは 何か? 普段使ってますよね? Webブラウザを使ってできることと Webブラウザがやっていることを区別する必要がある 何をすれば Web ブラウザ と言えるのか NHK チコちゃんに叱られる! Web

More information

ネットワーク Ⅳ 32 ページ Servlet と JSP と Ajax 紹介 <body> <p > 商品名 :<input type="text" value="goodsa" id="nameid"></p> <p > 在庫数 :<i

ネットワーク Ⅳ 32 ページ Servlet と JSP と Ajax 紹介 <body> <p > 商品名 :<input type=text value=goodsa id=nameid></p> <p > 在庫数 :<i ネットワーク Ⅳ 31 ページ Servlet と JSP と Ajax 紹介 前の目標が終わっていない人はそちらを先行のこと 前回の 30 ページ検討問題 shouhinedit.html shouhinedit.jsp の解答例を示す これは XMLHttpRequest(HTTP 通信を行うための JavaScript 組み込みクラス ) による非同期通信を利用して 変更ボタンで指定商品名を変更する問題であった

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

<4D F736F F D A B C982E682E98F6F90C88A6D E646F63>

<4D F736F F D A B C982E682E98F6F90C88A6D E646F63> 2011 年度卒業論文 WEB アプリケーションによる出席確認システムの作成 文学部人間関係学科 4 年 学籍番号 08500027 山口久子 目次 1. はじめに 1 2. WEB アプリケーションとは 1 2.1 WEB アプリケーションの仕組みと構造 1 2.2 WEB アプリケーションの利点 2 3. サーバーサイドプログラムと Java アプリケーション 2 3.1 Applet 3 3.2

More information

スライド タイトルなし

スライド タイトルなし 御中 ドキュメント種 : お得意様名 : システム名 : デモ説明資料資料 EditionFlex DEMO 第一版平成 22 年 11 月第二版平成 22 年 12 月 11 日 15 日 Page - 1 1 DEMO1 Edition Flex エディター ( 編集画面 ) の呼出 DEMO1 では RESOLOGIC の Web サーバー上のデモメニューから まったく別のクラウド上にある Flex

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

演習室の 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

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

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

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

More information

Part1 159 a a

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

More information

ガイダンス

ガイダンス 情報科学 B 第 2 回変数 1 今日やること Java プログラムの書き方 変数とは何か? 2 Java プログラムの書き方 3 作業手順 Java 言語を用いてソースコードを記述する (Cpad エディタを使用 ) コンパイル (Cpad エディタを使用 ) 実行 (Cpad エディタを使用 ) エラーが出たらどうしたらよいか??? 4 書き方 これから作成する Hello.java 命令文 メソッドブロック

More information

Oracle JDeveloper 10g ADF Creation Date: Jul 07, 2004 Last Update: Jul 08, 2004 Version 1.0

Oracle JDeveloper 10g ADF Creation Date: Jul 07, 2004 Last Update: Jul 08, 2004 Version 1.0 Oracle JDeveloper 10g ADF Creation Date: Jul 07, 2004 Last Update: Jul 08, 2004 Version 1.0 ... 1... 2... 3... 5... 6... 6... 9... 9 Vector... 10 Struts... 12... 14 cart.jsp 1... 15 cart.jsp 2... 17 JSP...

More information

intra-mart Accel Platform — 招待機能プログラミングガイド   初版  

intra-mart Accel Platform — 招待機能プログラミングガイド   初版   Copyright 2016 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. はじめに 3. 権限リストを拡張する 2 改訂情報 変更年月日 変更内容 2016-04-01 初版 3 はじめに 項目 このガイドについて このガイドについて このガイドでは 招待機能の拡張方法および注意点について解説します 4 権限リストを拡張する 項目 この機能について実装済みの招待権限デコレータ実装方法設定方法

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅱ 11 回目スレッド課題 確認 問題次の各文は正しいか誤っているか答えなさい (1) スレッドは 1 つの実行箇所をもつ一連の処理の流れである (2) マルチスレッドで各スレッドの処理は並行して実行される (3) Java はマルチスレッド処理を記述できない (4) 新たにスレッドを生成する場合 Thread クラスを拡張し かつ Runnable インタフェースを実装する必要がある

More information

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなどを設定できます ソースファイル名 :Sample8_1.java // HP よりインポート文をここへ貼り付けてください

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

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

コンピュータ中級B ~Javaプログラミング~  第3回 コンピュータと情報をやりとりするには? Copyright (C) Junko Shirogane, Waseda University 2016, All rights reserved. 1 プログラミング初級 (Java) 第 4 回コンピュータと情報をやりとりするには? 白銀純子 Copyright (C) Junko Shirogane, Waseda University 2016, All rights reserved.

More information

WTM2019SingleSignOn

WTM2019SingleSignOn [Java 開発者向け ] シングルサインオンへの対応 - Java カスタマイズコードの書き方 1/45 OUTLINE Spring Security Spring Security を使った認証の仕組み Spring Security を使ったシングル サインオン 2/45 Spring Security 3/45 Spring Security とは アプリケーションのセキュリティを高めるためのフレームワーク

More information

Javaと マルチスレッド

Javaと マルチスレッド Javaとマルチスレッド 2016/7/30 湯川敦 目次 1. きっかけ 2. マルチスレッド対応が必要になる場面とは? 3. Javaのプロセスとスレッドについて 4. Javaのメモリ構成について 5. スレッドセーフについて 6. スレッド間競合における問題の回避策あれこれ 7. まとめ きっかけ 現場の新人 SE より Web アプリケーションサーバに関して 以下の質問を受けた ConcurrentModificationException

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

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - prog03.ppt プログラミング言語 3 第 03 回 (2007 年 10 月 08 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/33 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 10 月 08 日分と書いてある部分が 本日の教材です

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

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

コンピュータ中級B ~Javaプログラミング~  第3回 コンピュータと情報をやりとりするには? Copyright (C) Junko Shirogane, Waseda University 2016, All rights reserved. 1 プログラミング初級 (Java) 第 10 回オブジェクト指向って? 白銀純子 Copyright (C) Junko Shirogane, Waseda University 2016, All rights reserved. 2 第 10

More information