総合政策学部4年 伊藤玲子 総合政策学部4年 阿部雅美 +CreWな皆様

Slides:



Advertisements
Similar presentations
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Advertisements

ネットワークプログ ラミング論 平成27年 11 月 1 6日 森田 彦. 【基礎課題 6-1 】の解答 ① サーブレットを記述して保管するとコン パイルが自動的に行われる。 ② サーブレットの記述後、開発者がコンパ イル命令を実行しなければならない。 ③ プロジェクト名が Web アプリケーション.
Web アプリケーション開発入門 大岩研究会 今野隆平 2002 年 5 月 9 日 Introduction to Web Application Development.
Servlet にメッセージを送ろ う! 杉浦学・山下純一・北川敦規 今日の目標です サーブレットとブラウザのメッセージ 送受信 ブラウザでサーブレットにメッセージを送信で きる サーブレットでメッセージを受信できる 実習で実際にアプリを作れるようにな る.
Servlet 矢口 洋介 清水 麗雄. 準備  Java フォルダに入ってから mkdir Servlet ln – s ~/public_html/Servlet.  フォルダの移動 cd public_html/Servlet/WEB-INF/classes/*.  ファイルのコピー cp.
第11回Javaゼミ 11.1 ファイルとディレクト リ 11.2 文字ストリーム 11.3 バッファ付き文字スト リーム 2006/06/28 神津 健太.
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
社会人学習講座 「Javaプログラミング概論」
画像展示サイト“Fragments” 『閲覧しやすさ』と『デザイン性』を両立させた Webデザイン
JPAを利用した RESTful Webサービスの開発
IO - 入出力 小西 亨.
JSFによるWebアプリケーション開発 第11回
Servlet J2EE I 第8回 /
Servlet入門(2) 入力フォームをつかったWebアプリ
ネットワークプログラミング論 平成27年10月12日 森田 彦.
卒研:データベースチーム 第4回 JSP、サーブレット
Digital Network And Communication
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
第13回 プログラミングⅡ 第13回
JavaServlet&JSP入門 01K0018 中村太一.
卒研:データベースチーム 第4回 DOMを使った処理
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
HTTPプロトコルとJSP (1) データベース論 第3回.
JQueryでAjax 藤田@ジャストプレイヤー ※参考しまくり文献 jQuery日本語リファレンス.
HTTPプロトコル J2EE I 第7回 /
第20章 Flyweight ~同じものを共有して無駄をなくす~
Servlet入門(2) 入力フォームをつかったWebアプリ
ネットワークプログラミング論 平成28年10月17日 森田 彦.
ServletによるWebアプリ作成 入門
利用者を識別するWebアプリ を作ろう! 2004年6月10日 武田林太郎.
データベースとJavaをつなげよう! ~JDBC~
情報処理技法 (Javaプログラミング)2 第2回 前期の復習(2)
第13回 ハッシュテーブルを使ったプログラム ~高速に検索するには?~.
第8章 Web技術とセキュリティ   岡本 好未.
ネットワークプログラミング論 平成28年11月21日 森田 彦.
HTTPとHTML 技術領域専攻 3回 中川 晃.
データベースを使ったプログラミング ~JDBCを使ってみよう~
TomcatによるWebアプリケーション開発入門
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
サブゼミ第9回 実装編③ 永続化とjava.ioパッケージ.
プログラミング 2 ファイル処理.
例外処理 と ファイル入出力 情報システム学科 平塚 聖敏.
安全なモバイルエージェント システム Flyingware のための 仮想ディスクの実現
リファレンスの復習と例外処理 2005年6月14日 海谷 治彦.
暗号技術 ~JAVAプログラム③~ (7週目)
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
EclipseでWekaのAPIを呼び出す
ネットワークプログラミング論 平成28年11月7日 森田 彦.
Javaによる Webアプリケーション入門 第6回
暗号技術 ~JAVAプログラム①~ (5週目)
ネットワークプログラミング論 平成28年10月31日 森田 彦.
アルゴリズムとデータ構造演習(7月8日) 入出力ストリーム 2019/1/18.
Javaによる Webアプリケーション入門 第2回
情報スキル活用 第3週 基礎技術ー3 : 学部・学科紹介のページ作成.
Servlet ソフトウェア特論 第7回.
Servlet J2EE I (データベース論) 第12回 /
Servlet データベース論 第6回.
HP作成 そろそろまとめ編 担当:TAの人.
統計ソフトウエアRの基礎.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
Javaによる Webアプリケーション入門 第4回
暗号技術 ~JAVAプログラム②~ (6週目)
サブゼミ第7回 実装編① オブジェクト型とキャスト.
WebアプリケーションとTomcat ― これまでの復習とこれからの予習 ―
JSPの基本 J2EE I (データベース論) 第8回 /
データベース第3回目 意味ごとにテーブルを分ける
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

総合政策学部4年 伊藤玲子 総合政策学部4年 阿部雅美 +CreWな皆様 投稿を保存しよう! 総合政策学部4年 伊藤玲子 総合政策学部4年 阿部雅美 +CreWな皆様

今日の目標 WebApplicationにおいて、ファイルを用いたデータの保存ができるようになる 保存することの意味がわかるようになる ストリームの使い方がわかるようになる

前回までの復習 WEBアプリにとは何だ~!! ★人を幸せにするコンセプトをもっている★

「サブゼミ疑問解決掲示板」のコンセプトを思い出そう コンセプト: 授業外で生じた疑問をみんなで共有・解決し、 授業の理解を深めて、よりよいサブゼミにする。 概要: 授業外で生じた疑問を質問として掲示板に 投稿。投稿者の疑問を解決できると思う人が 回答を投稿する。 疑問を解決したい(投稿) 質問と回答をみんなで共有して理解を深めたい(閲覧) →先週作った掲示板はどんなだった…??

現行「サブゼミ疑問解決掲示板」の深刻な問題 自分が投稿した質問を自分で見るだけ 過去に投稿された質問を見ることができない 実は掲示板じゃなかった!!!

どうしよう? 質問をみんなが見れるようにしよう 投稿された質問を保存できるようにしよう 今回は「ファイル」に保存することで実現します 他にもやりかたはありますがそれはまた今度

2つのサーブレット 役割分担 質問を投稿する → ToukouServlet.java 質問の投稿を受け付ける 受け付けた質問をファイルに書き込む 感謝のメッセージのHTMLを出力する 質問を一覧表示する→IchiranServlet.java 質問をファイルから読み出す 質問一覧のHTMLを出力する 投稿サーブレット 書き込み ファイル 一覧サーブレット 読み込み

新・サブゼミ疑問解決掲示板の構成 GimonKaiketu-Web WEB-INF classes ToukouServlet.class 質問投稿サーブレット GimonKaiketu-Web 質問一覧サーブレット WEB-INF classes ToukouServlet.class IchiranServlet.class lib 質問保存ファイル text question.txt web.xml 投稿フォーム画面 html toukou.html index.html サブゼミ疑問解決掲示板トップページ

ファイルの保存編

何を保存しよう 疑問解決掲示板で保存したいものを考えてみよう! 質問 投稿した人の名前 日付 時間 番号 …etc

適切な名前を考えよう 例えば… 質問? 投稿者名 投稿日時 タイトル 質問 投稿者名 投稿日時 タイトル 内容

どのように記録する? サブゼミ疑問解決掲示板では 投稿者名 タイトル 投稿日時 内容 をそれぞれ1行ずつ 杉浦学┓  投稿者名 タイトル 投稿日時 内容 をそれぞれ1行ずつ 杉浦学┓ web.xmlの冒頭宣言┓ Wed May 23 17:30:24 JST 2002 ┓ Web.xmlの冒頭宣言はなんであんなに長いんで… ┓ タッチタイピング┓ Wed May 23 17:34:11 JST 2002 ┓ タッチタイピングができません!いったいどうし… ┓ O岩元┓ Re:タッチタイピング┓ Wed May 23 17:36:02 JST 2002 ┓ それは困りましたね… ┓

ファイル形式 ファイル形式とは? 「保存」の機能を作るには ファイル形式を自分たちで決める必要があります 何を保存するか どんな順番で保存するか etc 「保存」の機能を作るには ファイル形式を自分たちで決める必要があります

ファイル形式の例 Wordのファイル形式(.doc) Word形式でファイルを書き込み、 Word形式のとおりファイルを読み込むから

書き込み編

ToukouServlet.java:doPost() /** * doPost() メソッドは、POSTリクエストがブラウザー **/ * からプログラムに発信されたときに呼び出されるメソッド public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ * HTMLフォームからのメッセージを受け取る前に、 * メッセージのエンコーディングを指定して文字化けを防ぐ。 request.setCharacterEncoding("Shift_JIS"); //HTTPリクエストのパラメータからメッセージを取り出す String contributor = request.getParameter("contributor"); String title = request.getParameter("title"); String content = request.getParameter("content"); //投稿された時刻を取得する String date = (new java.util.Date()).toString(); //*****受け取ったメッセージをファイルに保存する***** //改行を正しい形に変換する //(改行コードが含まれると、書き込んだ際、1行に収まらなくなってしまう) contributor = convertReturnCode(contributor); content = convertReturnCode(content); title = convertReturnCode(title); //ファイルに書き込むためのストリームを作成する BufferedWriter writer = new BufferedWriter( new FileWriter(recipeFilePath, true) ); //このtrueはファイルへの追記を意味する //受け取ったメッセージを、contributor, title, date, content の順で書き込む writer.write(contributor); writer.newLine(); writer.write(title); writer.write(date); writer.write(content); //ストリームを閉じる writer.close(); //***** 感謝のメッセージのHTMLを出力する ***** //HTML出力の準備をする PrintWriter out = response.getWriter(); //HTMLの出力に必要なPrintWriterを作成する out.println("<html>"); //感謝のHTMLを出力する out.println("<head><title>投稿ありがとうございました!</title></head>"); out.println("<body bgcolor='#33CCFF' text='#000000'>"); out.println("<font size='big'><b>投稿ありがとうございました!"); out.println("[ <a href=\"IchiranServlet\">サブゼミ疑問だらけコーナーへ</a> ]"); out.println("<br>また何かわからないことがあったら投稿してね。</b></font><br><br>"); out.println("</body>"); out.println("</html>"); //HTML出力のあとかたづけをする out.close(); } ←質問の投稿を受け付ける ←受け付けた質問をファイルに書き込む ←感謝のメッセージのHTMLを出力する

