Struts 1のリクエスト処理

ブラウザから送られたリクエストがActionServlet、ActionForm、Actionを通り、JSPへ到達するまでを追う。

作成日: 2026-07-28 / 更新日: 2026-07-28

キーワード: ActionServlet / ActionMapping / ActionForm / Action / ActionForward / RequestProcessor

概要

Struts 1では、アプリケーションごとにServletを作ってリクエストを直接振り分けるのではなく、ActionServletが共通の入口になります。実際の処理先は、リクエストのパスとstruts-config.xmlの設定から決まります。

全体の流れ

ブラウザ
  → ActionServlet
  → RequestProcessor
  → ActionMapping
  → ActionFormの生成・値設定・検証
  → Action.execute()
  → Serviceなどの業務処理
  → ActionForward
  → JSP
  → HTMLレスポンス

RequestProcessorは、ActionMappingの特定、Form Beanの準備、入力検証、Actionの実行などを担当します。

1. ActionServletがリクエストを受け取る

web.xmlには、ControllerとなるActionServletとURLパターンが定義されます。

<servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>

この場合、/userSearch.doのようなリクエストがStrutsへ渡ります。実際のマッピングは最初にweb.xmlで確認します。

2. ActionMappingを特定する

struts-config.xml<action path>が、リクエストのパスとActionクラスを対応付けます。

<action
  path="/userSearch"
  type="example.web.UserSearchAction"
  name="userSearchForm"
  scope="request"
  validate="true"
  input="/WEB-INF/jsp/user/search.jsp">
  <forward name="success" path="/WEB-INF/jsp/user/result.jsp"/>
</action>

この設定から、Action、ActionForm、入力エラー時の戻り先、正常終了時の遷移先を確認できます。

3. ActionFormへ入力値を設定する

nameが指定されている場合、対応するForm Beanがrequestまたはsessionスコープから取得され、なければ生成されます。リクエストパラメータと同名のプロパティへ値が設定されます。

リクエストパラメータ: userId=123

userSearchForm.setUserId("123")

HTTPの入力値は基本的に文字列です。Formのプロパティ型との変換、空文字、未送信、配列項目を確認します。

4. reset()とvalidate()を実行する

代表的な順序は、Form Beanの準備、reset()、パラメータ設定、validate()です。検証エラーがある場合は通常Actionを実行せず、inputで指定された画面へ戻ります。

Actionに到達しない場合は、入力検証も確認対象です。

5. Actionを実行する

public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) throws Exception {

    UserSearchForm searchForm = (UserSearchForm) form;
    User user = userService.find(searchForm.getUserId());
    request.setAttribute("user", user);
    return mapping.findForward("success");
}

Actionでは、入力値の取得、業務処理の呼び出し、JSPへ渡す値の設定、遷移先の選択が行われます。

6. ActionForwardからJSPへ進む

mapping.findForward("success")は、<forward name="success">を探します。forwardなら同じrequestの属性をJSPから参照できます。redirectなら新しいリクエストになり、request属性は引き継がれません。

値がJSPへ届く経路

JSP上の値主な設定元
ActionFormのプロパティリクエストパラメータ、Action内のsetter
request属性request.setAttribute()
session属性session.setAttribute()
メッセージ・エラーsaveMessages()saveErrors()など

logic:equalbean:writeを読むときは、Bean名とスコープから設定元を逆引きします。

デバッグ時の分岐点

参考文献

更新履歴

  • 初版作成

関連項目

このページを参照しているページ