読者です 読者をやめる 読者になる 読者になる

新人SEの学習記録

14年度入社SEの学習記録用に始めたブログです。気づけば社会人3年目に突入。

学習記録(6/16〜6/18)

学習記録

6/16

JSPサーブレット
  • 簡易アンケート
  • アンケートフォーム(quest.html)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>アンケート</title>
</head>
<body>
■アンケートにお答え下さい。
<br><br>
<form action="CheckQuestion" method="POST">
この本の購入日は?<br>
<input type="text" name="pdate" value="2014/04/01">
<br><br>
一ヶ月当たりの書籍の平均購入額は?<br>
<input type="text" name="pprice" value="5000"><br><br>
本書の評価は?<br>
<input type="radio" name="star" value="5">5:とても良い
<input type="radio" name="star" value="4">4:良い
<input type="radio" name="star" value="3">3:普通
<input type="radio" name="star" value="2">2:悪い
<input type="radio" name="star" value="1">1:とても悪い
<br><br>
興味のある言語は?<br>
<input type="checkbox" name="lang" value="PHP">PHP
<input type="checkbox" name="lang" value="Perl">Perl
<input type="checkbox" name="lang" value="Ruby">Ruby
<input type="checkbox" name="lang" value="Java">Java
<input type="checkbox" name="lang" value="C#">C#
<br><br>
あなたの職種は?<br>
<select name="job">
<option value="プログラマ">プログラマ
<option value="デザイナ">デザイナ
<option value="研究職">研究職
<option value="学生">学生
<option value="その他">その他
</select>
<br><br>
<input type="submit" value="アンケートを確認">
</form>

</body>
</html>
  • アンケートのチェック(CheckQuestion.java)
    • アンケート各項目の妥当性チェック
    • 入力内容の表示
    • 送信ボタン
package jp.kagen.simplequest;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class CheckQuestion
 */
@WebServlet("/CheckQuestion")
public class CheckQuestion extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public CheckQuestion() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");

		String purchaseDate = request.getParameter("pdate");
		String purchasePrice = request.getParameter("pprice");
		String star = request.getParameter("star");
		String[] langs = request.getParameterValues("lang");
		String job = request.getParameter("job");

		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();

		out.println("<html><body>");
		out.println("■アンケート内容を確認してください。<br>");
		out.println("購入日: " + purchaseDate);
		if (!checkDate(purchaseDate)) {
			out.println("(日付に誤りがあります。)");
			purchaseDate = "";
		}
		out.println("<br><br>");
		out.println("平均購入額: " + purchasePrice);
		if (!checkNumber(purchasePrice)) {
			out.println("(整数ではありません。)");
			purchasePrice = "";
		}
		out.println("<br><br>");
		out.println("評価: " + star);
		out.println("<br><br>");
		out.println("興味のある言語 :<br>");
		if (langs != null && langs.length != 0) {
			for (String lang : langs) {
				out.println(lang);
			}
		}
		out.println("<br><br>");
		out.println("職種: " + job);
		out.println("<br><br>");

		// 保存画面へのデータ送信フォーム
		out.println("<form action=\"WriteQuestion\" method=\"POST\">");
		out.println("<input type=\"hidden\" name=\"pdate\" value=\""
				+ purchaseDate + "\">");
		out.println("<input type=\"hidden\" name=\"pprice\" value=\""
				+ purchasePrice + "\">");
		out.println("<input type=\"hidden\" name=\"star\" value=\"" + star
				+ "\">");

		if (langs != null && langs.length != 0) {
			for (String lang : langs) {
				out.println("<input type=\"hidden\" name=\"lang\" value=\""
						+ lang + "\">");
			}
		}
		out.println("<input type=\"hidden\" name=\"job\" value=\"" + job
				+ "\">");
		out.println("<input type=\"submit\" value=\"アンケートを送信\">");
		out.println("</form>");
		out.println("</body></html>");
	}

	private boolean checkNumber(String str) {
		try {
			Integer.parseInt(str);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	private boolean checkDate(String str) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
		// 日付のフォーマットに加え、日付の妥当性(存在する日付か)までチェックする
		sdf.setLenient(false);

		try {
			sdf.parse(str);
			return true;
		} catch (Exception e) {
			return false;
		}
	}
}
  • アンケート結果出力(WriteQuestion.java)
    • 結果をcsvファイルに書き込んで保存
