LoginSignup
136
176

【超初心者向け】Struts2超入門 - 2018年版

Last updated at Posted at 2018-02-18

はじめに

レガシーという人もいるかも知れませんが、Struts2の入門編の記事です。
最近ではクライアントサイドの新しい技術も発展し、Struts2はおろか、サーバサイドの技術そのものがレガシーという人もいるかも知れません。

しかしながら、現役で動いているものにぶつかってしまったときは、どうしても理解が必要なものです。
筆者は最近そんなパターンにぶつかって、頑張って勉強しました。

HelloWorldを作ろうとした時、中々すべてをカバーする文献が見つからず苦労したので、その時の備忘を兼ねて今回の記事を執筆します。

Struts2は、レガシーと言われても、割とバージョンアップが盛んなようで、まだ新しくなり続けています。
一旦、今回の記事執筆時点で最新のバージョンを使用して、Struts2の開発環境が構築できるものを、HelloWorldを通じて紹介していきたいと思います。

1. Strutsとは

Javaで実装するMVCモデルを採用したWebアプリケーションフレームワークです。
MVCモデルとは、Model(データ)、View(画面)、Controller(業務ロジック)を分離して実装しようという考え方です。
ただし、Struts2にはVとCを分離する機能はあっても、MをCから分離する機能は提供されていないので、そこは別にORマッパなどを導入して実現することが多いです。

1.1. Struts2の生い立ち

以前、Strutsというフレームワークが存在し、一世を風靡した時代がありましたが、Struts2は根本的には別物です。
元々の開発経緯も全く別物で、「WebWork2」という名称で開発されていて、Strutsのサポート終了とともに、その名称がStruts2に変更されたというもののようです。

Struts2は現在もまだサポートが続いており、新しいバージョンも割と頻繁にリリースされています。

1.2. Struts2導入のメリット

少し話がそれましたが、企業システムなど、大規模なWebアプリケーションにStruts2を導入することで飛躍的に生産性が向上できます。
また、Struts2に限ったことではありませんが、フレームワークを導入することで、開発者のクセによる実装方針の違いなどを吸収し、平準化すことができます。
ただ、導入に手間がかかるので、小規模の開発には向かないと筆者は考えています。

2. 開発環境構築

これから、Struts2でHelloWorldを実現するための、開発環境を構築していきます。
構築方法には、3通りあります。

  1. 自力で構築
  2. Mavenで構築
  3. 公式の空プロジェクトを使用

今回は、自力で構築します。

2は、まずMavenを勉強する必要があることと、環境によっては使用できないこともあります。
3は、使おうとしても、デフォルトの状態からエラーで起動できないので、使うくらいなら自力で構築したほうが早いです。
※個人的にはちゃんとエラーのないものを提供してほしいと思ってます…

よって、手を動かして覚えることも兼ね、自力で構築しましょう!

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

筆者は基本開発には統合開発環境を使用します。
Java系の開発では基本Eclipseを使用すると思いますが、今回もEclipseを使用します。

筆者が使用している環境は「Eclipse4.4(Luna)」です。
Eclipseのバージョンは同じでなくてもできますので、読者の方々は手近なものを使用してください。

①ファイル > 新規 > その他 > Web > 動的Webプロジェクトを選択し次へ進みます。
p1.jpg

②次の情報を入力して次へ進みます。

設定項目 設定値
プロジェクト名 Struts2HelloWorld
※プロジェクト名は自由に決めていただいて構いません
ターゲット・ランタイム Tomcat8 (Java8)
動的webモジュールバージョン 3.1
構成 Tomcat8 (Java8)デフォルト構成
p2.jpg

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

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

⑤次の画像のようにプロジェクトができれば、プロジェクト作成完了です。
p5.JPG

2.2. Struts2の導入

作成したプロジェクトにStruts2を導入します。

2.2.1. Struts2のダウンロード

