TOPページへ戻る

Struts 7.0.0のインストールとサンプル Part7

ここでは、Javaでウェブアプリケーションの作成が行えるStruts 7.0.0のインストールとサンプルアプリケーションの作成と実行を行います。
    ※JDK、EclipseのインストールのページでEclipseがインストールされていることを前提にしています。
    ※Struts 7.0.0のインストールとサンプルのページを参照し、ある程度の知識があることを前提にしています。

EclipseでStruts2

Struts2は初期状態でインストールされていないためStrutsのサイトからダウンロードしインストールする必要がある。

Struts2 サンプル作成7

Struts 7.0.0のサンプルを作成する

ポイント

フォームのチェックボックス、セレクト、ラジオボタンのサンプルです。

ソースコードをzipファイルにしました。こちらもご利用ください。
  1. Downloadsにzipファイルをダウンロードし、そこでzipを7-Zipで解凍する。
    Strutsのサイトにアクセスし、以下のファイルをダウンロード
    https://struts.apache.org/download.cgi
    ダウンロードするファイル struts-7.0.0-all.zip
    ダウンロードするフォルダはデフォルト。(エクスプローラのDownloadsフォルダ)

    解凍するファイル
    C:\Users\(ユーザ名)\Downloads\struts-7.0.0-all.zip
    解凍するとできるフォルダ
    C:\Users\(ユーザ名)\Downloads\struts-7.0.0-all\struts-7.0.0

    さらにwarファイルを7-Zipで解凍する
    解凍するファイル
    C:\Users\(ユーザ名)\Downloads\struts-7.0.0-all\struts-7.0.0\apps\struts2-rest-showcase-7.0.0.war
    解凍するとできるフォルダ
    C:\Users\(ユーザ名)\Downloads\struts-7.0.0-all\struts-7.0.0\apps\struts2-rest-showcase-7.0.0

  2. プロジェクトの作成
    新規アイコン→Web→動的Webプロジェクト
    プロジェクト名 test8と入力
    ターゲット・ランタイムをTomcat10(Java17)かTomcat10(Java21)にする。

  3. エクスプローラでコピー元のフォルダのlibフォルダをコピー先へコピー
    strutsのjarファイルをコピー
    コピー元
    C:\Users\(ユーザ名)\Downloads\struts-7.0.0-all\struts-7.0.0\apps\struts2-rest-showcase-7.0.0\WEB-INF\lib\*
    コピー先
    C:\pleiades\2024-12\workspace\(プロジェクト名)\src\main\webapp\WEB-INF\lib
    (重要)コピー先から以下のjarファイルを削除
    struts2-rest-plugin-7.0.0.jar


  4. javaソースファイル、JSPファイル、XML、propertiesファイルの作成
    1)Javaソースの作成
    Person.javaの作成
    クラスの作成
    (プロジェクト名)\src\main\javaフォルダをクリックし以下を実行
    新規アイコン→Java→クラス
    パッケージにtest8.sample.modelを入力
    名前にPersonを入力、完了をクリック。

    以下のサンプルソースを作成
    Person.java
    package test8.sample.model;

    import java.util.Arrays;

    /**
    * Models a Person who registers.
    */
    public class Person {
        private String firstName;
        private String lastName;
        private String sport;
        private String gender;
        private String residency;
        private boolean over21;
        private String[] carModels;
        private String preferredCarModel;

        public String getFirstName() {
            return firstName;
        }

        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }

        public String getLastName() {
            return lastName;
        }

        public void setLastName(String lastName) {
            this.lastName = lastName;
        }

        public void setSport(String sport) {
            this.sport = sport;
        }

        public void setGender(String gender) {
            this.gender = gender;
        }

        public String getGender() {
            return gender;
        }

        public String getSport() {
            return sport;
        }

        public void setResidency(String residency) {
            this.residency = residency;
        }

        public String getResidency() {
            return residency;
        }

        public void setOver21(boolean over21) {
            this.over21 = over21;
        }

        public boolean isOver21() {
            return over21;
        }

        public void setCarModels(String[] carModels) {
            this.carModels = carModels;
        }

        public String[] getCarModels() {
            return carModels;
        }

        public String getPreferredCarModel() {
            return preferredCarModel;
        }

        public void setPreferredCarModel(String preferredCarModel) {
            this.preferredCarModel = preferredCarModel;
        }

        public String toString() {
            return "First Name: " + getFirstName() + " | " +
                    " Last Name:  " + getLastName() + " | " +
                    " Favorite Sport: " + getSport() + " | " +
                    " Gender: " + getGender() + " | " +
                    " Residency: " + getResidency() + " | " +
                    " Over 21: " + isOver21() + " | " +
                    " Car models: " + Arrays.asList(getCarModels()) + " | " +
                    " Preferred Car Model: " + getPreferredCarModel()                 ;
        }
    }

    同様に以下のサンプルソースを作成
    State.java
    package test8.sample.model;

    public class State {

        private String stateAbbr;
        private String stateName;

        public State(String stateAbbr, String stateName) {
            this.stateAbbr = stateAbbr;
            this.stateName = stateName;
        }

        public void setStateAbbr(String stateAbbr) {
            this.stateAbbr = stateAbbr;
        }

        public String getStateAbbr() {
            return stateAbbr;
        }

        public void setStateName(String stateName) {
            this.stateName = stateName;
        }

        public String getStateName() {
            return stateName;
        }

        public String toString() {
            return getStateAbbr();
        }

    }

    EditService.javaの作成 クラスの作成
    (プロジェクト名)\src\main\javaフォルダをクリックし以下を実行
    新規アイコン→Java→クラス
    パッケージにtest8.sample.serviceを入力
    名前にEditServiceを入力、完了をクリック。

    以下のサンプルソースを作成
    EditService.java
    package test8.sample.service;

    import test8.sample.model.Person;

    public interface EditService {

        Person getPerson();

        void savePerson(Person personBean);

    }

    EditServiceInMemory.javaの作成 クラスの作成
    (プロジェクト名)\src\main\javaフォルダをクリックし以下を実行
    新規アイコン→Java→クラス
    パッケージにtest8.sample.serviceを入力
    名前にEditServiceInMemoryを入力、完了をクリック。

    以下のサンプルソースを作成
    EditServiceInMemory.java
    package test8.sample.service;

    import test8.sample.model.Person;

    /**
    * Implement Services needed to edit and save
    * a Person object's state.  In this implementation
    * the Person object's state is stored in memory
    */
    public class EditServiceInMemory implements EditService {

        private static final Person person;
        private static final String[] carModels = {"Ford", "Nissan"};

        static {
            person = new Person();
            person.setFirstName("Bruce");
            person.setLastName("Phillips");
            person.setSport("basketball");
            person.setGender("not sure");
            person.setResidency("KS");
            person.setOver21(true);
            person.setCarModels(carModels);
            person.setPreferredCarModel("");
        }

        public Person getPerson() {
            return EditServiceInMemory.person;
        }

        public void savePerson(Person personBean) {
            EditServiceInMemory.person.setFirstName(personBean.getFirstName());
            EditServiceInMemory.person.setLastName(personBean.getLastName());
            EditServiceInMemory.person.setSport(personBean.getSport());
            EditServiceInMemory.person.setGender(personBean.getGender());
            EditServiceInMemory.person.setResidency(personBean.getResidency());
            EditServiceInMemory.person.setOver21(personBean.isOver21());
            EditServiceInMemory.person.setCarModels(personBean.getCarModels());
            EditServiceInMemory.person.setPreferredCarModel(personBean.getPreferredCarModel());
        }

    }

    EditAction.javaの作成
    クラスの作成
    (プロジェクト名)\src\main\javaフォルダをクリックし以下を実行
    新規アイコン→Java→クラス
    パッケージにtest8.sample.actionを入力
    名前にEditActionを入力、完了をクリック。

    以下のサンプルソースを作成
    EditAction.java
    package test8.sample.action;

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;

    import org.apache.struts2.ActionSupport;
    import org.apache.struts2.interceptor.parameter.StrutsParameter;

    import test8.sample.model.Person;
    import test8.sample.model.State;
    import test8.sample.service.EditService;
    import test8.sample.service.EditServiceInMemory;

    /**
    * Acts as a controller to handle actions
    * related to editing a Person.
    */
    public class EditAction extends ActionSupport {

        private final EditService editService = new EditServiceInMemory();

        private Person personBean;

        private final String[] sports = {"football", "baseball", "basketball"};

        private final String[] genders = {"male", "female", "not sure"};

        private final String[] carModelsAvailable = {"Ford", "Chrysler", "Toyota", "Nissan"};

        public String execute() throws Exception {
            editService.savePerson(getPersonBean());
            return SUCCESS;
        }

        public String input() throws Exception {
            setPersonBean(editService.getPerson());
            return INPUT;
        }

        @StrutsParameter(depth = 1)
        public Person getPersonBean() {
            return personBean;
        }

        public void setPersonBean(Person person) {
            personBean = person;
        }

        public List getSports() {
            return Arrays.asList(sports);
        }

        public List getGenders() {
            return Arrays.asList(genders);
        }

        public List getStates() {
            List states = new ArrayList<>();
            states.add(new State("AZ", "Arizona"));
            states.add(new State("CA", "California"));
            states.add(new State("FL", "Florida"));
            states.add(new State("KS", "Kansas"));
            states.add(new State("NY", "New York"));

            return states;
        }

        public String[] getCarModelsAvailable() {
            return carModelsAvailable;
        }
    }

    2)JSPファイルの作成
    (プロジェクト名)\webapp直下に作成
    webappフォルダをクリックし以下を実行
    新規アイコン→Web→JSPファイル
    ファイル名にindex.jspと入力。
    新規JSPファイル(html5)を選択し、完了をクリック。

    以下のサンプルソースを作成
    index.jsp
    <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html>
    <html charset="UTF-8">
    <head>
      <s:head/>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Struts 2 Form Tags - Welcome</title>
    </head>
    <body>
    <h1>Welcome To Struts 2!</h1>

    <p><a href='<s:url action="editInput" namespace='' />'>Edit your information</a></p>

    </body>
    </html>

    同様に、以下のサンプルソースを作成
    edit.jsp
    <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html>
    <html charset="UTF-8">
    <head>
      <s:head/>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Struts 2 Form Tags - Edit Person</title>
    <style>
    .tdLabel {text-align:left; vertical-align:top; }
    </style>
    </head>
    <body>
    <h1>Update Information</h1>

    <p>Use the form below to edit your information.</p>

    <s:form action="save" method="post">
      <s:textfield labelSeparator=" " key="personBean.firstName"/>
      <s:textfield labelSeparator=" " key="personBean.lastName"/>
      <s:select labelSeparator=" " key="personBean.sport" list="sports"/>
      <s:radio labelSeparator=" " key="personBean.gender" list="genders"/>
      <s:select labelSeparator=" " key="personBean.residency" list="states" listKey="stateAbbr" listValue="stateName"/>
      <s:checkbox labelSeparator=" " key="personBean.over21"/>
      <s:checkboxlist labelSeparator=" " key="personBean.carModels" list="carModelsAvailable"/>
      <s:radio labelSeparator=" " name="personBean.preferredCarModel" label="Status" list="carModelsAvailable"/>

      <s:submit key="submit"/>
    </s:form>

    </body>
    </html>

    同様に、以下のサンプルソースを作成
    thankyou.jsp
    <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html>
    <html charset="UTF-8">
    <head>
      <s:head/>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
      <title>Update Successful</title>
    </head>
    <body>

    <h1>Updated Information</h1>

    <p>Your information: <s:property value="personBean"/></p>

    <p><a href="<s:url action='index' />">Return to home page</a>.</p>

    </body>
    </html>

    3)XMLファイル
    struts.xmlファイル
    (プロジェクト名)\src\main\javaフォルダの下に作成
    ファイル名にstruts.xmlと入力し、完了をクリック。
    以下のXMLファイルを作成。
    struts.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 6.0//EN"
        "http://struts.apache.org/dtds/struts-6.0.dtd">

    <struts>

      <constant name="struts.devMode" value="true"/>
      <constant name="struts.allowlist.packageNames" value="test8.sample" />

      <package name="test8" extends="struts-default">

        <default-action-ref name="index"/>

        <!-- If no class attribute is specified the framework will assume success and
        render the result index.jsp -->
        <!-- If no name value for the result node is specified the success value is the default -->
        <action name="index">
          <result>/index.jsp</result>
        </action>

        <action name="editInput" class="test8.sample.action.EditAction" method="input">
          <result name="input">/edit.jsp</result>
        </action>

        <action name="save" class="test8.sample.action.EditAction" method="execute">
          <result name="success">/thankyou.jsp</result>
          <result name="input">/edit.jsp</result>
        </action>

      </package>

    </struts>

    log4j2.xmlファイル
    (プロジェクト名)\src\main\javaフォルダの下に作成
    同様に以下のXMLファイルを作成。
    log4j2.xmlファイル
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration>
      <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
          <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
        </Console>
      </Appenders>
      <Loggers>
        <Logger name="org.apache.struts2" level="info"/>
        <Logger name="test8.sample" level="debug"/>
        <Root level="warn">
          <AppenderRef ref="STDOUT"/>
        </Root>
      </Loggers>
    </Configuration>

    web.xmlファイル
    (プロジェクト名)\src\main\webapp\WEB-INFフォルダの下に作成
    以下のXMLファイルを編集。
    web.xmlファイル
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

      <display-name>Form Tags</display-name>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>

      <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>

    </web-app>

    4)propertiesファイル
    EditAction.properties
    (プロジェクト名)\src\main\java\test8\sample\actionフォルダをクリックし以下を実行
    新規アイコン→一般→ファイル
    名前にEditAction.propertiesを入力、完了をクリック。
    以下の内容で作成
    personBean.firstName=First name
    personBean.lastName=Last name
    personBean.sport=Favorite sport
    personBean.gender=Gender
    personBean.residency=State resident
    personBean.over21=21 or older
    personBean.carModels=Car models owned
    personBean.preferredCarModels=Preferred car model
    submit=Save Changes

  5. ビルドが終了したら、プロジェクトのトップにマウスカーソルを移動、実行ボタンをクリックしTomcatを起動する
    以下にブラウザでアクセス(自動でブラウザが起動しアクセスする)
    http://localhost:8080/test8/

    実行結果



    サンプルを終了させたい場合、サーバービューでサーバーを停止ボタンをクリックしTomcatを終了させます

  6. プロジェクトが必要なくなったら、閉じておきます。
    Serversのプロジェクトは、Tomcatのことなので閉じてはいけません。

参考1 getter/setterについて

modelで、setメソッドやgetメソッド(getter/setter)を作成する場合、Eclipseに簡単に作成する機能があります。
  1. 変数を定義する

  2. 右クリックで「ソース」の「getterおよびsetterの生成」をクリック

  3. 作成するgetterおよびsetterを選択し、「生成」ボタンをクリック
    このとき「メソッド・コメントの生成」をチェックしておくと、コメントも合わせて生成されます。

  4. 実行例

参考2

Javadoc(API)やチュートリアルなど参考URLを紹介します
以上