61-1.Eclipseで動的Webシステム開発(販売管理)
商品を一覧から選択してショッピングカートに保存する販売管理WebアプリをMVCモデルで作成します。
このWebアプリは商品一覧と詳細を表示するサーブレット(/Shopping)と、商品をショッピングカートに入れて合計の計算と注文処理を行うサーブレット(/Item)の2つのサーブレットから構成されリクエストパラメータで商品番号や商品区分が渡されます。
ドキュメントルート(プロジェクト名)はyamateOwlとしサーブレットクラス(urlパターン)はShoppingとItemとなります。
Shopping:ShoppingBeanControlServlet:商品一覧から商品を選択して商品詳細を表示する処理のコントロール
Item:ShoppingItmControlServlet:ショッピングカートへ商品追加、清算処理、顧客情報の入力と発注を確定する処理のコントロール
※全体で2個のServlet、9個のBean、13個のJSP、1個の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(
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接続とコネクションの維持
商品区分内の商品一覧表示
→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
選択された商品の詳細表示
→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)を転送
②商品画像ファイルを転送
③家紋画像ファイルを転送
(Viewプログラム関連)
①PostgreSQLのjdbcドライバを転送
②商品一覧(html,css,jsp)プログラムの転送
index.html
header.css
GoodsList.jsp
CategoryListDisplay.jsp
③ショッピングカート(jsp)プログラムの転送
④清算(jsp)プログラムの転送
Checkout.jsp
CheckoutDisplay.jsp
⑤顧客登録・注文(jsp)プログラムの作成
OderStep1.jsp
OderStep2.jsp
OderStep3.jsp
OderStep4.jsp
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は省略可能です)
ここから課題!
【デプロイ調整】
商品区分をクリックしてください。
区分リストが表示されることなく「真っ白の画面が表示」されます。これは実行時エラーが起きているためです。
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の画像のスクショを提出してください!