こちらからStruts2をダウンロードします。
本記事執筆時点で最新は、「2.5.14.1」のようです。
HelloWorldでは使用しませんが、サンプルアプリケーション付きの「struts-2.5.14.1-all.zip」をダウンロードします。
また、後で必要になるので、「log4j-core-2.9.1.jar」を別にダウンロードしておいてください。
こちらでダウンロードするjarファイルは、log4j-apiとバージョンを合わせておいてください。
p6.jpg

「struts-2.5.14.1-min-lib.zip」は最少構成でのStruts2の空プロジェクトです。
筆者の環境では、最初からエラーで起動できませんでした。
解決するのも面倒くさかったので、筆者は最初から自力で構築しましたが、こちらをうまく使えるようにできたというかたは、コメントいただけると幸いです。

2.2.2. 必要ライブラリの配置

プロジェクトにStruts2を導入します。
ダウンロードしたstruts-2.5.14.1-all.zipを解凍し、libフォルダから以下のjarファイルを「プロジェクトルート/Struts2HelloWorld/WebContent/WEB-INF/lib」フォルダにコピーします。

ファイル名 備考
commons-fileupload-1.3.3.jar
commons-io-2.5.jar
commons-lang-2.4.jar
commons-lang3-3.6.jar
commons-logging-1.1.3.jar
freemarker-2.3.26-incubating.jar
javassist-3.20.0-GA.jar
log4j-api-2.9.1.jar
log4j-core-2.9.1.jar 別にダウンロードしたjarファイルです。
log4j-apiとバージョンを合わせてください。
ognl-3.1.15.jar
struts2-core-2.5.14.1.jar
xmlpull-1.1.3.1.jar
xpp3_min-1.1.4c.jar
xstream-1.4.10.jar

こちらがStruts2を動かす上での最少ライブラリ構成です。
p7.JPG

2.2.3. 設定ファイルの配置

「/Struts2HelloWorld/resources」にStruts2の設定ファイルである、「struts.xml」を作成します。

余談ですがStruts2では、ゼロコンフィギュレーションと言って、XMLによる設定ファイルはなくてもアプリケーションを実装できます。
しかし、開発者はXMLが好きなのかStruts2を導入していても、筆者が見てきたケースは大体XMLが書いてあります。
アプリケーションの設定が、このファイルだけみれば分かるという利点はあるものの、わざわざ設定ファイルを書く手間を考えれば、ないものはないに越したことはないと筆者は考えています。

特にStruts2では、冒頭でも述べたとおり、SpringやORマッパといったほかのフレームワークと組み合わせて使うことが多く、フレームワークごとにXMLによる設定ファイルが必要なので、管理すべきXMLがむちゃくちゃ増えます。
その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">
		<!-- Hello worldのサンプルアクション -->
		<action name="hello" class="sample.HelloWorldAction" method="execute">
			<result name="success">/view/sample/HelloWorld.jsp</result>
		</action>
	</package>
</struts>

もう一つ、ログ出力ライブラリである「log4j2」の設定ファイル「log4j2.xml」を配置します。

log4j2.xmlの記載内容(コメントの部分は任意に復活させてください)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<Configuration status="off">
	<!-- ログに使用するAppenderの設定 -->
	<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.ui.theme=simple」と記載しておくとStruts2による自動スタイルシートタグ生成が抑制できるので便利です。

2.3 構成の確認

ここまでで、Struts2の導入が完了しました。
結構な量の作業をしたので、構成したプロジェクトのツリーを記載します。
プロジェクトが以下のツリーになっていれば開発環境の構築は完了です。

プロジェクトのツリー構成
アプリケーションルート
├─src
├─resources
│      log4j2.xml
│      struts.properties
│      struts.xml
│
├─build
│  └─classes    ※ここにはソース・フォルダに配置した資材と同じものが自動で生成されます
│          log4j2.xml
│          struts.properties
│          struts.xml
└─WebContent
    ├─META-INF
    │      MANIFEST.MF
    │
    └─WEB-INF
        │  web.xml
        │
        └─lib
                commons-fileupload-1.3.3.jar
                commons-io-2.5.jar
                commons-lang-2.4.jar
                commons-lang3-3.6.jar
                commons-logging-1.1.3.jar
                freemarker-2.3.26-incubating.jar
                javassist-3.20.0-GA.jar
                log4j-api-2.9.1.jar
                log4j-core-2.9.1.jar
                ognl-3.1.15.jar
                struts2-core-2.5.14.1.jar
                xmlpull-1.1.3.1.jar
                xpp3_min-1.1.4c.jar
                xstream-1.4.10.jar