質問の投稿を受け付ける //***** 質問の投稿を受け付ける ***** //HTTPリクエストのパラメータから、質問を構成する情報を取り出す String contributor = request.getParameter("contributor"); //投稿者 String title = request.getParameter("title"); //タイトル String content = request.getParameter(“content”); //質問内容 //投稿された時刻を取得する String date = (new java.util.Date()).toString();

受け付けた質問を ファイルに書き込む 今日のポイント //***** 受け付けた質問をファイルに書き込む ***** //改行を正しい形に変換する //(改行コードが含まれると、書き込んだ際、1行に収まらなくなってしまう) contributor = convertReturnCode(contributor); title = convertReturnCode(title); content = convertReturnCode(content); //ファイルに書き込むためのストリームを作成する BufferedWriter writer = new BufferedWriter( new FileWriter(recipeFilePath, true) ); //このtrueはファイルへの追記を意味する //質問を、contributor, title, date, content の順で書き込む writer.write(contributor); writer.newLine(); writer.write(title); writer.write(date); writer.write(content); //ストリームを閉じる writer.close(); 今日のポイント

ストリームのお話1 入出力先にはいろいろある 入出力データもいろいろある これらを扱うのに, いちいち場合分けしていたら大変! (キーボード,ネットワーク,ディスプレイ…) 入出力データもいろいろある (バイト列,文字列,オブジェクト…) これらを扱うのに, いちいち場合分けしていたら大変!

