8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Struts2入門(2023年最新版)

Last updated at Posted at 2023-06-06

はじめに

お疲れ様です! @Keichan_15 です。

業務の関係上Struts2を勉強する機会があったんですが、導入に際して参考となる資料が古いモノばかりでかなり時間を要しました。 レガシー is レガシー
今後Struts2を導入してWebアプリケーション開発を行う方々の助けになればと思い、こちらの記事執筆に至ります。

ちなみに、Struts2の導入でおそらく一番有名であろう記事はこちらではないかなと。

実は私も参考にしてたのですが、何せ5年前の内容なので今のバージョンと比較すると所々違う箇所があるんですよね…。手探り状態で何とか導入できたのでその備忘録です。

という訳で Hello World を出力できるまでを目標に行っていきましょう!

eclipse導入

今回使用する統合開発環境は eclipse になります。 筆者はVSCodeしか勝たんニキ
お馴染みですね。Java好きには。

上記サイトより日本語版eclipseを導入します。
Pleiades All in One ダウンロードEclipse 2023 を選択します。

image.png

続いて今回はJavaを使用するため、JavaのEditionを選択してください。OSによってダウンロードボタンが異なりますのでそちらはご注意を。

image.png

exeがダウンロードできると思いますので、こちらはよしなにセットアップして頂ければ大丈夫です。

ちなみにexeはzip化された状態でダウンロードされます。そのままそのzipファイルを開くとeclipse側でzipファイルを解凍してくれます。
以下のような感じです。 解凍直後に撮ったので中途半端

image.png

解凍が完了したらeclipseを起動してください。以下の画面が出ればeclipseの導入は完了です!

ちなみに左上のタグ部分に パッケージ・エクスプローラープロジェクト・エクスプローラー が選択できる箇所があります。

これは プロジェクト・エクスプローラー にしておいてください。

image.png

ちなみにeclipseのバージョンは 4.27.0 でした。ここは誤差の範囲なので気にしなくて大丈夫です。
image.png

プロジェクトの作成

続いてプロジェクトを作成します。この流れに関しては冒頭で紹介した こちら2.1. Eclipseプロジェクトの作成 を確認して頂ければ特段問題有りません。
動的Webプロジェクトの作成から始めて下さい。

ただ、進めていくと若干表記が異なる箇所が存在していると思います。
よってここからの説明は、上記の記事執筆当時のバージョン(4.4)と現バージョン(4.27.0)で 差異が起きている箇所のみ 列挙していきます。

記事の本文を引用という形で記載し、その下に現バージョンでの画面表記・変更方法を記載しますので、比較しながら見進めていくことをおススメします。

2.1. Eclipseプロジェクトの作成

差異①

③フォルダーの追加で「resources」フォルダを追加して次へ進みます。

記事中では ビルド・パス上のソース・フォルダーsrc となっていますが、現バージョンでは src\main\java に表記が変わっています。現段階では特にこれといって変更する必要はありませんが念のため。

image.png

差異②

web.xmlデプロイメント記述子の生成にチェック入れ、完了します。

web.xmlデプロイメント記述子の生成にチェックを入れるのは変わらないのですが、おそらく コンテンツ・ディレクトリー のデフォルトは src/main/webapp になっていると思います。
私はここを WebContent に変更し、記事と同様のディレクトリ構成にしました。

ただこちらのディレクトリ構成はデフォルトのままでも問題無いです。Struts2の参考となる資料や記事のディレクトリ構成がこの WebContent のバージョンが多く、感覚的に分かりやすいといった話ですね。

ちなみに、コンテキスト・ルートが Struts2 となっていますが、これはプロジェクト作成時の名前を Struts2オリジナルで命名 したからです。記事通りであれば Struts2HelloWorld になっているはず。。 シンプルに名前が長かったので省略した

  • 変更前
    image.png
  • 変更後
    image.png

これでプロジェクト作成は完了です!次にStrutsの導入をしていきます。

Strutsの導入

こちら からStrutsをダウンロードできます。

本記事執筆時点での最新版は 2.5.30 でした。
ちなみに一番上に 6.1.2 とあり、説明にも、

Struts 6.1.2 is the "best available" version of Struts in the 2.5 series.

と書いているのですが、 今回は選びません。 2.5.30 を選んでください。別途調査はする予定。動くなら安定版の方が良いとは思うんですけど。

image.png

Struts 2.5.30struts-2.5.30-all.zip を選択してStrutsをダウンロードすれば、後の流れは記事と同様です。おそらく ここ 辺りからがStruts導入の章だと思います。

ちなみにここに関しても記事と現バージョンで差異あります。ありまくりです。
同様に以下列挙していきます。

2.2.1. Struts2のダウンロード