3. アプリケーションの実装

開発環境の構築ができましたので、ここからはアプリケーション本体の実装に入っていきます。

3.1. トップページの準備

アプリケーションアクセス時のトップページを準備します。
今回はJSPを使って実装します。

WebContentを右クリック > 新規 > JSPでダイアログを開きます。
ファイル名に「index.jsp」と入力して完了します。
p8.jpg

index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!-- Struts2のタグライブラリを使用可能にする -->
<%@ taglib prefix="s" uri="/struts-tags"%>
<!-- タイプ宣言はHTML5のものを使用する -->
<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Struts2でHelloWorld</title>
	</head>
	<body>
		<!-- 入力フォームはStruts2のタグを使用します -->
		<s:form action="hello">
			<s:textfield name="name" />
			<s:submit value="HelloWorldページへ行く" />
		</s:form>
	</body>
</html>

3.2. Actionの実装

Struts2において、JSPからサブミットされた際など、Webアプリケーションの処理を担うクラスをActionと呼びます。
Actionや、遷移先のページは、struts.xmlに定義しているのですが、その説明は後程行うので、現時点では、下記の通り実装してください。

srcフォルダを右クリック > 新規 > クラスから、次の情報を入力して完了してください。

入力項目 入力値
パッケージ sample
名前 HelloWorldAction

p9.jpg

HelloWorldAction
package sample;

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

/**
 * [HelloWorldのアクションクラス]<br>
 * <br>
 * @author tarosa0001
 */
public class HelloWorldAction {
	/** ロガー */
	private Logger logger = LogManager.getLogger(HelloWorldAction.class);

	/** 名前 */
	private String name;

	/**
	 * [アクション実行処理]<br>
	 * HelloWorldを出力する処理を実行する。<br>
	 * 実行するメソッドは、struts.xmlで指定したメソッド名を使用して実装する。<br>
	 * Struts2ではアクションの処理結果でページの遷移先を決定するが、
	 * 今回は"success"の固定文字列を返却する。<br>
	 * <br>
	 * @return
	 */
	public String execute() {
		logger.info("入力されたパラメータは「{}」です。", name);
		return "success";
	}

	/**
	 * [名前取得処理]<br>
	 * 名前を取得します。<br>
	 * Struts2がフォームに入力された値をパラメータとしてする際、
	 * getterを使用するため、パラメータとして使用したい情報は、
	 * Actionクラスのプロパティとして宣言しておき、getterを用意する。
	 * <br>
	 * @return 名前
	 */
	public String getName() {
		return name;
	}

	/**
	 * [名前設定処理]<br>
	 * 名前を設定します。<br>
	 * getter同様、ページ間で受け渡したい値はsetterを用意しておく。<br>
	 * <br>
	 * @param name 名前
	 */
	public void setName(String name) {
		this.name = name;
	}
}

3.3. 遷移先の実装

トップページのボタンを押した際の遷移先を実装します。
WebContentディレクトリ内にview/sampleフォルダを作成し、そちらに遷移先ページを配置します。
配置ディレクトリ自体はWebContent内であればどこでもいいのですが、今回は上記ディレクトリとします。
トップページと同様の手順でsampleフォルダ内に「HelloWorld.jsp」を追加してください。

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>

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

ここまでで、アプリケーションの処理自体は実装完了です。
最後に、実装したアプリケーションがStruts2アプリケーションとして動作するための設定を行います。

