applicationスコープを使って、製品を登録してみよう。
実行例
実行すると以下のようにフォームが表示される。
製品名と価格を入力し、登録ボタンを押す
以下のように製品が登録される
もし、製品名、価格の両方、またはどちらかが未記入だと
「未記入の項目があります!」
と出力される。
続けてデータを入力していこう。その際、以下のように新しいデータはリストの上に表示される。
作例
1.新規動的Webプロジェクトからproductという名前でプロジェクトを作成する。
2.新規クラスからmodel.Productを以下のように作成する。
package model;
import java.io.Serializable;
public class Product implements Serializable{
private String name;
private String price;
private String dateTime;
public Product() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getDateTime() {
return dateTime;
}
public void setDateTime(String dateTime) {
this.dateTime = dateTime;
}
}
modelパッケージ内に、以下のようにRegisterProcuctLogicクラスを作成する。
package model;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class RegisterProductLogic {
public void execute(Product p,List<Product> list) {
Date today = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String dateTime = sdf.format(today);
p.setDateTime(dateTime);
list.add(0,p);
}
}
3.新規サーブレットcontroller.Main.javaを以下のように作成する
package controller;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.Product;
import model.RegisterProductLogic;
@WebServlet("/Main")
public class Main extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext application = this.getServletContext();
List<Product> list = (List<Product>) application.getAttribute("list");
if (list == null) {
list = new ArrayList<>();
application.setAttribute("list", list);
}
RequestDispatcher rd = request.getRequestDispatcher("WEB-INF/view/main.jsp");
rd.forward(request, response);
}
}
4.WEB-INFの中にviewフォルダを作成し、その中にmain.jspを以下のように作成する。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="model.*,java.util.*" %>
<%
List<Product> list =(List<Product>)application.getAttribute("list");
String msg = (String)request.getAttribute("msg");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% if(msg != null){ %>
<p><%=msg %></p>
<%} %>
<form action="Main" method="post">
製品名:<input type="text" name="name"><br>
価格:<input type="number" name="price"><br>
<input type="submit" value="登録">
</form>
<% if(list.size()>0){ %>
<table border="1">
<tr><th>製品名</th><th>価格</th><th>登録日</th></tr>
<% for (Product p :list){ %>
<tr>
<td><%=p.getName() %></td>
<td><%=p.getPrice() %>円</td>
<td><%=p.getDateTime() %></td>
</tr>
<%} %>
</table>
<%} %>
</body>
</html>
5.さきほど作成したサーブレットMain.javaに以下のようにdoPostメソッド部分をt追記する。
package controller;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.Product;
import model.RegisterProductLogic;
@WebServlet("/Main")
public class Main extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext application = this.getServletContext();
List<Product> list = (List<Product>) application.getAttribute("list");
if (list == null) {
list = new ArrayList<>();
application.setAttribute("list", list);
}
RequestDispatcher rd = request.getRequestDispatcher("WEB-INF/view/main.jsp");
rd.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String price = request.getParameter("price");
String msg;
if ((name != null && name.length() > 0) &&
(price != null && price.length() > 0)) {
msg = "1件登録しました";
Product p = new Product();
p.setName(name);
p.setPrice(price);
ServletContext application = this.getServletContext();
List<Product> list = (List<Product>) application.getAttribute("list");
RegisterProductLogic logic = new RegisterProductLogic();
logic.execute(p, list);
application.setAttribute("list", list);
} else {
msg = "未記入の項目があります!";
}
request.setAttribute("msg", msg);
RequestDispatcher rd = request.getRequestDispatcher("WEB-INF/view/main.jsp");
rd.forward(request, response);
}
}
コメント