①環境設定のずれ(ポート番号・URLマッピング)
Eclipse のサーバー設定でポートを8081に変えていたため、意図せず localhost:8080 と食い違いが発生。
その後 8080 に戻したものの、web.xml のマッピングが重複/競合(/PersonList.do と *.do)していて、リクエストが思ったコントローラに届かなかった。
②フレームワーク(HttpServletMain)と独自サーブレットの混同
共通フレームワークでは HttpServletMain → doAction() をオーバーライドする設計。
ところが最初、自力で doGet/doPost を書いて動かそうとしてクラスキャスト例外や “Servletではありません” エラーに。
結果、PersonList クラスに doAction() が二重定義され、ビルドエラーにもなっていた。
③JSP/サーブレットの呼び出しルートが不明確
PersonList.jsp を直接ブラウザで開いてしまい、ビーンへの初期化処理が走らず真っ白に。
正しくは
<form action="PersonList.do">
経由でコントローラ→ビーン→JSP の順にリクエストを流す必要があった。
④複数ファイル・複数段階の画面遷移
新規登録・一覧・詳細・確認・完了の5画面をまたいで値渡しをするため、
form_name/action_cmd/search_info など hidden 項目の管理
Bean の serialize/deserialize
が煩雑になり、どのタイミングでどの画面を呼ぶべきか迷走。
なぜ時間がかかったか
原因切り分けが後手に:
問題が一気に複数(ポート、マッピング、フレームワーク設計、JSP直叩き)重なり、どこから手をつけるべきか判然としなかった。
フレームワークへの理解不足:
HttpServletMain を軸にした開発手順/クラス構成のルールを初見で把握するまでに手間がかかった。
画面/URL/クラス名の多重パターン:
画面ごとに JSP が複数バージョンあり、その呼び出し先も「.jsp」「.do」「.html」と混在。
次回からの対策
①基本構成図をまず描く
「ブラウザ→サーブレット(.do)→Bean→JSP」の大まかなフローを可視化し、JSP直叩きになっていないか常にチェックする。
②web.xml は一元管理 & コメント整備
個別マッピング(/PersonList.do)とワイルドカード(*.do)が両立しない場合はどちらか一方に集約。
「何番ポートで起動中か」「context path」も明示的にコメントに残す。
③フレームワークのテンプレートを踏襲
共通の HttpServletMain を使うなら、
public class MyController extends HttpServletMain {
@Override
public void doAction() { … }
@Override
public void doInit() { … }
}
doGet/doPost を直接オーバーライドしないパターンに慣れる。
④単体テスト的に段階確認
まず「.do にアクセス→ログに”controller hit”」と出るか確認。
次に「forward 先の JSP で簡易メッセージ表示」を挟んで順序をトレース。
最終的にビーンを経由して本来画面を出す。