プロジェクトのWEB-INF内に存在している「web.xml」を次のように変更してください。
Struts2というよりは、Webアプリケーション自体の基礎知識になるので、web.xml自体の説明は省略します。

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>
		<!-- アプリケーションルートであクセした時の表示ファイル設定 -->
		<!-- 必要はありませんが、今回はURLの入力間違いも防ぐため、index.jspのみとします。 -->
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

	<!-- Struts2のサーブレットフィルタ -->
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>

	<!-- URLに対して使用するフィルタの設定 -->
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

3.5. 実装の完了

web.xmlの設定も更新し、いよいよStruts2アプリケーションの実装完了です。
確認のため、最終的なツリーを記載します。

完成したプロジェクトのツリー
プロジェクト・ルート
├─src
│  └─sample
│          HelloWorldAction.java
│
├─resources
│      log4j2.xml
│      struts.properties
│      struts.xml
│
├─build
│  └─classes
│      │  log4j2.xml
│      │  struts.properties
│      │  struts.xml
│      │
│      └─sample
│              HelloWorldAction.class
│
└─WebContent
    │  index.jsp
    │
    ├─META-INF
    │      MANIFEST.MF
    │
    ├─view
    │  └─sample
    │          HelloWorld.jsp
    │
    └─WEB-INF
        │  web.xml
        │
        └─lib
                commons-fileupload-1.3.3.jar
                commons-io-2.5.jar
                commons-lang-2.4.jar
                commons-lang3-3.6.jar
                commons-logging-1.1.3.jar
                freemarker-2.3.26-incubating.jar
                javassist-3.20.0-GA.jar
                log4j-api-2.9.1.jar
                log4j-core-2.9.1.jar
                ognl-3.1.15.jar
                struts2-core-2.5.14.1.jar
                xmlpull-1.1.3.1.jar
                xpp3_min-1.1.4c.jar
                xstream-1.4.10.jar

4. 実行

さて、ここまでで実装と設定が完了しました。
いよいよ、実装したアプリケーションを動かします。

4.1. Tomcatの準備

Webアプリケーションを動作させるためのサーブレットコンテナを準備します。
今回は、Tomcatをサーブレットコンテナとして使用します。

①ウィンドウ > ビューの表示 > その他 > サーバを選択し、サービューを表示してください。
p10.jpg

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

③Struts2HelloWorldを追加して完了します
p12.jpg
※Struts2HelloWorldが追加できない場合、プロジェクトの作成に失敗している可能性があります。
プロジェクトの構成がTomcat8に対応しているか確認してください。

4.2. Tomcatの起動

Tomcatを起動します。
サーバー・ビューに追加されたTomcatを右クリックし、開始してください。
p13.jpg

以下のような文字列がコンソールに出力されます。
赤字で出てきますが、エラーではありません。

