1. 序章

Apache Struts 2 は、エンタープライズJavaWebアプリケーションを開発するためのMVCベースのフレームワークです。 これは、元のStrutsフレームワークを完全に書き直したものです。 オープンソースのAPI実装と豊富な機能セットがあります。

このチュートリアルでは、Struts2フレームワークのさまざまなコアコンポーネントを初心者に紹介します。さらに、それらの使用方法を示します。

2. Struts2フレームワークの概要

Struts2の機能の一部は次のとおりです。

  • POJO(プレーンオールドJavaオブジェクト)ベースのアクション
  • REST、AJAX、Hibernate、Springなどのプラグインサポート
  • 設定より規約
  • さまざまなビューレイヤーテクノロジーのサポート
  • プロファイリングとデバッグの容易さ

2.1. Struts2のさまざまなコンポーネント

Struts2はMVCベースのフレームワークであるため、次の3つのコンポーネントがすべてのStruts2アプリケーションに存在します。

  1. アクションクラス– POJOクラスである(POJOは、タイプ階層の一部ではなく、スタンドアロンクラスとして使用できることを意味します)。 ここでビジネスロジックを実装します
  2. コントローラー– Struts2では、HTTPフィルターがコントローラーとして使用されます。 基本的に、要求/応答の傍受や検証などのタスクを実行します
  3. 表示–は処理されたデータを表示するために使用されます。 通常はJSPファイルです

3. アプリケーションの設計

Webアプリの開発を進めましょう。 これは、ユーザーが特定の Car ブランドを選択し、カスタマイズされたメッセージで迎えられるアプリケーションです。

3.1. Mavenの依存関係

pom.xmlに次のエントリを追加しましょう。

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.5.10</version>
</dependency>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-junit-plugin</artifactId>
    <version>2.5.10</version>
</dependency>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-convention-plugin</artifactId>
    <version>2.5.10</version>
</dependency>

依存関係の最新バージョンはここにあります。

3.2. ビジネスの論理

特定の入力値のメッセージを返すアクションクラスCarActionを作成しましょう。 CarAction には、 carName (ユーザーからの入力を保存するために使用)と carMessage (表示されるカスタムメッセージを保存するために使用)の2つのフィールドがあります。

public class CarAction {

    private String carName;
    private String carMessage;
    private CarMessageService carMessageService = new CarMessageService();
    
    public String execute() {
        this.setCarMessage(this.carMessageService.getMessage(carName));
        return "success";
    }
    
    // getters and setters
}

CarActionクラスはCarMessageServiceを使用し、Carブランドのカスタマイズされたメッセージを提供します。

public class CarMessageService {

    public String getMessage(String carName) {
        if (carName.equalsIgnoreCase("ferrari")){
            return "Ferrari Fan!";
        }
        else if (carName.equalsIgnoreCase("bmw")){
            return "BMW Fan!";
        }
        else {
            return "please choose ferrari Or bmw";
        }
    }
}

3.3. ユーザー入力の受け入れ

アプリケーションのエントリポイントであるJSPを追加しましょう。 これは、input.jspファイルの内容です。

<body>
    <form method="get" action="/struts2/tutorial/car.action">
        <p>Welcome to Baeldung Struts 2 app</p>
        <p>Which car do you like !!</p>
        <p>Please choose ferrari or bmw</p>
        <select name="carName">
            <option value="Ferrari" label="ferrari" />
            <option value="BMW" label="bmw" />
         </select>
        <input type="submit" value="Enter!" />
    </form>
</body>

< >タグはアクションを指定します(この場合、GETリクエストの送信先となるHTTP URIです)。

3.4. コントローラー部分

StrutsPrepareAndExecuteFilter はコントローラーであり、すべての着信要求をインターセプトします。 web.xmlに次のフィルターを登録する必要があります:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

StrutsPrepareAndExecuteFilter は、ワイルドカード / * に一致するURLを指定しているため、すべての着信リクエストをフィルタリングします。

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

アクションクラスCarに次のアノテーションを追加しましょう。

@Namespace("/tutorial")
@Action("/car")
@Result(name = "success", location = "/result.jsp")

この注釈の論理を理解しましょう。 @ 名前空間は、さまざまなアクションクラスのリクエストURIを論理的に分離するために使用されます。 この値をリクエストに含める必要があります。

さらに、 @Action は、ActionクラスにヒットするリクエストURIの実際のエンドポイントを通知します。 アクションクラスはCarMessageServiceを参照し、別のメンバー変数carMessageの値を初期化します。 execute()メソッドが値(この場合は“ success” )を返した後、その値と一致してresult.jspを呼び出します。

最後に、@Resultには2つのパラメーターがあります。 最初のname、は、Actionクラスが返す値を指定します。 この値は、 Actionクラスのexecute()メソッドから返されます。 これは実行されるデフォルトのメソッド名です

2番目の部分location、は、 execute()メソッドが値を返した後に参照されるファイルを示します。 ここでは、 execute()が値「 success 」の文字列を返すときに、リクエストをresult.jspに転送する必要があることを指定しています。

XML構成ファイルを提供することにより、同じ構成を実現できます。

<struts>
    <package name="tutorial" extends="struts-default" namespace="/tutorial">
        <action name="car" class="com.baeldung.struts.CarAction" method="execute">
            <result name="success">/result.jsp</result>
        </action>
    </package>
</struts>

3.6. 景色

これは、ユーザーにメッセージを表示するために使用されるresult.jspのコンテンツです。

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<body>
    <p> Hello Baeldung User </p>
    <p>You are a <s:property value="carMessage"/></p>
</body>

ここで注意すべき2つの重要なことがあります。

  • <@taglib prefix =” s” uri =” / struts-tags%> インポートしていますストラット-タグ図書館
  • 使用していますストラット-タグプロパティの値を出力するライブラリ carMessage

4. アプリケーションの実行

このWebアプリは、Apache Tomcatなど、任意のWebコンテナーで実行できます。 これを達成するために必要な手順は次のとおりです。

  1. Webアプリをデプロイした後、ブラウザーを開き、次のURLにアクセスします。 http://www.localhost.com:8080/MyStrutsApp/input.jsp
  2. 2つのオプションのいずれかを選択して、リクエストを送信します
  3. 選択した入力オプションに基づいてカスタマイズされたメッセージを含むresult.jspページに転送されます

5. 結論

このチュートリアルでは、最初のStruts2Webアプリケーションを作成する方法をステップバイステップガイドで説明しました。 Struts2ドメインのさまざまなMVC関連の側面を取り上げ、それらを組み合わせて開発する方法を示しました。

いつものように、このチュートリアルはMavenプロジェクトとしてGithubにあります。