ストリームのお話2 例えば… 入出力先にはいろいろなものがあるので これらをまとめて全部入出力先として扱えると便利 入出力先! ・  入出力先! キーボード ファイル ディスプレイ ネットワーク ・

ストリームのお話3 ストリームはさまざまな入出力を抽象化して 「データの流れ」として扱い,簡単にデータへのアクセスができるようにしたもの  「データの流れ」として扱い,簡単にデータへのアクセスができるようにしたもの 入力 出力 ファイル ファイル < H T M L > < H T M L > ストリーム! プログラム G E T t o u ネットワーク ネットワーク G E T t o u エ ラ ー が 起 こ り こ ん に ち は 。 \n ディスプレイ キーボード ・ ・

ストリームの特徴 ストリームとはデータの流れである 例えば… (疑問解決掲示板の例) 先頭から順番に送られて、順番に受け取る データの意味は認識してない 順番だけで構造はない 例えば… (疑問解決掲示板の例) 疑問解決 掲示板 サーブレット 質問ファイル ん な は 言 宣 頭 冒

ストリームの種類 文字列(アスキー) 文字列以外(バイナリ) 質問ファイル 疑問解決 掲示板 サーブレット ん な は 言 宣 頭 冒 ペイントソフト 画像ファイル 0xEF 0xC2 0x4B 0x24 0x8C 0xD3 0x33

ここで使うストリーム 今回は、 文字列を、 ファイルに 保存しよう。 使うもの import java.io.*; 今回は、 文字列を、 ファイルに 保存しよう。 使うもの import java.io.*;  文字列をファイルに保存する FileReader, FileWriter バッファリング機能を付加する BufferedReader, BufferedWriter