コンソールの出力内容 ※警告は無視してください。
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Struts2HelloWorld' did not find a matching property. [火 2 13 00:39:25 JST 2018]
情報: Server version:        Apache Tomcat/8.0.20 [火 2 13 00:39:25 JST 2018]
情報: Server built:          Feb 15 2015 18:10:42 UTC [火 2 13 00:39:25 JST 2018]
情報: Server number:         8.0.20.0 [火 2 13 00:39:25 JST 2018]
情報: OS Name:               Windows 7 [火 2 13 00:39:25 JST 2018]
情報: OS Version:            6.1 [火 2 13 00:39:25 JST 2018]
情報: Architecture:          amd64 [火 2 13 00:39:25 JST 2018]
情報: Java Home:             C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\eclipse\jre\jre [火 2 13 00:39:25 JST 2018]
情報: JVM Version:           1.8.0_40-b25 [火 2 13 00:39:25 JST 2018]
情報: JVM Vendor:            Oracle Corporation [火 2 13 00:39:25 JST 2018]
情報: CATALINA_BASE:         C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\sample\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 [火 2 13 00:39:25 JST 2018]
情報: CATALINA_HOME:         C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\tomcat\8 [火 2 13 00:39:25 JST 2018]
情報: Command line argument: -Dcatalina.base=C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\sample\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 [火 2 13 00:39:25 JST 2018]
情報: Command line argument: -Dcatalina.home=C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\tomcat\8 [火 2 13 00:39:26 JST 2018]
情報: Command line argument: -Dwtp.deploy=C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\sample\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps [火 2 13 00:39:26 JST 2018]
情報: Command line argument: -Djava.endorsed.dirs=C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\tomcat\8\endorsed [火 2 13 00:39:26 JST 2018]
情報: Command line argument: -Dfile.encoding=UTF-8 [火 2 13 00:39:26 JST 2018]
情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\eclipse\jre\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Users/Nakajima/Desktop/Personal/スキルアップ/pleiades/eclipse/jre/bin/../jre/bin/server;C:/Users/Nakajima/Desktop/Personal/スキルアップ/pleiades/eclipse/jre/bin/../jre/bin;C:/Users/Nakajima/Desktop/Personal/スキルアップ/pleiades/eclipse/jre/bin/../jre/lib/amd64;C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\java\8\bin;C:\gradle-4.0\bin;C:\app\Nakajima\product\11.2.0\dbhome_1\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOMM\Bluetooth Software\syswow64;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\Justsystems\JSLIB32\;C:\Program Files (x86)\Sony\VAIO Startup Setting Tool;C:\Program Files (x86)\Common Files\Sony Shared\FeliCaLibrary;C:\Program Files\Common Files\Sony Shared\FeliCaLibrary;C:\Program Files (x86)\Common Files\Sony Shared\FeliCaNFCLibrary;C:\Program Files\Common Files\Sony Shared\FeliCaNFCLibrary;C:\Program Files (x86)\GtkSharp\2.12\bin;C:\maven\bin;C:\Program Files\nodejs\v6.10.2\;C:\cygwin64\bin;C:\Users\Nakajima\AppData\Roaming\npm;C:\ProgramData\Oracle\Java\javapath;;C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\eclipse;;. [火 2 13 00:39:26 JST 2018]
情報: Initializing ProtocolHandler ["http-nio-8080"] [火 2 13 00:39:26 JST 2018]
情報: Using a shared selector for servlet write/read [火 2 13 00:39:26 JST 2018]
情報: Initializing ProtocolHandler ["ajp-nio-8009"] [火 2 13 00:39:26 JST 2018]
情報: Using a shared selector for servlet write/read [火 2 13 00:39:26 JST 2018]
情報: Initialization processed in 951 ms [火 2 13 00:39:26 JST 2018]
情報: サービス Catalina を起動します [火 2 13 00:39:26 JST 2018]
情報: Starting Servlet Engine: Apache Tomcat/8.0.20 [火 2 13 00:39:26 JST 2018]
情報: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [117] milliseconds. [火 2 13 00:39:26 JST 2018]
情報: Starting ProtocolHandler ["http-nio-8080"] [火 2 13 00:39:30 JST 2018]
情報: Starting ProtocolHandler ["ajp-nio-8009"] [火 2 13 00:39:30 JST 2018]
情報: Server startup in 4438 ms [火 2 13 00:39:30 JST 2018]

「Server startup~」と出れば起動完了です。

4.3. アプリケーションにアクセス

ブラウザを起動し、以下のURLを入力し、Webアプリケーションにアクセスします。
http://localhost:8080/Struts2HelloWorld」

すると、実装したindex.jspの内容が表示されます。
p14.jpg

4.4. HelloWorldページに遷移

では、ここまで長々と実装してきたHelloWorldを実行します。
テキストボックスに任意の値を入力し、「HelloWorldページへ行く」をクリックしましょう。

おめでとうございます!テキストボックスの入力値が受け継がれ、HelloWorldが表示できました!
p15.jpg

Actionにログを出力する処理を実装しているので、受け渡したデータはコンソールに出力しているログで確認できます。

5. アプリケーションの説明

皆様、お疲れ様でした。
ここまでで、HelloWorldの実装が完了しました。
ここからは、アプリケーションの説明をしていきます。

