Java-Struts2導入について
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
#contents
コミュニティ
ユーザ登録ログイン
F37fc642e7ac0bf345e6a0d28e497e68 @tarosa0001
2018年02月19日に更新
【超初心者向け】Struts2超入門 - 2018年版
JavaEclipseWebstruts2Servlet,JSP
2
* はじめに [#s08ac405]
レガシーという人もいるかも知れませんが、Struts2の入門編...
最近ではクライアントサイドの新しい技術も発展し、Struts2...
しかしながら、現役で動いているものにぶつかってしまった...
筆者は最近そんなパターンにぶつかって、頑張って勉強しま...
HelloWorldを作ろうとした時、中々すべてをカバーする文献...
Struts2は、レガシーと言われても、割とバージョンアップが...
一旦、今回の記事執筆時点で最新のバージョンを使用して、S...
* 1. Strutsとは [#eee39380]
Javaで実装するMVCモデルを採用したWebアプリケーションフレ...
MVCモデルとは、Model(データ)、View(画面)、Controller(業...
ただし、Struts2にはVとCを分離する機能はあっても、MをCか...
** 1.1. Struts2の生い立ち [#pe731458]
以前、Strutsというフレームワークが存在し、一世を風靡した...
元々の開発経緯も全く別物で、「WebWork2」という名称で開...
Struts2は現在もまだサポートが続いており、新しいバージョ...
** 1.2. Struts2導入のメリット [#qdd34933]
少し話がそれましたが、企業システムなど、大規模なWebアプ...
また、Struts2に限ったことではありませんが、フレームワー...
ただ、導入に手間がかかるので、小規模の開発には向かないと...
* 2. 開発環境構築 [#f14b47d1]
これから、Struts2でHelloWorldを実現するための、開発環境...
構築方法には、3通りあります。
+ 1.自力で構築
+ 2.Mavenで構築
+ 3.公式の空プロジェクトを使用
今回は、自力で構築します。
2は、まずMavenを勉強する必要があることと、環境によっては...
3は、使おうとしても、デフォルトの状態からエラーで起動で...
※個人的にはちゃんとエラーのないものを提供してほしいと思...
よって、手を動かして覚えることも兼ね、自力で構築しましょ...
** 2.1. Eclipseプロジェクトの作成 [#aebea814]
筆者は基本開発には統合開発環境を使用します。
Java系の開発では基本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の導入 [#m2cb44e1]
作成したプロジェクトにStruts2を導入します。
*** 2.2.1. Struts2のダウンロード [#b6c9c7d5]
こちらからStruts2をダウンロードします。
本記事執筆時点で最新は、「2.5.14.1」のようです。
HelloWorldでは使用しませんが、サンプルアプリケーション付...
また、後で必要になるので、「log4j-core-2.9.1.jar」を別に...
p6.jpg
「struts-2.5.14.1-min-lib.zip」は最少構成でのStruts2の空...
筆者の環境では、最初からエラーで起動できませんでした。
解決するのも面倒くさかったので、筆者は最初から自力で構...
*** 2.2.2. 必要ライブラリの配置 [#hf4cdeef]
プロジェクトにStruts2を導入します。
ダウンロードしたstruts-2.5.14.1-all.zipを解凍し、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ファイルです...
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. 設定ファイルの配置 [#ld5d5a1c]
「/Struts2HelloWorld/resources」にStruts2の設定ファイル...
余談ですがStruts2では、ゼロコンフィギュレーションと言っ...
しかし、開発者はXMLが好きなのかStruts2を導入していても、...
アプリケーションの設定が、このファイルだけみれば分かると...
特にStruts2では、冒頭でも述べたとおり、SpringやORマッパ...
そのXML地獄から開発者を解放してくれるためのゼロコンフィ...
長くなりましたが、今回はより多くのケースに合わせ、設定フ...
コメントも一緒に記載していますが、今のところは読み飛ばし...
■struts.xmlの記載内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configur...
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- アクションのパッケージ定義 -->
<package name="default" extends="struts-default">
<!-- Hello worldのサンプルアクション -->
<action name="hello" class="sample.HelloWorldAc...
<result name="success">/view/sample/HelloWo...
</action>
</package>
</struts>
もう一つ、ログ出力ライブラリである「log4j2」の設定ファイ...
■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}], ...
</PatternLayout>
</Console>
<RollingFile name="FILE" fileName="./log/appLog....
<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」というファ...
** 2.3 構成の確認 [#ff1ec868]
ここまでで、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. アプリケーションの実装 [#nf0f48d4]
開発環境の構築ができましたので、ここからはアプリケーショ...
** 3.1. トップページの準備 [#y577dfa4]
アプリケーションアクセス時のトップページを準備します。
今回はJSPを使って実装します。
WebContentを右クリック > 新規 > JSPでダイアログを開き...
ファイル名に「index.jsp」と入力して完了します。
p8.jpg
■index.jsp
<%@ page language="java" contentType="text/html; charset...
<!-- Struts2のタグライブラリを使用可能にする -->
<%@ taglib prefix="s" uri="/struts-tags"%>
<!-- タイプ宣言はHTML5のものを使用する -->
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/ht...
<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の実装 [#td333f25]
Struts2において、JSPからサブミットされた際など、Webアプ...
Actionや、遷移先のページは、struts.xmlに定義しているので...
srcフォルダを右クリック > 新規 > クラスから、次の情報...
入力項目
入力値
パッケージ sample
名前 HelloWorldAciton
p9.jpg
■HelloWorldAciton
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(HelloWo...
/** 名前 */
private String name;
/**
* [アクション実行処理]<br>
* HelloWorldを出力する処理を実行する。<br>
* 実行するメソッドは、struts.xmlで指定したメソッド...
* Struts2ではアクションの処理結果でページの遷移先を...
* 今回は"success"の固定文字列を返却する。<br>
* <br>
* @return
*/
public String execute() {
logger.info("入力されたパラメータは「{}」です。"...
return "success";
}
/**
* [名前取得処理]<br>
* 名前を取得します。<br>
* Struts2がフォームに入力された値をパラメータとして...
* getterを使用するため、パラメータとして使用したい...
* Actionクラスのプロパティとして宣言しておき、gette...
* <br>
* @return 名前
*/
public String getName() {
return name;
}
/**
* [名前設定処理]<br>
* 名前を設定します。<br>
* getter同様、ページ間で受け渡したい値はsetterを用...
* <br>
* @param name 名前
*/
public void setName(String name) {
this.name = name;
}
}
** 3.3. 遷移先の実装 [#c9ce3f9f]
トップページのボタンを押した際の遷移先を実装します。
WebContentディレクトリ内にview/sampleフォルダを作成し、...
配置ディレクトリ自体はWebContent内であればどこでもいい...
トップページと同様の手順でsampleフォルダ内に「HelloWorld...
■HelloWorld.jsp
<%@ page language="java" contentType="text/html; charset...
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/ht...
<title>Hello Struts2 world!</title>
</head>
<body>
<!-- メッセージの間に渡されたデータを表示します...
Hello Struts2 world, <s:property value="name" />...
</body>
</html>
** 3.4. アプリケーション設定の更新 [#v09cef9d]
ここまでで、アプリケーションの処理自体は実装完了です。
最後に、実装したアプリケーションがStruts2アプリケーショ...
プロジェクトのWEB-INF内に存在している「web.xml」を次のよ...
Struts2というよりは、Webアプリケーション自体の基礎知識に...
■web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins...
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/java...
id="WebApp_ID" version="3.1">
<display-name>Struts2HelloWorld</display-name>
<welcome-file-list>
<!-- アプリケーションルートであクセした時の表示...
<!-- 必要はありませんが、今回はURLの入力間違いも...
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Struts2のサーブレットフィルタ -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filt...
</filter>
<!-- URLに対して使用するフィルタの設定 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
** 3.5. 実装の完了 [#z1dd3d1a]
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. 実行 [#b087b502]
さて、ここまでで実装と設定が完了しました。
いよいよ、実装したアプリケーションを動かします。
** 4.1. Tomcatの準備 [#yb58b492]
Webアプリケーションを動作させるためのサーブレットコンテ...
今回は、Tomcatをサーブレットコンテナとして使用します。
+ ①ウィンドウ > ビューの表示 > その他 > サーバを選択し...
p10.jpg
+ ②表示されたサーバー・ビューの余白を右クリック > 新規 ...
「Tomcat v8.0 サーバー」を選択し、次へ進みます。
p11.jpg
+ ③Struts2HelloWorldを追加して完了します
p12.jpg
※Struts2HelloWorldが追加できない場合、プロジェクトの作成...
プロジェクトの構成がTomcat8に対応しているか確認してくだ...
** 4.2. Tomcatの起動 [#b00626f4]
Tomcatを起動します。
サーバー・ビューに追加されたTomcatを右クリックし、開始し...
p13.jpg
以下のような文字列がコンソールに出力されます。
赤字で出てきますが、エラーではありません。
■コンソールの出力内容 ※警告は無視してください。
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Con...
情報: Server version: Apache Tomcat/8.0.20 [火 2 ...
情報: Server built: Feb 15 2015 18:10:42 UTC [...
情報: Server number: 8.0.20.0 [火 2 13 00:39:25 ...
情報: OS Name: Windows 7 [火 2 13 00:39:25...
情報: OS Version: 6.1 [火 2 13 00:39:25 JST 2...
情報: Architecture: amd64 [火 2 13 00:39:25 JST...
情報: Java Home: C:\Users\Nakajima\Desktop\P...
情報: JVM Version: 1.8.0_40-b25 [火 2 13 00:39...
情報: JVM Vendor: Oracle Corporation [火 2 13...
情報: CATALINA_BASE: C:\Users\Nakajima\Desktop\P...
情報: CATALINA_HOME: C:\Users\Nakajima\Desktop\P...
情報: Command line argument: -Dcatalina.base=C:\Users\Na...
情報: Command line argument: -Dcatalina.home=C:\Users\Na...
情報: Command line argument: -Dwtp.deploy=C:\Users\Nakaj...
情報: Command line argument: -Djava.endorsed.dirs=C:\Use...
情報: Command line argument: -Dfile.encoding=UTF-8 [火 2...
情報: The APR based Apache Tomcat Native library which a...
情報: Initializing ProtocolHandler ["http-nio-8080"] [火...
情報: Using a shared selector for servlet write/read [火...
情報: Initializing ProtocolHandler ["ajp-nio-8009"] [火 ...
情報: Using a shared selector for servlet write/read [火...
情報: Initialization processed in 951 ms [火 2 13 00:39:...
情報: サービス Catalina を起動します [火 2 13 00:39:26 J...
情報: Starting Servlet Engine: Apache Tomcat/8.0.20 [火 ...
情報: Creation of SecureRandom instance for session ID g...
情報: Starting ProtocolHandler ["http-nio-8080"] [火 2 1...
情報: Starting ProtocolHandler ["ajp-nio-8009"] [火 2 13...
情報: Server startup in 4438 ms [火 2 13 00:39:30 JST 20...
「Server startup~」と出れば起動完了です。
** 4.3. アプリケーションにアクセス [#s3243793]
ブラウザを起動し、以下のURLを入力し、Webアプリケーション...
「http://localhost:8080/Struts2HelloWorld」
すると、実装したindex.jspの内容が表示されます。
p14.jpg
** 4.4. HelloWorldページに遷移 [#n3d32fa0]
では、ここまで長々と実装してきたHelloWorldを実行します。
テキストボックスに任意の値を入力し、「HelloWorldページへ...
おめでとうございます!テキストボックスの入力値が受け継が...
p15.jpg
Actionにログを出力する処理を実装しているので、受け渡した...
* 5. アプリケーションの説明 [#paa3cee6]
皆様、お疲れ様でした。
ここまでで、HelloWorldの実装が完了しました。
ここからは、アプリケーションの説明をしていきます。
** 5.1. JSPとアクション [#n1adf639]
Struts2では、MVCモデルを採用しています。
多くの場合、View(画面)は、JSPを用いて実装し、JSPの各フ...
*** 5.1.1. Action [#q2737324]
Actionとは、Struts2での業務処理を行うクラスです。
JSPのフォームをサブミットしたとき、Struts2の機能により、...
どのフォームでどんなActionを行うかは、formタグとStruts.x...
今回、HelloWorldのActionは、ここで設定しています。
<!-- formタグのaction属性で実行するActionを指定します。 ...
<s:form action="hello">
Struts2では、JSPで使用できるタグライブラリが提供されてお...
formをサブミットした時に使用するActionは、<s:form>タグの...
Struts.xmlについては、後述しますので、そちらで詳しく説明...
*** 5.1.2. 受け渡すデータ [#b036b00c]
画面上で入力したフォームなど、次の画面やActionクラスで使...
JSP上のタグに設定したname属性と一致する名称のプロパティ...
今回はindex.jspで入力した名前しか受け渡していませんが、...
そんな場合に、データを塊として保持するクラスが作りたい場...
そんな場合は、name属性に「.(ドット)」をつけて「クラス名....
■例:LoginInfoクラスのnameに値を設定する場合
<s:textfield name="LoginInfo.name" />
** 5.2. Struts.xml [#scc47419]
Struts.xmlは、Struts2の動きを制御する設定ファイルです。
こちらには、先ほど説明したformタグでのActionの設定や、ア...
定数については、少ししか触れていませんが、struts.proper...
他にもいろんな設定がありますが、ここでではHelloWorldで使...
Struts.xml中、HelloWorldのActionの設定はここです。
■HelloWorldのアクション設定箇所
<!-- Hello worldのサンプルアクション -->
<action name="hello" class="sample.HelloWorldAction" met...
<result name="success">/view/sample/HelloWorld.jsp</...
</action>
Struts2では、Actionの名前、使用するクラス、メソッドを設...
定義したAction内に、Actionクラスからの戻り値によって、...
今回は、戻り値が"success"の場合しか定義していませんが、...
遷移先のJSPは、WebContentをルート(/)として、それ以降のツ...
遷移元のJSPからの相対パスでも設定できますが、ずれたりす...
** 5.3. web.xml [#c466813b]
web.xmlとは、Webアプリケーションの設定を記載するファイル...
こちらは特に変わったことをしない限り、上述したweb.xmlの...
* 最後に [#oea78781]
ここまでで、Struts2を使用したWebアプリケーションのサンプ...
今回はあくまでサンプルですので、本当に最少構成で実装し...
新規で一からStruts2アプリケーションを構築することは中々...
EX. 参考Web
今回の記事を執筆するに当たり、以下に掲載するWebページを...
・2014年度版 Eclipse + Struts2 による Java Web アプリ開...
http://www.cyokodog.net/blog/first-struts2/
F37fc642e7ac0bf345e6a0d28e497e68
@tarosa0001
tarosa0001です。 いろんなところに散らばっている技術的ノ...
フォロー
ストック
いいね2
ツイート
Toot
あなたもコメントしてみませんか :)
ユーザー登録(無料)
すでにアカウントを持っている方はログイン
© 2011-2018 Increments Inc.
利用規約
プライバシー
ヘルプ
お問い合わせ
Qiitaとは
ユーザー
タグ
投稿
ブログ
API
Team
ご意見
https://qiita.com/tarosa0001/items/889faa2ab5853005f26b
終了行:
#contents
コミュニティ
ユーザ登録ログイン
F37fc642e7ac0bf345e6a0d28e497e68 @tarosa0001
2018年02月19日に更新
【超初心者向け】Struts2超入門 - 2018年版
JavaEclipseWebstruts2Servlet,JSP
2
* はじめに [#s08ac405]
レガシーという人もいるかも知れませんが、Struts2の入門編...
最近ではクライアントサイドの新しい技術も発展し、Struts2...
しかしながら、現役で動いているものにぶつかってしまった...
筆者は最近そんなパターンにぶつかって、頑張って勉強しま...
HelloWorldを作ろうとした時、中々すべてをカバーする文献...
Struts2は、レガシーと言われても、割とバージョンアップが...
一旦、今回の記事執筆時点で最新のバージョンを使用して、S...
* 1. Strutsとは [#eee39380]
Javaで実装するMVCモデルを採用したWebアプリケーションフレ...
MVCモデルとは、Model(データ)、View(画面)、Controller(業...
ただし、Struts2にはVとCを分離する機能はあっても、MをCか...
** 1.1. Struts2の生い立ち [#pe731458]
以前、Strutsというフレームワークが存在し、一世を風靡した...
元々の開発経緯も全く別物で、「WebWork2」という名称で開...
Struts2は現在もまだサポートが続いており、新しいバージョ...
** 1.2. Struts2導入のメリット [#qdd34933]
少し話がそれましたが、企業システムなど、大規模なWebアプ...
また、Struts2に限ったことではありませんが、フレームワー...
ただ、導入に手間がかかるので、小規模の開発には向かないと...
* 2. 開発環境構築 [#f14b47d1]
これから、Struts2でHelloWorldを実現するための、開発環境...
構築方法には、3通りあります。
+ 1.自力で構築
+ 2.Mavenで構築
+ 3.公式の空プロジェクトを使用
今回は、自力で構築します。
2は、まずMavenを勉強する必要があることと、環境によっては...
3は、使おうとしても、デフォルトの状態からエラーで起動で...
※個人的にはちゃんとエラーのないものを提供してほしいと思...
よって、手を動かして覚えることも兼ね、自力で構築しましょ...
** 2.1. Eclipseプロジェクトの作成 [#aebea814]
筆者は基本開発には統合開発環境を使用します。
Java系の開発では基本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の導入 [#m2cb44e1]
作成したプロジェクトにStruts2を導入します。
*** 2.2.1. Struts2のダウンロード [#b6c9c7d5]
こちらからStruts2をダウンロードします。
本記事執筆時点で最新は、「2.5.14.1」のようです。
HelloWorldでは使用しませんが、サンプルアプリケーション付...
また、後で必要になるので、「log4j-core-2.9.1.jar」を別に...
p6.jpg
「struts-2.5.14.1-min-lib.zip」は最少構成でのStruts2の空...
筆者の環境では、最初からエラーで起動できませんでした。
解決するのも面倒くさかったので、筆者は最初から自力で構...
*** 2.2.2. 必要ライブラリの配置 [#hf4cdeef]
プロジェクトにStruts2を導入します。
ダウンロードしたstruts-2.5.14.1-all.zipを解凍し、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ファイルです...
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. 設定ファイルの配置 [#ld5d5a1c]
「/Struts2HelloWorld/resources」にStruts2の設定ファイル...
余談ですがStruts2では、ゼロコンフィギュレーションと言っ...
しかし、開発者はXMLが好きなのかStruts2を導入していても、...
アプリケーションの設定が、このファイルだけみれば分かると...
特にStruts2では、冒頭でも述べたとおり、SpringやORマッパ...
そのXML地獄から開発者を解放してくれるためのゼロコンフィ...
長くなりましたが、今回はより多くのケースに合わせ、設定フ...
コメントも一緒に記載していますが、今のところは読み飛ばし...
■struts.xmlの記載内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configur...
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- アクションのパッケージ定義 -->
<package name="default" extends="struts-default">
<!-- Hello worldのサンプルアクション -->
<action name="hello" class="sample.HelloWorldAc...
<result name="success">/view/sample/HelloWo...
</action>
</package>
</struts>
もう一つ、ログ出力ライブラリである「log4j2」の設定ファイ...
■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}], ...
</PatternLayout>
</Console>
<RollingFile name="FILE" fileName="./log/appLog....
<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」というファ...
** 2.3 構成の確認 [#ff1ec868]
ここまでで、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. アプリケーションの実装 [#nf0f48d4]
開発環境の構築ができましたので、ここからはアプリケーショ...
** 3.1. トップページの準備 [#y577dfa4]
アプリケーションアクセス時のトップページを準備します。
今回はJSPを使って実装します。
WebContentを右クリック > 新規 > JSPでダイアログを開き...
ファイル名に「index.jsp」と入力して完了します。
p8.jpg
■index.jsp
<%@ page language="java" contentType="text/html; charset...
<!-- Struts2のタグライブラリを使用可能にする -->
<%@ taglib prefix="s" uri="/struts-tags"%>
<!-- タイプ宣言はHTML5のものを使用する -->
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/ht...
<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の実装 [#td333f25]
Struts2において、JSPからサブミットされた際など、Webアプ...
Actionや、遷移先のページは、struts.xmlに定義しているので...
srcフォルダを右クリック > 新規 > クラスから、次の情報...
入力項目
入力値
パッケージ sample
名前 HelloWorldAciton
p9.jpg
■HelloWorldAciton
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(HelloWo...
/** 名前 */
private String name;
/**
* [アクション実行処理]<br>
* HelloWorldを出力する処理を実行する。<br>
* 実行するメソッドは、struts.xmlで指定したメソッド...
* Struts2ではアクションの処理結果でページの遷移先を...
* 今回は"success"の固定文字列を返却する。<br>
* <br>
* @return
*/
public String execute() {
logger.info("入力されたパラメータは「{}」です。"...
return "success";
}
/**
* [名前取得処理]<br>
* 名前を取得します。<br>
* Struts2がフォームに入力された値をパラメータとして...
* getterを使用するため、パラメータとして使用したい...
* Actionクラスのプロパティとして宣言しておき、gette...
* <br>
* @return 名前
*/
public String getName() {
return name;
}
/**
* [名前設定処理]<br>
* 名前を設定します。<br>
* getter同様、ページ間で受け渡したい値はsetterを用...
* <br>
* @param name 名前
*/
public void setName(String name) {
this.name = name;
}
}
** 3.3. 遷移先の実装 [#c9ce3f9f]
トップページのボタンを押した際の遷移先を実装します。
WebContentディレクトリ内にview/sampleフォルダを作成し、...
配置ディレクトリ自体はWebContent内であればどこでもいい...
トップページと同様の手順でsampleフォルダ内に「HelloWorld...
■HelloWorld.jsp
<%@ page language="java" contentType="text/html; charset...
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/ht...
<title>Hello Struts2 world!</title>
</head>
<body>
<!-- メッセージの間に渡されたデータを表示します...
Hello Struts2 world, <s:property value="name" />...
</body>
</html>
** 3.4. アプリケーション設定の更新 [#v09cef9d]
ここまでで、アプリケーションの処理自体は実装完了です。
最後に、実装したアプリケーションがStruts2アプリケーショ...
プロジェクトのWEB-INF内に存在している「web.xml」を次のよ...
Struts2というよりは、Webアプリケーション自体の基礎知識に...
■web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins...
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/java...
id="WebApp_ID" version="3.1">
<display-name>Struts2HelloWorld</display-name>
<welcome-file-list>
<!-- アプリケーションルートであクセした時の表示...
<!-- 必要はありませんが、今回はURLの入力間違いも...
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Struts2のサーブレットフィルタ -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filt...
</filter>
<!-- URLに対して使用するフィルタの設定 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
** 3.5. 実装の完了 [#z1dd3d1a]
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. 実行 [#b087b502]
さて、ここまでで実装と設定が完了しました。
いよいよ、実装したアプリケーションを動かします。
** 4.1. Tomcatの準備 [#yb58b492]
Webアプリケーションを動作させるためのサーブレットコンテ...
今回は、Tomcatをサーブレットコンテナとして使用します。
+ ①ウィンドウ > ビューの表示 > その他 > サーバを選択し...
p10.jpg
+ ②表示されたサーバー・ビューの余白を右クリック > 新規 ...
「Tomcat v8.0 サーバー」を選択し、次へ進みます。
p11.jpg
+ ③Struts2HelloWorldを追加して完了します
p12.jpg
※Struts2HelloWorldが追加できない場合、プロジェクトの作成...
プロジェクトの構成がTomcat8に対応しているか確認してくだ...
** 4.2. Tomcatの起動 [#b00626f4]
Tomcatを起動します。
サーバー・ビューに追加されたTomcatを右クリックし、開始し...
p13.jpg
以下のような文字列がコンソールに出力されます。
赤字で出てきますが、エラーではありません。
■コンソールの出力内容 ※警告は無視してください。
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Con...
情報: Server version: Apache Tomcat/8.0.20 [火 2 ...
情報: Server built: Feb 15 2015 18:10:42 UTC [...
情報: Server number: 8.0.20.0 [火 2 13 00:39:25 ...
情報: OS Name: Windows 7 [火 2 13 00:39:25...
情報: OS Version: 6.1 [火 2 13 00:39:25 JST 2...
情報: Architecture: amd64 [火 2 13 00:39:25 JST...
情報: Java Home: C:\Users\Nakajima\Desktop\P...
情報: JVM Version: 1.8.0_40-b25 [火 2 13 00:39...
情報: JVM Vendor: Oracle Corporation [火 2 13...
情報: CATALINA_BASE: C:\Users\Nakajima\Desktop\P...
情報: CATALINA_HOME: C:\Users\Nakajima\Desktop\P...
情報: Command line argument: -Dcatalina.base=C:\Users\Na...
情報: Command line argument: -Dcatalina.home=C:\Users\Na...
情報: Command line argument: -Dwtp.deploy=C:\Users\Nakaj...
情報: Command line argument: -Djava.endorsed.dirs=C:\Use...
情報: Command line argument: -Dfile.encoding=UTF-8 [火 2...
情報: The APR based Apache Tomcat Native library which a...
情報: Initializing ProtocolHandler ["http-nio-8080"] [火...
情報: Using a shared selector for servlet write/read [火...
情報: Initializing ProtocolHandler ["ajp-nio-8009"] [火 ...
情報: Using a shared selector for servlet write/read [火...
情報: Initialization processed in 951 ms [火 2 13 00:39:...
情報: サービス Catalina を起動します [火 2 13 00:39:26 J...
情報: Starting Servlet Engine: Apache Tomcat/8.0.20 [火 ...
情報: Creation of SecureRandom instance for session ID g...
情報: Starting ProtocolHandler ["http-nio-8080"] [火 2 1...
情報: Starting ProtocolHandler ["ajp-nio-8009"] [火 2 13...
情報: Server startup in 4438 ms [火 2 13 00:39:30 JST 20...
「Server startup~」と出れば起動完了です。
** 4.3. アプリケーションにアクセス [#s3243793]
ブラウザを起動し、以下のURLを入力し、Webアプリケーション...
「http://localhost:8080/Struts2HelloWorld」
すると、実装したindex.jspの内容が表示されます。
p14.jpg
** 4.4. HelloWorldページに遷移 [#n3d32fa0]
では、ここまで長々と実装してきたHelloWorldを実行します。
テキストボックスに任意の値を入力し、「HelloWorldページへ...
おめでとうございます!テキストボックスの入力値が受け継が...
p15.jpg
Actionにログを出力する処理を実装しているので、受け渡した...
* 5. アプリケーションの説明 [#paa3cee6]
皆様、お疲れ様でした。
ここまでで、HelloWorldの実装が完了しました。
ここからは、アプリケーションの説明をしていきます。
** 5.1. JSPとアクション [#n1adf639]
Struts2では、MVCモデルを採用しています。
多くの場合、View(画面)は、JSPを用いて実装し、JSPの各フ...
*** 5.1.1. Action [#q2737324]
Actionとは、Struts2での業務処理を行うクラスです。
JSPのフォームをサブミットしたとき、Struts2の機能により、...
どのフォームでどんなActionを行うかは、formタグとStruts.x...
今回、HelloWorldのActionは、ここで設定しています。
<!-- formタグのaction属性で実行するActionを指定します。 ...
<s:form action="hello">
Struts2では、JSPで使用できるタグライブラリが提供されてお...
formをサブミットした時に使用するActionは、<s:form>タグの...
Struts.xmlについては、後述しますので、そちらで詳しく説明...
*** 5.1.2. 受け渡すデータ [#b036b00c]
画面上で入力したフォームなど、次の画面やActionクラスで使...
JSP上のタグに設定したname属性と一致する名称のプロパティ...
今回はindex.jspで入力した名前しか受け渡していませんが、...
そんな場合に、データを塊として保持するクラスが作りたい場...
そんな場合は、name属性に「.(ドット)」をつけて「クラス名....
■例:LoginInfoクラスのnameに値を設定する場合
<s:textfield name="LoginInfo.name" />
** 5.2. Struts.xml [#scc47419]
Struts.xmlは、Struts2の動きを制御する設定ファイルです。
こちらには、先ほど説明したformタグでのActionの設定や、ア...
定数については、少ししか触れていませんが、struts.proper...
他にもいろんな設定がありますが、ここでではHelloWorldで使...
Struts.xml中、HelloWorldのActionの設定はここです。
■HelloWorldのアクション設定箇所
<!-- Hello worldのサンプルアクション -->
<action name="hello" class="sample.HelloWorldAction" met...
<result name="success">/view/sample/HelloWorld.jsp</...
</action>
Struts2では、Actionの名前、使用するクラス、メソッドを設...
定義したAction内に、Actionクラスからの戻り値によって、...
今回は、戻り値が"success"の場合しか定義していませんが、...
遷移先のJSPは、WebContentをルート(/)として、それ以降のツ...
遷移元のJSPからの相対パスでも設定できますが、ずれたりす...
** 5.3. web.xml [#c466813b]
web.xmlとは、Webアプリケーションの設定を記載するファイル...
こちらは特に変わったことをしない限り、上述したweb.xmlの...
* 最後に [#oea78781]
ここまでで、Struts2を使用したWebアプリケーションのサンプ...
今回はあくまでサンプルですので、本当に最少構成で実装し...
新規で一からStruts2アプリケーションを構築することは中々...
EX. 参考Web
今回の記事を執筆するに当たり、以下に掲載するWebページを...
・2014年度版 Eclipse + Struts2 による Java Web アプリ開...
http://www.cyokodog.net/blog/first-struts2/
F37fc642e7ac0bf345e6a0d28e497e68
@tarosa0001
tarosa0001です。 いろんなところに散らばっている技術的ノ...
フォロー
ストック
いいね2
ツイート
Toot
あなたもコメントしてみませんか :)
ユーザー登録(無料)
すでにアカウントを持っている方はログイン
© 2011-2018 Increments Inc.
利用規約
プライバシー
ヘルプ
お問い合わせ
Qiitaとは
ユーザー
タグ
投稿
ブログ
API
Team
ご意見
https://qiita.com/tarosa0001/items/889faa2ab5853005f26b
ページ名: