Struts面接対策:必須30問&回答(2026年版)

Strutsの面接準備ですか?レガシーStruts 1アプリの保守であれ、Struts 2での作業であれ、このガイドではアーキテクチャ、設定、バリデーション、移行、高度なパターンをカバーする30の核心技術質問に加え、戦略的模範回答付きの10の行動/シナリオ質問を用意しています。
👉 無料PDFダウンロード: Struts面接質問&回答集
コアフレームワーク知識
1. Strutsアーキテクチャとライフサイクル
StrutsはMVCを実装:ActionServlet(コントローラ)がリクエストをインターセプト、struts-config.xmlを参照、Actionクラス(モデル連携)に委譲、ActionForwardを返してJSP(ビュー)へ。
| ステップ | 説明 |
|---|---|
| 1 | クライアントリクエスト → ActionServlet |
| 2 | Servletが設定読み取り、Action特定 |
| 3 | Actionがビジネスロジック実行 |
| 4 | ActionForward返却 |
| 5 | JSPがレスポンス描画 |
例: ECチェックアウト:Actionがカート検証、決済サービス呼び出し、成功/エラーJSPへフォワード。
2. Actionクラスタイプ(Struts 1)
| タイプ | 特性 | ユースケース |
|---|---|---|
| Action | 基本リクエスト処理 | シンプルフロー |
| DispatchAction | パラメータで複数メソッドマッピング | 単一ページでのCRUD |
| LookupDispatchAction | キー-メソッドマップ(i18n対応) | 多言語UI |
| MappingDispatchAction | アクションマッピングでルーティング | 複雑ルーティング |
例: DispatchActionでadd/edit/deleteを1クラスで処理。
3. Struts 1 vs Struts 2:移行トレードオフ
| 側面 | Struts 1 | Struts 2 |
|---|---|---|
| Actionクラス | フレームワーク基底クラス継承 | プレーンPOJO |
| データバインディング | ActionForm Bean | OGNL経由で直接POJO |
| 拡張性 | 限定的 | Interceptorベース、高カスタマイズ |
| 移行インパクト | なし | 大幅リファクタリング必要 |
アップグレードメリット:ボイラープレート削減、モダン機能。コスト:設定変更、非推奨コンポーネント。
4. Struts設定システム
struts-config.xml(Struts 1)またはstruts.xml(Struts 2)で定義:form-beans、action-mappings、global-forwards、plug-ins、message-resources。Struts 2はパッケージごとのモジュラーstruts.xmlとアノテーション対応。
5. Struts 2 Interceptor:ライフサイクルと役割
モジュール化された事前/事後処理ユニット(バリデーション、ログ、認証、パラメータ)。スタックがAction前実行、後で逆順実行。paramsインターセプタでプロパティ設定;validationで正当性確保。ボイラープレート削減、一貫した横断ロジック。
6. バリデーションアプローチ
| タイプ | 長所 | 短所 |
|---|---|---|
宣言的(validation.xml) | 一元化、再利用可能、保守容易 | 動的ルールには柔軟性低い |
| プログラマチック(Action/Form) | 高カスタマイズ | クラス複雑化 |
例: メール形式は宣言的;DBチェックによるユーザー名一意性はプログラマチック。
7. ActionForm vs POJOフォーム(Struts 2)
Struts 1:別ActionFormがドメインモデルを複製。Struts 2:OGNL経由で直接POJOバインド—綺麗、冗長性なし、テスト容易。
// Struts 1: UserForm extends ActionForm // Struts 2: User POJOを直接使用
8. Struts 2 Resultタイプ
| Resultタイプ | 目的 |
|---|---|
| dispatcher | JSPへフォワード(デフォルト) |
| redirect | 新リクエストサイクル(再送信防止) |
| redirectAction | 別Actionへリダイレクト |
| chain | 別Action直接呼び出し |
| stream | バイナリ出力(ファイル、レポート) |
9. ActionServlet / FilterDispatcherの役割
中央コントローラ:設定解釈、Action選択、ライフサイクル管理、ロジック呼び出し、ビュー決定。これがないと予測可能なルーティングやMVC強制不可。
10. 国際化(i18n)
プロパティファイルをメッセージリソースとして使用;ロケールで自動選択。タグ:<bean:message>(Struts 1)、<s:text>(Struts 2)。機能:構造化リソース、自動ロケール検出、再利用可能キー。
例: "Username" → ロケール切替で"Nombre de usuario"。
11. 例外処理
宣言的: 設定内<exception>で例外タイプを結果ページにマッピング。プログラマチック: Action内try-catch。宣言的=一貫性;プログラマチック=文脈対応(認証エラー→警告ページ、システムエラー→メンテナンスページ)。
12. Strutsタグライブラリ
Struts 1:<html:form>、<bean:write>、<logic:iterate>。Struts 2:<s:form>、<s:textfield>、<s:iterator>。フォームフィールド直接バインド:<html:text property="username"/>。
13. Struts 2でのOGNL
Object-Graph Navigation Language:式評価、リクエストパラメータ-POJOバインディング、深いグラフナビゲーション。address.street、address.cityでネストオブジェクト自動設定。
14. RequestProcessor(Struts 1)vs Interceptor Stack(Struts 2)
| 特徴 | RequestProcessor | Interceptor Stack |
|---|---|---|
| 拡張性 | 限定的(サブクラス化) | 高柔軟(設定可能) |
| 振る舞い | モノリシック | モジュール化、分散 |
| メリット | シンプル | 関心事分離 |
15. ファイルアップロード実装
Struts 1:Apache Commons FileUpload。Struts 2:組み込み<s:file>タグ。考慮点:サイズ制限、MIME検証、安全な保存、悪意アップロード防止。
16. Struts 2柔軟性機能
インターセプタアーキテクチャ、POJOアクション、DIサポート(Springプラグイン)、カスタムResultタイプ、プラグイン(JSON、REST、Spring)。例:グローバル認証/ログインターセプタで重複排除。
17. Struts vs Spring MVC
| 側面 | Struts | Spring MVC |
|---|---|---|
| コントローラ | Actionベース | アノテーションベース |
| 設定 | XML重め | 軽量 |
| テスト | 中程度 | 非常に容易 |
| 統合 | 限定的 | フルSpringエコシステム |
| 最適用途 | レガシー保守 | 新規プロジェクト |
18. Tiles統合
tiles-defs.xml経由でテンプレート化:レイアウト(ヘッダー、フッター、ボディ)定義、Actionフォワードにマッピング。再利用可能レイアウト、統一ルック、UI更新容易。
19. Strutsでの依存性注入
Struts 1:ネイティブDIなし。Struts 2:struts2-spring-pluginでActionに依存性注入。OrderServiceをOrderActionに注入 → 綺麗、テスト容易。
20. Struts 1 → 2移行ステップと課題
- ActionをPOJOとして書き直し
- ActionFormをドメインオブジェクトに置換
- バリデーション再設計(XML → アノテーション/インターセプタ)
- 設定更新(
struts-config.xml→struts.xmlパッケージ) - JSPタグ移行(Struts 1 → Struts 2 UIタグ)
- OGNLとインターセプタモデルに適応
課題:非推奨機能、カスタムRequestProcessorロジック、フォームバインディング変更。見返り:綺麗なアーキテクチャ、拡張性、保守コスト削減。
21. 設定ファイル構造と保守性
Struts 1:単一大規模struts-config.xml → 保守困難。Struts 2:パッケージ/モジュールごとのモジュラーstruts.xml(例:inventory-struts.xml、finance-struts.xml)+ アノテーション。
22. Validatorフレームワーク
XML定義ルール(必須、メール、長さ)+ 自動JavaScript生成。クライアント/サーバー両面バリデーション。ボイラープレート削減、一貫性確保。
23. Struts 2のValueStack
リクエストごとのデータスタック:Actionプロパティ、一時オブジェクト、OGNLアクセス可能。階層構造で正しい値解決保証。<s:iterator value="products">でリスト直接取得—ビューとコントローラ分離。
24. セッション管理:Struts vs Servlet API
Struts 1:セッションスコープActionForm。Struts 2:SessionAwareインターフェースでインターセプタ経由セッションマップ注入。型安全、生HttpSessionよりボイラープレート少ない。
25. 横断的関心事用インターセプタスタック
パッケージ/アクションごとに設定可能なインターセプタコレクション。金融モジュール:厳格スタック(監査、認証、暗号化)。公開カタログ:軽量スタック。モジュール化、保守容易。
26. ActionErrorsとActionMessages(Struts 1)
複数エラー/成功メッセージ収集;<html:errors>/<html:messages>で表示。ロジック/プレゼンテーション分離を綺麗に。
27. マルチモジュール設定
Struts 1:URLプレフィックスごとに別設定(admin、user、reporting)。Struts 2:パッケージ。メリット:隔離、並行開発、独立デプロイ/テスト。
28. DispatchActionバリエーションとコード最適化
| クラス | メソッド選択 | 最適用途 |
|---|---|---|
| DispatchAction | リクエストパラメータ | CRUD |
| LookupDispatchAction | リソースキー → メソッドマップ | i18nフォーム |
| MappingDispatchAction | アクションマッピング | 複雑ルーティング |
関連操作を1クラスに統合。
29. Resultタイプとナビゲーション柔軟性
選択要因:フロー、性能、セキュリティ、コンテンツタイプ。redirectで再送信防止;dispatcherで内部高速;streamでPDF/ダウンロード。
30. Struts 2 Actionライフサイクル vs Struts 1
Struts 2:FilterDispatcher → ValueStack初期化 → Interceptor Stack(params、validation等) → Action実行 → インターセプタ事後処理 → Result描画。主な違い:POJO Action、ActionFormなし、インターセプタがモノリシックRequestProcessor置換。
例: PurchaseAction:authインターセプタ → validationインターセプタ → loggingインターセプタ → Action → result。
🔍 実践シナリオ質問(行動・状況ベース)
縮約形なし;必須フレーズを各1回のみ使用。
1. Strutsフレームワークとエンタープライズ利用を説明せよ。
期待: MVC、関心事分離、エンタープライズメリット。
回答: "StrutsはModel-View-Controllerアーキテクチャに従うJavaベースのWebアプリケーションフレームワークです。集中設定、再利用可能コンポーネント、明確な関心事分離を提供するため、エンタープライズアプリケーションで使用されます。これらの機能により、チームは大規模アプリケーションをより効率的に保守できます。"
2. Struts内でのMVCは?
期待: ActionServlet、Action、JSPの役割。
回答: "Strutsでは、コントローラはActionServletが管理し、ユーザーリクエストを受け取って適切なActionクラスにルーティングします。モデルはビジネスロジックとデータ処理を含み、ビューはJSPを使用して処理された情報を提示します。この構造は保守性を向上させ、結合度を低減します。"
3. struts-config.xmlの目的は?
期待: 設定中心の知識。
回答: "struts-config.xmlファイルは、フォームBean、グローバルフォワード、アクションマッピング、コントローラ設定など、コアアプリケーション設定を保持します。これにより開発者はリクエストフローとコンポーネント相互作用を単一の集中ファイルから管理できます。"
4. ActionFormの役割と使用時期?
期待: フォーム処理、バリデーション。
回答: "ActionFormは、ユーザー入力を取得し、Actionクラスに到達する前に検証するためのJavaBeanです。アプリケーションが構造化フォームデータと、コントローラがリクエストを処理する前の入力検証を必要とする場合に使用されます。"
5. Strutsアプリで解決した困難な課題は?
期待: 技術的障害解決。
回答: "前職で、struts-config.xmlファイルの誤ったマッピングによりフォームバリデーションが正しくトリガーされない問題に遭遇しました。詳細ログで問題を追跡し、マッピングを修正し、類似問題再発防止のためバリデーションロジックを強化しました。"
6. レガシーStrutsでのコード品質と保守性確保は?
期待: 古いフレームワークでのベストプラクティス。
回答: "Actionクラスのモジュール化、重複ロジック除去、明確なドキュメント追加に注力します。またビジネスロジック検証のため単体テスト導入。これらのプラクティスでレガシー環境の安定性向上とリスク低減を図ります。"
7. フォームデータが正しく送信されないトラブルシュートは?
期待: 論理的デバッグ手順。
回答: "まずフォームフィールドがActionFormプロパティ名と一致するか確認。次にstruts-config.xmlのアクションマッピングでフォームBeanが正しく関連付けられているか確認。必要ならデバッグログ有効化でリクエストパラメータ追跡し、データフロー断絶箇所特定。"
8. タイトなデッドライン、複数Strutsモジュール対応は?
期待: 優先順位付け、プレッシャー下の整理。
回答: "前職では、タスクを小さな成果物に分解し、ビジネスインパクトで優先順位付け、ステークホルダーにステータス更新を伝えることでこの状況を処理しました。このアプローチで全モジュールに注力しつつ品質を損なわず対応できました。"
9. StrutsからSpring MVCへの移行は?
期待: 移行戦略、リスク軽減。
回答: "まず既存モジュールを評価し、依存関係と複雑性を特定。次に、アプリケーションを機能させたままStrutsコントローラをSpringコンポーネントに置き換える段階的移行戦略を設計。適切なドキュメントとテストでスムーズな移行を確保。"
10. Strutsアプリ改善でのクロスファンクショナル協業経験は?
期待: コミュニケーション、チームワーク、調整。
回答: "前職で、QA、UIデザイナー、バックエンド開発者と協業し、Strutsモジュールのリクエスト処理を最適化しました。連携によりレスポンス時間改善、UIフロー向上、以降リリースの欠陥削減を実現しました。"
Java
- Spring Framework 2026:包括的概要、機能、アーキテクチャ、MVC、AOP、インストールガイド
- Log4j完全マスター:2026年必須面接30問とエキスパート解答
- Java 9のOptionalクラス新機能:stream()、ifPresentOrElse()、or()
- Java多次元配列をマスター:2D・3D配列の実例解説
- Java 日付・時刻マスター:SimpleDateFormat、現在日時取得、日付比較
- Java Vectorの理解:使い方、特徴、ArrayListとの比較
- Java InputStreamクラス:コアメソッドとFileInputStream実践例
- Javaで文字列を整数に簡単変換:ステップバイステップガイド
- J2EE/Jakarta EE面接対策:必須40問&回答(2026年版)
- Java BufferedReader でファイル読み込み:実践ガイドと例
- Java split() メソッド完全マスター:実践ガイドとコード例