5.1. JSPとアクション

Struts2では、MVCモデルを採用しています。
多くの場合、View(画面)は、JSPを用いて実装し、JSPの各フォームやリンクなどの処理は、Javaを用いたクラスで実装します。

5.1.1. Action

Actionとは、Struts2での業務処理を行うクラスです。
JSPのフォームをサブミットしたとき、Struts2の機能により、Actionが呼び出されます。
どのフォームでどんなActionを行うかは、formタグとStruts.xmlに定義します。

今回、HelloWorldのActionは、ここで設定しています。

<!-- formタグのaction属性で実行するActionを指定します。 -->
<s:form action="hello">

Struts2では、JSPで使用できるタグライブラリが提供されており、Struts2を使用してアプリケーションを実装する場合、多くはこのStruts2提供のタグライブラリを使用します。
formをサブミットした時に使用するActionは、<s:form>タグの、action属性に指定し、Actionの具体的な設定は、Struts.xmlに記載します。
Struts.xmlについては、後述しますので、そちらで詳しく説明します。

5.1.2. 受け渡すデータ

画面上で入力したフォームなど、次の画面やActionクラスで使用するデータは、Actionクラスにプロパティとして保持します。
JSP上のタグに設定したname属性と一致する名称のプロパティを設定しておくと、Struts2の機能でフォームに対応したプロパティに値が設定されます。

今回はindex.jspで入力した名前しか受け渡していませんが、ページが大きくなると受け渡すデータが増えます。
そんな場合に、データを塊として保持するクラスが作りたい場合も出てくるでしょう。
そんな場合は、name属性に「.(ドット)」をつけて「クラス名.プロパティ名」の形式で記載します。

例:LoginInfoクラスのnameに値を設定する場合
<s:textfield name="LoginInfo.name" />

5.2. Struts.xml

Struts.xmlは、Struts2の動きを制御する設定ファイルです。
こちらには、先ほど説明したformタグでのActionの設定や、アプリケーションで使用する定数などを定義します。
定数については、少ししか触れていませんが、struts.propertiesにまとめて記載することも出来ます。

他にもいろんな設定がありますが、ここでではHelloWorldで使用したActionのみ説明します。
Struts.xml中、HelloWorldのActionの設定はここです。

HelloWorldのアクション設定箇所
<!-- Hello worldのサンプルアクション -->
<action name="hello" class="sample.HelloWorldAction" method="execute">
	<result name="success">/view/sample/HelloWorld.jsp</result>
</action>

Struts2では、Actionの名前、使用するクラス、メソッドを設定します。
定義したAction内に、Actionクラスからの戻り値によって、次の遷移先を定義します。
今回は、戻り値が"success"の場合しか定義していませんが、Action内の処理の結果によって遷移先を分けたい場合は、戻り値ごとに<result>タグを記載します。

遷移先のJSPは、WebContentをルート(/)として、それ以降のツリーを記載します。
遷移元のJSPからの相対パスでも設定できますが、ずれたりすることもあるので、アプリケーションルートからの絶対パスで記載する方がよいでしょう。

5.3. web.xml

web.xmlとは、Webアプリケーションの設定を記載するファイルですが、Struts2を使用する場合、Struts2用のサーブレットフィルタとマッピングを定義する必要があります。
こちらは特に変わったことをしない限り、上述したweb.xmlの内容から変わることはありません。

最後に

ここまでで、Struts2を使用したWebアプリケーションのサンプルと、アプリケーションの説明はすべてです。
今回はあくまでサンプルですので、本当に最少構成で実装しました。
新規で一からStruts2アプリケーションを構築することは中々ないかもしれませんが、他にもいろんな機能があるので、興味がある方は是非試してみてください。

EX. 参考Web

今回の記事を執筆するに当たり、以下に掲載するWebページを参考にさせていただきました。

・2014年度版 Eclipse + Struts2 による Java Web アプリ開発入門
http://www.cyokodog.net/blog/first-struts2/

136
176
8

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