差異①

「log4j-core-2.9.1.jar」を別にダウンロードしておいてください。

これはどこからダウンロードするのか問題 。そうなんです。書いてないんですよね(笑)

結論、Maven repositoryから引っ張ってこれる ようです。リンクは こちら です。

まず、log4j-core-○.○.○.jar についてですが、本記事で紹介したStruts2.5.30をダウンロードした場合、libに格納されている log4j-apiのjarのバージョンは 2.12.4 になるはずです。
ここまでくるとシンプルで、後はlog4j-core-○.○.○.jarの○の部分に2.12.4を入れて検索すると、Maven Repoちゃんが出てきてくれるって内容ですね。

image.png

こちらのサイト内にある表の真ん中あたりに Files という項目があると思います。こちらのjarファイルをダウンロードすればOKです。

ダウンロードした log4j-core-○.○.○.jar がlibの log4j-api-○.○.○.jar の数字と一致しているかどうかを確認してください。

以下、Struts2.5.30をダウンロードした場合のjarファイルを表にまとめておきました。不足のjarファイルはMaven repositoryのリンクを備考に添付しています。ご参照ください。

後は元記事同様、以下のjarファイルを WebContent/WEB-INF/lib にぶち込みます。

File Name 備考
commons-fileupload-1.4.jar
commons-io-2.6.jar
commons-lang-2.4.jar
commons-lang3-3.8.1.jar
commons-logging-1.2.jar
freemarker-2.3.31.jar
javassist-3.20.0-GA.jar
log4j-api-2.12.4.jar
log4j-core-2.12.4.jar repository link
ognl-3.1.29.jar
struts2-core-2.5.30.jar
xmlpull-1.1.3.1.jar
xpp3_min-1.1.4c.jar repository link
xstream-1.4.17.jar

ライブラリの配置が完了したら、次は設定ファイルの配置に移りましょう。

設定ファイル配置

struts.xmllog4j2.xmlの記載は元記事と同様です。コピペ用に以下に各ファイルのコードを記載します。

struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="default" extends="struts-default">
        <action name="hello" class="sample.HelloWorldAction" method="execute">
            <result name="success">/view/sample/HelloWorld.jsp</result>
        </action>
    </package>
</struts>
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<Configuration status="off">
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout>
                <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}], %-5p, %t, %c, %m%n</pattern>
            </PatternLayout>
        </Console>
        <RollingFile name="FILE" fileName="./log/appLog.log" filePattern="appLog-%d{yyyy-MM-dd}-%i.log">
            <TimeBasedTriggeringPolicy />
<!--            <SizeBasedTriggeringPolicy size="100MB" /> -->
            <DefaultRolloverStrategy max="3"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="DEBUG">
            <AppenderRef ref="STDOUT" level="INFO"/>
<!--            <AppenderRef ref="FILE" /> -->
        </Root>
    </Loggers>
</Configuration>

また、元記事では軽く触れている以下の struts.properties についても掲載しておきます。

これは必要ありませんが、「struts.properties」というファイルを同フォルダに配置し、「struts.ui.theme=simple」と記載しておくとStruts2による自動スタイルシートタグ生成が抑制できるので便利です。

struts.properties
struts.ui.theme=simple

構成(現時点)

★Application root(Struts2)
├─.settings
├─build
│  └─classes ※resourcesに作成したものが自動生成される
│          log4j2.xml
│          struts.properties
│          struts.xml
│
├─resources
│      log4j2.xml
│      struts.properties
│      struts.xml
│
├─src
│  └─main
│      └─java
│
└─WebContent
    ├─META-INF
    │     MANIFEST.MF
    │
    ├─WEB-INF
    │  │  web.xml
    │  │ 
    │  └─lib
    │            commons-fileupload-1.4.jar	
    │            commons-io-2.6.jar	
    │            commons-lang-2.4.jar	
    │            commons-lang3-3.8.1.jar	
    │            commons-logging-1.2.jar	
    │            freemarker-2.3.31.jar	
    │            javassist-3.20.0-GA.jar	
    │            log4j-api-2.12.4.jar	
    │            log4j-core-2.12.4.jar
    │            ognl-3.1.29.jar	
    │            xmlpull-1.1.3.1.jar	
    │            xpp3_min-1.1.4c.jar
    │            xstream-1.4.17.jar
    │
    │  .classpath
    │  .project

Topページ作成 & Action実装

Topページである index.jsp については元記事通りに進めていけば問題無いです。

index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Struts2でHelloWorld</title>
    </head>
    <body>
        <s:form action="hello">
            <s:textfield name="name" />
            <s:submit value="HelloWorldページへ行く" />
        </s:form>
    </body>