package jp.kagen.simplequest;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class CheckQuestion
 */
@WebServlet("/CheckQuestion")
public class CheckQuestion extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public CheckQuestion() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");

		String purchaseDate = request.getParameter("pdate");
		String purchasePrice = request.getParameter("pprice");
		String star = request.getParameter("star");
		String[] langs = request.getParameterValues("lang");
		String job = request.getParameter("job");

		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();

		out.println("<html><body>");
		out.println("■アンケート内容を確認してください。<br>");
		out.println("購入日: " + purchaseDate);
		if (!checkDate(purchaseDate)) {
			out.println("(日付に誤りがあります。)");
			purchaseDate = "";
		}
		out.println("<br><br>");
		out.println("平均購入額: " + purchasePrice);
		if (!checkNumber(purchasePrice)) {
			out.println("(整数ではありません。)");
			purchasePrice = "";
		}
		out.println("<br><br>");
		out.println("評価: " + star);
		out.println("<br><br>");
		out.println("興味のある言語 :<br>");
		if (langs != null && langs.length != 0) {
			for (String lang : langs) {
				out.println(lang);
			}
		}
		out.println("<br><br>");
		out.println("職種: " + job);
		out.println("<br><br>");

		// 保存画面へのデータ送信フォーム
		out.println("<form action=\"WriteQuestion\" method=\"POST\">");
		out.println("<input type=\"hidden\" name=\"pdate\" value=\""
				+ purchaseDate + "\">");
		out.println("<input type=\"hidden\" name=\"pprice\" value=\""
				+ purchasePrice + "\">");
		out.println("<input type=\"hidden\" name=\"star\" value=\"" + star
				+ "\">");

		if (langs != null && langs.length != 0) {
			for (String lang : langs) {
				out.println("<input type=\"hidden\" name=\"lang\" value=\""
						+ lang + "\">");
			}
		}
		out.println("<input type=\"hidden\" name=\"job\" value=\"" + job
				+ "\">");
		out.println("<input type=\"submit\" value=\"アンケートを送信\">");
		out.println("</form>");
		out.println("</body></html>");
	}

	private boolean checkNumber(String str) {
		try {
			Integer.parseInt(str);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	private boolean checkDate(String str) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
		// 日付のフォーマットに加え、日付の妥当性(存在する日付か)までチェックする
		sdf.setLenient(false);

		try {
			sdf.parse(str);
			return true;
		} catch (Exception e) {
			return false;
		}
	}
}
6/17
  • 体調不良のため休み
6/18
  • 回復してきたので学習再開
  • CodeIQで色々やってみた
    • 素数を数える(java)
    • フィギュアを最高額で売る組み合わせの探索(Ruby)
    • grepを作る(java8)
    • 肩車できる最高人数(java)
    • [7]の数を数える(java)
    • 言語指定のないものはjavaでやってみた
  • 成果
    • java8のstream・ラムダ式超便利。
    • Rubyを少し齧れた。{}のブロックがない言語は思っていた以上に書きにくい。
    • アルゴリズム考えるの楽しい。
List<Point> result = new ArrayList<Point>();
result.add(new Point(1, -1));
result.add(new Point(2, -2));
result.add(new Point(3, -3));

// Iterableインタフェースに追加されたforEachメソッド
// 1,-1
// 2,-2
// 3,-3
result.forEach(p -> System.out.println(p.x + "," + p.y));

// 値をそのまま別のメソッドに渡すだけなら、メソッド参照が使える
// java.awt.Point[x=1,y=-1]
// java.awt.Point[x=2,y=-2]
// java.awt.Point[x=3,y=-3]
result.forEach(System.out::println);

// streamにする(普通はここからさらにメソッドを呼ぶ)
result.stream();

// 例えば、フィルタを掛ける(xが2以上のもののみを表示)
// java.awt.Point[x=2,y=-2]
// java.awt.Point[x=3,y=-3]
result.stream().filter(p -> p.x >= 2).forEach(System.out::println);