61-1.Eclipseで動的Webシステム開発(販売管理)

61-1.Eclipseで動的Webシステム開発(販売管理

商品を一覧から選択してショッピングカートに保存する販売管理WebアプリをMVCモデルで作成します。

このWebアプリは商品一覧と詳細を表示するサーブレット(/Shopping)と、商品をショッピングカートに入れて合計の計算と注文処理を行うサーブレット(/Item)の2つのサーブレットから構成されリクエストパラメータで商品番号や商品区分が渡されます。

ドキュメントルート(プロジェクト名)はyamateOwlとしサーブレットクラス(urlパターン)はShoppingItemとなります。

ShoppingShoppingBeanControlServlet:商品一覧から商品を選択して商品詳細を表示する処理のコントロール
ItemShoppingItmControlServlet:ショッピングカートへ商品追加、清算処理、顧客情報の入力と発注を確定する処理のコントロール

※全体で2個のServlet9個のBean13個のJSP1個のhtmlとcssファイルを実装します
※プログラムは大きく「商品」「ショッピングカート」「顧客」「発注」の4つに分かれます

すべてのプログラムは作成済みですので、CentOSサーバにデプロイしてください。
※ドキュメントルートはyamateOwl」となります


まずはデータベースの設計と実装から始めます!

0.データベースの設計

mrpデータベースの販売管理ERDモデル


1.データベースの構築

【PostgreSQL】
①販売管理のDBに接続
接続するDB名を「mrp」に変えてCSEから接続します。


②販売管理用データモデルの作成
CSEから以下のSQL文を流しこみます。コピペが効率的ですが不正な文字が入っている場合があります。
十分注意してください。

CSEで一気に実行するとエラーが発生します。なぜなのか考えてください....?
本当に大丈夫ですか?

テーブル作成とデータ入力は別々に行った方が安心です。

(SQL文流し込み)
drop table T_CUSTOMER;
create table T_CUSTOMER (
 CustomerNumber int,  
 CustomerName varchar(30),
 CustomerFurigana varchar(30),
 CustomerAddress  varchar(30),
 CustomerTel varchar(30), 
 CustomerMail varchar(30),
 CustomerPass varchar(30), 
primary key(CustomerNumber));
drop table T_ITEM_CATEGORY;
create table T_ITEM_CATEGORY(
 ItemCategoryNumber int,
 ItemCategoryName varchar(30), 
primary key(ItemCategoryNumber)); 
drop table T_ITEM_MASTER;
create table T_ITEM_MASTER (
 ItemRightOrWrong int,
 ItemCode varchar(30), 
 ItemName varchar(30),
 ItemPrice int,  
 ItemCategoryNumber int, 
 ItemExplain varchar(300), 
primary key(ItemCode));
drop table T_ORDER;
create table T_ORDER (
 OrderNumber int,
 CustomerNumber int,
 OrderDay varchar(30),
 Payment int,
 MailSend int,
primary key(OrderNumber));
drop table T_ORDER_DETAILS;
create table T_ORDER_DETAILS (
 OrderNumber int, 
 ItemCode varchar(30), 
 Amount int,
primary key(OrderNumber,ItemCode)); 
drop table T_STOCK;
create table T_STOCK (
 ItemCode varchar(30), 
 StockAmount int,  
 StockArea varchar(30),
primary key(ItemCode));

delete from T_CUSTOMER; 
insert into T_CUSTOMER values(
10010,'山手一郎','やまていちろう','横浜市中区根岸旭台','045-222-3121','ichiro@gmail.com','ichiro');
delete from T_ITEM_CATEGORY;
insert into T_ITEM_CATEGORY values(
1,'印鑑');
insert into T_ITEM_CATEGORY values(
2,'工芸品');
insert into T_ITEM_CATEGORY values(
3,'腕時計');
delete from T_ITEM_MASTER;
insert into T_ITEM_MASTER values(
1,'010r_kurosui_mini','天然黒水牛 丸型',100,1,'直径12mm丸型(認印に最適-画像の著作権はHanko.comに属します)');
insert into T_ITEM_MASTER values(
1,'010r_kurosuikaku_mini','天然黒水牛 角型',300,1,'直径21mm角型(会社印に最適-画像の著作権はHanko.comに属します)');
insert into T_ITEM_MASTER values(
1,'010r_kurosuiten_mini','天然黒水牛 丸型大',500,1,'直径15mm丸型(個人実印に最適-画像の著作権はHanko.comに属します)');
insert into T_ITEM_MASTER values(
1,'010r_tuge_mini','薩摩本柘 丸型',1000,1,'直径12mm丸型(認印に最適-画像の著作権はHanko.comに属します)');
insert into T_ITEM_MASTER values(
1,'010r_tugekaku_mini','薩摩本柘 角型',3000,1,'直径21mm角型(会社印に最適-画像の著作権はHanko.comに属します)');
insert into T_ITEM_MASTER values(
1,'010r_tugeten_mini','薩摩本柘 丸型大',5000,1,'直径15mm丸型(個人実印に最適-画像の著作権はHanko.comに属します)');
insert into T_ITEM_MASTER values(
1,'010r_zouge_mini','最高級本象牙 丸型',10000,1,'直径18mm丸型(銀行印に最適-画像の著作権はHanko.comに属します)');
insert into T_ITEM_MASTER values(
1,'010r_zougeten_mini','最高級本象牙 丸型大',50000,1,'直径15mm丸型(個人実印に最適-画像の著作権はHanko.comに属します)');
insert into T_ITEM_MASTER values(
1,'01anakin','アナキン・スカイウォーカー',1980,3,'StarWarsEpisodeII テクノス TECHNOS クロノグラフ メンズ 腕時計 T2-S ホワイト(画像の著作権はテクノス販売ギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'020-a3s','ステッキ傘の柄  C型',400,2,'長さ100mmC型(保管に便利)(画像の著作権はジャパン・インター・メディアギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'020-bamboo','ステッキ傘の柄 U型',500,2,'長さ200mm曲線型(持ち運びに便利)(画像の著作権はジャパン・インター・メディアギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'020-handle-m','ステッキ傘の柄大型',300,2,'長さ50mm丸型(手にフィット)(画像の著作権はジャパン・インター・メディアギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'020-made10s','ステッキ傘の柄中型',200,2,'長さ40mm丸型(普通サイズ)(画像の著作権はジャパン・インター・メディアギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'020-nvbr01m','折りたたみ傘の柄小型',100,2,'長さ30mm丸型(携帯に便利)(画像の著作権はジャパン・インター・メディアギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'02obiwan','オビ・ワン・ケノービ',1980,3,'StarWarsEpisodeII テクノス TECHNOS クロノグラフ メンズ 腕時計 T3-B ブラック(画像の著作権はジャパン・インター・メディアテクノス販売ギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'03ami_1','パドメ・アミダラ',2980,3,'StarWarsEpisodeII テクノス TECHNOS クロノグラフ メンズ 腕時計 T3-G ゴールド(画像の著作権はジャパン・インター・メディアテクノス販売ギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'05mace','メイス・ウィンドゥ',9800,3,'StarWarsEpisodeII テクノス TECHNOS 腕時計 メンズ クロノグラフ TGM615SB(画像の著作権はジャパン・インター・メディアテクノス販売ギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'06yoda','ヨーダ',9800,3,'StarWarsEpisodeII TECHNOS/テクノス 薄型&軽量&オールチタン腕時計メンズ T1079IB(画像の著作権はジャパン・インター・メディアテクノス販売ギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'12c3po','C-3PO',9800,3,'StarWarsEpisodeII TECHNOS/テクノス 薄型&軽量&オールチタン腕時計メンズ T1079IW(画像の著作権はジャパン・インター・メディアテクノス販売ギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'13r2d2','R2-D2',9800,3,'StarWarsEpisodeII TECHNOS/テクノス 薄型&軽量&オールチタン腕時計メンズ T1079IS(画像の著作権はジャパン・インター・メディアテクノス販売ギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'16jango','ジャンゴ・フェット',4980,3,'StarWarsEpisodeII テクノス TECHNOS 腕時計 メンズゴールド T2046GB(画像の著作権はジャパン・インター・メディアテクノス販売ギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'28clone','クローン・トルーパー',4980,3,'StarWarsEpisodeII 正規品 TECHNOS テクノス メンズ マルチファンクション 腕時計 T2046TB(画像の著作権はジャパン・インター・メディアテクノス販売ギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'32jjb','ジャー・ジャー・ビンクス',14800,3,'StarWarsEpisodeII TECHNOS テクノス メンズ セラミック クロノグラフ 腕時計 T3032TW テクノス 腕時計(画像の著作権はジャパン・インター・メディアテクノス販売ギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'36ana-h','アナキン・スカイウォーカー(ヘッドタイプ)',5980,3,'StarWarsEpisodeII TECHNOS/テクノス クロノグラフ&10気圧防水TBM634SB(画像の著作権はジャパン・インター・メディアテクノス販売ギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'37obi-h','オビ・ワン・ケノービ(ヘッドタイプ)',7980,3,'StarWarsEpisodeII TECHNOS/テクノス ブラッククロノグラフ&10気圧防水TBM634SW(画像の著作権はジャパン・インター・メディアテクノス販売ギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'43c3-h','C-3PO(ヘッドタイプ)',11100,3,'StarWarsEpisodeII テクノスTECHNOS 腕時計 メンズ 10気圧ダイバー TAM629SB(画像の著作権はジャパン・インター・メディアテクノス販売ギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'46jango-h','ジャンゴ・フェット(ヘッドタイプ)',13280,3,'StarWarsEpisodeII TECHNOS/テクノス ゴールドクロノグラフ&10気圧防水TAM629TN(画像の著作権はジャパン・インター・メディアテクノス販売ギフト百貨に属します)');
insert into T_ITEM_MASTER values(
1,'51clone-h','クローン・トルーパー(ヘッドタイプ)',12800,3,'StarWarsEpisodeII TECHNOS/テクノス クロノグラフ&10気圧防水TBM634SB(画像の著作権はジャパン・インター・メディアテクノス販売ギフト百貨に属します)');
delete from T_ORDER;
insert into T_ORDER values(
1,10013,'2002-05-01',2,0);
insert into T_ORDER values(
2,10013,'2002-06-01',3,0);
insert into T_ORDER values(
3,10013,'2002-06-01',2,0);
insert into T_ORDER values(
4,10013,'2002-06-01',3,0);
insert into T_ORDER values(
5,10013,'2002-06-01',3,0);
insert into T_ORDER values(
6,10013,'2002-06-03',1,0);
insert into T_ORDER values(
7,10020,'2002-07-12',1,0);
insert into T_ORDER values(
8,10020,'2002-07-12',2,0);
insert into T_ORDER values(
9,10013,'2002-07-13',1,0);
insert into T_ORDER values(
10,10020,'2002-07-13',3,0);
insert into T_ORDER values(
11,10013,'2002-07-13',2,0);
insert into T_ORDER values(
12,10021,'2002-07-13',2,0);
insert into T_ORDER values(
13,10022,'2002-07-15',1,0);
insert into T_ORDER values(
14,10022,'2002-07-15',3,0);
insert into T_ORDER values(
15,10010,'2002-07-19',2,0);
delete from T_ORDER_DETAILS;
insert into T_ORDER_DETAILS values(
1,'010r_kurosui_mini',1);
insert into T_ORDER_DETAILS values(
1,'01anakin',1);
insert into T_ORDER_DETAILS values(
1,'12c3po',1);
insert into T_ORDER_DETAILS values(
1,'16jango',1);
insert into T_ORDER_DETAILS values(
2,'010r_kurosui_mini',2);
insert into T_ORDER_DETAILS values(
3,'010r_kurosui_mini',1);
insert into T_ORDER_DETAILS values(
3,'010r_kurosuikaku_mini',1);
insert into T_ORDER_DETAILS values(
3,'010r_kurosuiten_mini',1);
insert into T_ORDER_DETAILS values(
3,'010r_tuge_mini',1);
insert into T_ORDER_DETAILS values(
3,'010r_tugekaku_mini',1);
insert into T_ORDER_DETAILS values(
3,'010r_zouge_mini',1);
insert into T_ORDER_DETAILS values(
3,'01anakin',1);
insert into T_ORDER_DETAILS values(
3,'020-made10s',1);
insert into T_ORDER_DETAILS values(
4,'02obiwan',1);
insert into T_ORDER_DETAILS values(
5,'01anakin',1);
insert into T_ORDER_DETAILS values(
5,'020-nvbr01m',1);
delete from T_STOCK;
insert into T_STOCK values(
'010r_kurosui_mini',10,'A-1棚');
insert into T_STOCK values(
'010r_kurosuikaku_mini',12,'A-1棚');
insert into T_STOCK values(
'010r_kurosuiten_mini',23,'A-2棚');
insert into T_STOCK values(
'010r_tuge_mini',21,'A-2棚');
insert into T_STOCK values(
'010r_tugekaku_mini',12,'A-2棚');
insert into T_STOCK values(
'010r_tugeten_mini',14,'A-2棚');
insert into T_STOCK values(
'010r_zouge_mini',14,'A-2棚');
insert into T_STOCK values(
'010r_zougeten_mini',12,'A-2棚');
insert into T_STOCK values(
'01anakin',2,'A-2棚');
insert into T_STOCK values(
'020-a3s',1,'B-3棚');
insert into T_STOCK values(
'020-bamboo',1,'B-3棚');
insert into T_STOCK values(
'020-handle-m',1,'A-3棚');
insert into T_STOCK values(
'020-made10s',1,'A-3棚');
insert into T_STOCK values(
'020-nvbr01m',1,'A-3棚');
insert into T_STOCK values(
'02obiwan',2,'A-2棚');
insert into T_STOCK values(
'030-12',2,'A-2棚');
insert into T_STOCK values(
'03ami_1',1,'C-3棚');
insert into T_STOCK values(
'05mace',1,'C-3棚');
insert into T_STOCK values(
'06yoda',1,'C-3棚');
insert into T_STOCK values(
'12c3po',1,'C-3棚');
insert into T_STOCK values(
'13r2d2',1,'C-3棚');
insert into T_STOCK values(
'16jango',1,'C-3棚');
insert into T_STOCK values(
'28clone',1,'C-3棚');
insert into T_STOCK values(
'32jjb',1,'C-3棚');
insert into T_STOCK values(
'36ana-h',1,'C-3棚');
insert into T_STOCK values(
'37obi-h',1,'C-3棚');
insert into T_STOCK values(
'43c3-h',1,'C-3棚');
insert into T_STOCK values(
'46jango-h',1,'C-3棚');
insert into T_STOCK values(
'51clone-h',1,'C-3棚');


データ入力が完了したら各テーブルの中身を確認します。
特にT_CUSTOMERに山手一郎さんは入っていますか?


2.Webアプリケーションの構成

【内部設計
●ShoppingBeanControlServlet(/Shopping)→
   ↓ DBConnectionGetParam DB接続とコネクションの維持

商品区分内の商品一覧表示
http://localhost:8080/yamateOwl/Shopping?ItemCategoryNumber=1
GoodsList.jspで表示
           CategoryListDisplay.jsp 商品区分バーの表示
                                ↓ ItemCategoryDisplayBean 選択された商品区分をBeanに設定                                                                                   /yamateOwl/Shopping?ItemCategoryNumber=1
                /yamateOwl/Shopping?ItemCategoryNumber=2
                /yamateOwl/Shopping?ItemCategoryNumber=3
                /yamateOwl/Shopping?ItemCategoryNumber=999

   ↓ ItemDisplayBean 商品リストの表示
   
追加」ボタンのクリックで商品コードが指定され詳細画面へ
/yamateOwl/Shopping?ItemCode=xxxxxxx 

選択された商品の詳細表示
http://localhost:8080/yamateOwl/Shopping?ItemCode=010r_kurosui_mini
InventoryResultDisplay.jspで表示
           CategoryListDisplay.jsp 商品区分バーの表示
                                ↓ ItemCategoryDisplayBean 選択された商品区分をBeanに設定
                /yamateOwl/Shopping?ItemCategoryNumber=1
                /yamateOwl/Shopping?ItemCategoryNumber=2
                /yamateOwl/Shopping?ItemCategoryNumber=3
                /yamateOwl/Shopping?ItemCategoryNumber=999
   ↓ InventorySearchBean 商品詳細の表示 

カートに入れる」ボタンのクリックでショッピング・カートの表示画面へ    
→yamateOwl/Item   method="POST" name="action" value="ADD"  

●ShoppingItemControlServlet(/Item)
   ↓ ItemBean 選択された商品をBeanに設定

   可変長配列(Vector)にセッション設定
   action=ADD
   action=DELETE
        →/Shopping?ItemCategoryNumber=999"  
        →ShoppingCart.jsp
           CategoryListDisplay.jsp 商品区分バーの表示
                                ↓ ItemCategoryDisplayBean 選択された商品区分をBeanに設定
                /yamateOwl/Shopping?ItemCategoryNumber=1
                /yamateOwl/Shopping?ItemCategoryNumber=2
                /yamateOwl/Shopping?ItemCategoryNumber=3
                /yamateOwl/Shopping?ItemCategoryNumber=999
        →Cart.jsp
                セッション確認
                   ↓ ItemBean 選択された商品をBeanから取得
                    「削除」ボタンのクリックでショッピング・カートから削除された画面へ    
                    →/yamateOwl/Item   method="POST" name="action" value="DELETE"
                    ご清算画面へ」ボタンのクリックでショッピング・カートの請求画面へ    
                    →/yamateOwl/Item   method="POST" name="action" value="CHECKOUT"

   action=CHECKOUT
        Checkout.jsp
           CategoryListDisplay.jsp 商品区分バーの表示
                                ↓ ItemCategoryDisplayBean 選択された商品区分をBeanに設定
                /yamateOwl/Shopping?ItemCategoryNumber=1
                /yamateOwl/Shopping?ItemCategoryNumber=2
                /yamateOwl/Shopping?ItemCategoryNumber=3
                /yamateOwl/Shopping?ItemCategoryNumber=999
                                CheckoutDisplay.jsp 合計金額など清算情報の表示
                                      セッション確認
                    ご注文を確定する」ボタンのクリックで顧客情報入力画面へ    
                    →/yamateOwl/OrderStep1.jsp
        →OderStep1.jsp(顧客情報)
            CategoryListDisplay.jsp 商品区分バーの表示
                                ↓ ItemCategoryDisplayBean 選択された商品区分をBeanに設定
                /yamateOwl/Shopping?ItemCategoryNumber=1
                /yamateOwl/Shopping?ItemCategoryNumber=2
                /yamateOwl/Shopping?ItemCategoryNumber=3
                /yamateOwl/Shopping?ItemCategoryNumber=999
                 session.setAttribute()
                 初めての方→/yamateOwl/Shopping   method="POST"  name=”FirstOrder
                 sessinに顧客情報設定
                 2回目以降の方→/yamateOwl/Shopping   method="POST"  name=”Email
                 アカウントチェック
                 ↓ CustomerSearchBean 商品リストの呼び出し
                 sessinに顧客情報設定
        →OrderStep2.jsp(顧客確認)
            CategoryListDisplay.jsp 商品区分バーの表示
                                ↓ ItemCategoryDisplayBean 選択された商品区分をBeanに設定
                /yamateOwl/Shopping?ItemCategoryNumber=1
                /yamateOwl/Shopping?ItemCategoryNumber=2
                /yamateOwl/Shopping?ItemCategoryNumber=3
                /yamateOwl/Shopping?ItemCategoryNumber=999
                 session.getAttribute()
                 /yamateOwl/Shopping   method="POST"  name=”InputCheck
        →OrderStep3.jsp(注文確認)
            CategoryListDisplay.jsp 商品区分バーの表示
                                ↓ ItemCategoryDisplayBean 選択された商品区分をBeanに設定
                /yamateOwl/Shopping?ItemCategoryNumber=1
                /yamateOwl/Shopping?ItemCategoryNumber=2
                /yamateOwl/Shopping?ItemCategoryNumber=3
                /yamateOwl/Shopping?ItemCategoryNumber=999
                 session.getAttribute()
                 →CheckoutDisplay.jsp ショッピング・カートと請求金額表示
                 /yamateOwl/Shopping   method="POST"  name=”FixOrder                
                ↓ FixCustomerBean 顧客情報の確定
                ↓ FixOrderBean 発注商品の確定
                ↓ FixOrderDetailsBean 発注商品明細の確定
        →OrderStep4.jsp(注文確定)
            CategoryListDisplay.jsp 商品区分バーの表示
                                ↓ ItemCategoryDisplayBean 選択された商品区分をBeanに設定
                /yamateOwl/Shopping?ItemCategoryNumber=1
                /yamateOwl/Shopping?ItemCategoryNumber=2
                /yamateOwl/Shopping?ItemCategoryNumber=3
                /yamateOwl/Shopping?ItemCategoryNumber=999
                session.invalidate()



【転送】
CentOSサーバにTeratermを使いID:guest、Password:kanatekuで接続し[SSH SCP...]で転送します。

(ModelController及び画像関連

①クラスファイル(model・controller)を転送
model-controller.zip

②商品画像ファイルを転送
image.zip

③家紋画像ファイルを転送
kamon.zip

(Viewプログラム関連)

①PostgreSQLのjdbcドライバを転送
org.postgresql.driver.jar

②商品一覧(html,css,jsp)プログラムの転送
2.zip


③ショッピングカート(jsp)プログラムの転送
3.zip


④清算(jsp)プログラムの転送
4.zip


⑤顧客登録・注文(jsp)プログラムの作成
5.zip


Zipとjarをあわせて8つのファイルをサーバへ送ることになります!

【展開】
guestユーザのままでZipファイルを展開します。
[guest@aso ~]$ unzip model-controller.zip
Archive:  model-controller.zip
   creating: jp/ict/
   creating: jp/ict/shop/
   creating: jp/ict/shop/controller/
  inflating: jp/ict/shop/controller/ShoppingBeanControlServlet.class
  inflating: jp/ict/shop/controller/ShoppingItemControlServlet.class
   creating: jp/ict/shop/model/
  inflating: jp/ict/shop/model/CustomerSearchBean.class
  inflating: jp/ict/shop/model/DBConnectionGetParam.class
  inflating: jp/ict/shop/model/FixCustomerBean.class
  inflating: jp/ict/shop/model/FixOrderBean.class
  inflating: jp/ict/shop/model/FixOrderDetailsBean.class
  inflating: jp/ict/shop/model/InventorySearchBean.class
  inflating: jp/ict/shop/model/ItemBean.class
  inflating: jp/ict/shop/model/ItemCategoryDisplayBean.class
  inflating: jp/ict/shop/model/ItemDisplayBean.class
[guest@aso ~]$ unzip image.zip
Archive:  image.zip
  inflating: image/010r_kurosui_mini.jpg
  inflating: image/010r_kurosuikaku_mini.jpg
  inflating: image/010r_kurosuiten_mini.jpg
  inflating: image/010r_orasui_mini.jpg
  inflating: image/010r_tuge_mini.jpg
  inflating: image/010r_tugekaku_mini.jpg
  inflating: image/010r_tugeten_mini.jpg
  inflating: image/010r_zouge_mini.jpg
  inflating: image/010r_zougeten_mini.jpg
  inflating: image/01anakin.jpg
  inflating: image/020-a3s.jpg
  inflating: image/020-bamboo.jpg
  inflating: image/020-handle-m.jpg
  inflating: image/020-made10s.jpg
  inflating: image/020-nvbr01m.jpg
  inflating: image/022-10.jpg
  inflating: image/022-11.jpg
  inflating: image/02obiwan.jpg
  inflating: image/03ami_1.jpg
  inflating: image/05mace.jpg
  inflating: image/06yoda.jpg
  inflating: image/12c3po.jpg
  inflating: image/13r2d2.jpg
  inflating: image/16jango.jpg
  inflating: image/28clone.jpg
  inflating: image/32jjb.jpg
  inflating: image/36ana-h.jpg
  inflating: image/37obi-h.jpg
  inflating: image/43c3-h.jpg
  inflating: image/46jango-h.jpg
  inflating: image/51clone-h.jpg
  inflating: image/BULLET2.GIF
  inflating: image/Lavie_logo.dnd
  inflating: image/PROGRESSbar1.gif
  inflating: image/PROGRESSbar10.gif
  inflating: image/syacho2_1.JPG
  inflating: image/syacho2_1z.JPG
  inflating: image/Tex_034.gif
  inflating: image/Thumbs.db
  inflating: image/Yamate-Logo.gif
extracting: image/yTex_034.gif
[guest@aso ~]$ unzip kamon.zip
Archive:  kamon.zip
  inflating: kamon/0.gif
  inflating: kamon/1.gif
  inflating: kamon/10.gif
  inflating: kamon/11.gif
  inflating: kamon/12.gif
  inflating: kamon/13.gif
  inflating: kamon/14.gif
  inflating: kamon/15.gif
  inflating: kamon/16.gif
  inflating: kamon/17.gif
  inflating: kamon/18.gif
  inflating: kamon/19.gif
  inflating: kamon/2.gif
  inflating: kamon/20.gif
  inflating: kamon/21.gif
  inflating: kamon/22.gif
  inflating: kamon/23.gif
  inflating: kamon/24.gif
  inflating: kamon/25.gif
  inflating: kamon/26.gif
  inflating: kamon/27.gif
  inflating: kamon/28.gif
  inflating: kamon/29.gif
  inflating: kamon/3.gif
  inflating: kamon/30.gif
  inflating: kamon/4.gif
  inflating: kamon/5.gif
  inflating: kamon/6.gif
  inflating: kamon/7.gif
  inflating: kamon/8.gif
  inflating: kamon/9.gif
[guest@aso ~]$ unzip 2.zip
Archive:  2.zip
  inflating: 2/CategoryListDisplay.jsp
  inflating: 2/GoodsList.jsp
  inflating: 2/header.css
  inflating: 2/index.html
[guest@aso ~]$ unzip 3.zip
Archive:  3.zip
  inflating: 3/Cart.jsp
  inflating: 3/InventoryResultDisplay.jsp
  inflating: 3/ShoppingCart.jsp
[guest@aso ~]$ unzip 4.zip
Archive:  4.zip
  inflating: 4/Checkout.jsp
  inflating: 4/CheckoutDisplay.jsp
[guest@aso ~]$ unzip 5.zip
Archive:  5.zip
  inflating: 5/OrderStep1.jsp
  inflating: 5/OrderStep2.jsp
  inflating: 5/OrderStep3.jsp
  inflating: 5/OrderStep4.jsp
[guest@aso ~]$

【JavaEEディレクトリ作成】
管理者(root)に変わってドキュメントルート配下のディレクトリを作成します。
[guest@aso ~]$ su -
パスワード:
[root@aso ~]# cd /usr/local/src/apache-tomcat-9.0.0.M17/webapps
[root@aso webapps]#
[root@aso webapps]# mkdir yamateOwl
[root@aso webapps]# cd yamateOwl
[root@aso yamateOwl]# mkdir WEB-INF
[root@aso yamateOwl]# mkdir WEB-INF/classes
[root@aso yamateOwl]# mkdir WEB-INF/lib



【実行結果】
一旦Tomcatサーバを再起動してください。
その後 index.html から起動します。(index.htmlは省略可能です)


http://192.168.56.10:8080/yamateOwl/




ここから課題!


【デプロイ調整】

商品区分をクリックしてください。
区分リストが表示されることなく「真っ白の画面が表示」されます。これは実行時エラーが起きているためです

JavaEEにおけるTomcatのエラー情報はlogsディレクトリのcatalina.outのファイルに保存されていますので、内容を確認して適切に対処してください。
ヒント:変数トレース用のコードが埋め込まれたままのようです
     2つのファイルで3か所の修正が必要です!

[root@aso yamateOwl]# tail -100 /usr/local/src/apache-tomcat-9.0.0.M17/logs/catalina.out

以下↓のようになれば正解です。
   

  

  


【確認】
一連の流れを実行して、データベースに入力した顧客情報が登録されていることを確認してください。
CSEの画像のスクショを提出してください!