</html>

問題は次のAction実装です。
元記事では src 配下に HelloWorldAction を置くと書いていますが、現行バージョンでクラスファイルを作成すると以下のような画面が表示されます。
ソース・フォルダのデフォルト参照先が Application root/src/main/java になっているんですね。

image.png

ここで僕は躓きました。
記事であれば Application root/src になっているので、クラスファイルの配置先を src 配下に置くようにソース・フォルダーを弄ったんですよね。これが間違いで一生アクションを呼び出せない現象に陥りました。

ここは デフォルトのソースフォルダーで問題無し Application root/src/main/java です!
以下のような感じ~。

image.png

作成に成功すると build/classes/sampleHelloWorldAction.class が生成されます。

ちなみに HelloWorldAction.java は元記事と記述に差異はありません。

HelloWorldAction.java
package sample;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class HelloWorldAction {

    private Logger logger = LogManager.getLogger(HelloWorldAction.class);
    private String name;

    public String execute() {
        logger.info("入力されたパラメータは「{}」です。", name);
        return "success";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

遷移先実装

こちらも元記事と… (以下略

HelloWorld.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Hello Struts2 world!</title>
    </head>
    <body>
        Hello Struts2 world, <s:property value="name" />さん
    </body>
</html>

アプリケーション設定更新

この辺りも特に差異有りません。

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>Struts2HelloWorld</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>

最終ツリー

最終的なディレクトリ構造は以下になります。
まあまあ変わってる…?これは分からん。

★Application root(Struts2)
├─.settings
├─build
│  └─classes ※resourcesに作成したものが自動生成される
│      │    log4j2.xml
│      │    struts.properties
│      │    struts.xml
│      │
│      └─sample ※src/main/javaで作成されたものが自動生成される
│            HelloWorldAction.class
│
├─resources
│      log4j2.xml
│      struts.properties
│      struts.xml
│
├─src
│  └─main
│      └─java
│          └─sample
│                HelloWorldAction.java
│
└─WebContent
    ├─META-INF
    │     MANIFEST.MF
    │
    ├─WEB-INF
    │  │  web.xml
    │  │ 
    │  └─lib
    │            commons-fileupload-1.4.jar	
    │            commons-io-2.6.jar	
    │            commons-lang-2.4.jar	
    │            commons-lang3-3.8.1.jar	
    │            commons-logging-1.2.jar	
    │            freemarker-2.3.31.jar	
    │            javassist-3.20.0-GA.jar	
    │            log4j-api-2.12.4.jar	
    │            log4j-core-2.12.4.jar
    │            ognl-3.1.29.jar	
    │            xmlpull-1.1.3.1.jar	
    │            xpp3_min-1.1.4c.jar
    │            xstream-1.4.17.jar
    │
    │  index.jsp
    │  .classpath
    │  .project

これで実装と各種諸々の設定が終わりました。お疲れ様です。

Tomcat導入

サーブレットコンテナであるTomcatのPluginを導入します。今回はEclipseマーケットプレースからぶち込みます。
ヘルプ > Eclipseマーケットプレース を選択します。

検索欄に tomcat と入力すると、 Eclipse Tomcat Plugin 9.1.4 が出てきます。
こちらをインストールしてください。

image.png

ライセンスに同意して 完了 をクリック。

image.png

再起動が入るので 今すぐ再起動 をクリック。

image.png

これで導入が完了しました。続きは 元記事 通りに進めていけばOKなのですが、以下の点だけ現バージョンと違いがあるので補足します。

②表示されたサーバー・ビューの余白を右クリック > 新規 > サーバーを選択し、新規サーバーダイアログを表示します。
「Tomcat v8.0 サーバー」を選択し、次へ進みます。

まずは手順通り、サーバービューの余白 右クリック > 新規を選択すると、以下の画面が表示されます。

image.png

数あるフォルダの内、Tomcatサーバーが格納されているフォルダは Apache になります。

image.png

次に、記事中では Tomcat v8.0 を選択していますが、v8.0は元記事のようなリソース遷移画面では無くなっており、以下のような画面が表示されます。

image.png

色々試してみたところ、 v8.5 を選択すると記事のようなリソース遷移画面が表示される & 問題無くTomcatが起動します。

image.png

image.png

以下のように localhostのTomcat8(Java8) が追加されていると完璧です!

image.png

あとは起動確認して頂ければ…!
http://localhost:8080/Struts2/(自分の場合) に接続して以下のような画面が表示されればOKです!お疲れ様でした。

image.png

image.png

参考資料

おわりに

参考資料が少な過ぎて難を極めたStruts2導入でした。
せっかくなのでSpring frameworkも触りたいですね。
それではまた!!:v:

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?