おまけ的解説 //ファイルに書き込むためのストリームを作成する FileWriter fileWriter = new FileWriter(recipeFilePath, true); BufferedWriter writer = new BufferedWriter(fileWriter); FileWriterだけで保存することはできますが、 それだけだと効率が悪いのでBufferedWriterも一緒に使ってあげましょう (詳しくはjava api ドキュメントのBufferedWriterクラスのところ参照) (さらに詳しくは中鉢さんをつかまえよう!)

受け付けた質問をファイルに書き込む 文字列を書き込む 改行文字を書き込む 閉じるの忘れずに! //***** 受け付けた質問をファイルに書き込む ***** //改行を正しい形に変換する //(改行コードが含まれると、書き込んだ際、1行に収まらなくなってしまう) contributor = convertReturnCode(contributor); title = convertReturnCode(title); content = convertReturnCode(content); //ファイルに書き込むためのストリームを作成する BufferedWriter writer = new BufferedWriter( new FileWriter(questionFilePath, true) ); //このtrueはファイルへの追記を意味する //レシピを、contributor, title, date, content の順で書き込む writer.write(contributor); writer.newLine(); writer.write(title); writer.write(date); writer.write(content); //ストリームを閉じる writer.close(); 文字列を書き込む 改行文字を書き込む 閉じるの忘れずに!

読み込み編

IchiranServlet.java: doGet() public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { //HTML出力の準備をする request.setCharacterEncoding("Shift_JIS");//エンコーディングをして文字化けを防ぐ PrintWriter out = response.getWriter(); //HTMLを出力するためのPrintWriterを作成する //ページの頭部分のHTMLを出力する out.println("<html>"); out.println("<head><title>サブゼミ疑問だらけコーナー</title></head>"); out.println("<body bgcolor=\"#33CCFF\" text=\"#000000\">"); out.println("<center><font size=5><b>疑問だらけコーナー</b></font></center>"); out.println("<hr>"); //疑問だらけ一覧のHTMLを出力する BufferedReader reader = new BufferedReader(new FileReader(recipeFilePath)); //ファイルを読み込むストリームを作成する while(true) { //contributor, title, date, content の順で読み込む String contributor = reader.readLine(); if( contributor == null ) { //読み込めなかったらファイルの終わりなので、無限ループをぬける break; } String title = reader.readLine(); String date = reader.readLine(); String content = reader.readLine(); //疑問のHTMLを出力する out.println("<p><b><font size=4>"+contributor+"さんの疑問</font></b></p>"); out.println("<p><font size=5>「"+title+"」</font></p>"); out.println("(投稿時刻:"+ date + ")<br>"); out.println("<p>" + content + "</p>"); reader.close(); //ストリームを閉じる //ページの尻尾部分のHTMLを出力する out.println("</body>"); out.println("</html>"); //HTML出力のあとかたづけをする out.close(); ←拡大

IchiranServlet.java: doGet() //疑問だらけ一覧のHTMLを出力する BufferedReader reader = new BufferedReader(new FileReader(recipeFilePath)); //ファイルを読み込むストリームを作成する while(true) { //contributor, title, date, content の順で読み込む String contributor = reader.readLine(); if( contributor == null ) { //読み込めなかったらファイルの終わりなので、無限ループをぬける break; } String title = reader.readLine(); String date = reader.readLine(); String content = reader.readLine(); //疑問のHTMLを出力する out.println("<p><b><font size=4>"+contributor+"さんの疑問</font></b></p>"); out.println("<p><font size=5>「"+title+"」</font></p>"); out.println("(投稿時刻:"+ date + ")<br>"); out.println("<p>" + content + "</p>"); out.println("<hr>"); reader.close(); //ストリームを閉じる ストリームの作成 読み込み 出力 ストリームを閉じる

ファイル形式を確認 書き込み時 読み込み時 //質問を、contributor, title, date, content の順で書き込む writer.write(contributor); writer.newLine(); writer.write(title); writer.write(date); writer.write(content); 読み込み時 while(true) { //contributor, title, date, content の順で読み込む String contributor = reader.readLine(); if( contributor == null ) { //読み込めなかったらファイルの終わりなので、無限ループをぬける break; } String title = reader.readLine(); String date = reader.readLine(); String content = reader.readLine();

Presented by CreW

サンプルプログラムの中身 index.html toukou.html ToukouServlet.java インデックス(案内とリンク) toukou.html 投稿フォーム画面 ToukouServlet.java 質問投稿サーブレット IchiranServlet.java 質問一覧サーブレット question.txt 質問保存ファイル