eclipse上でStruts2のデモプロジェクトを作ります

#プロジェクトの作成
まず、eclipseを開いてプロジェクトを作成しましょう。
ファイル -> 新規 -> その他と進んで「動的Webプロジェクト」を選択して「次へ」を押しましょう。
![スクリーンショット 2019-04-10 7.18.11.png](https://qiita-image-store.s3.amazonaws.com/0/229009/40253a4a-75eb-6ae0-ebca-6fc0f000775a.png)
「プロジェクト名」にプロジェクト名(struts2_demo)を入力し、適当なTomcatサーバを選択して完了を押しましょう。
![スクリーンショット 2019-04-10 7.20.49.png](https://qiita-image-store.s3.amazonaws.com/0/229009/c96f3820-51a4-5cfa-e34e-5899a7199c76.png)

#プロジェクトにStruts2を組み込み

[Struts2に必要なライブラリ](https://struts.apache.org/download.cgi)をダウンロードしましょう。
はじめての方は”struts-バージョン-all.zip”となっているファイルをダウンロードしましょう。
![スクリーンショット 2019-04-09 21.49.29.png](https://qiita-image-store.s3.amazonaws.com/0/229009/1af67c61-5219-fe86-87e4-e3f73dedaabf.png)
ダウンロードしたStruts-2.5.20-all.zipを展開しstruts-2.5.20->libから次の13個を

- commons-fileupload-1.4.jar
- commons-io-2.6.jar
- commons-lang-2.4.jar
- commons-lang3-3.8.jar
- commons-logging-1.2.jar
- freemarker-2.3.28.jar
- javassist-3.20.0-GA.jar
- log4j-api-2.11.1.jar
- ognl-3.1.21.jar
- struts2-core-2.5.20.jar
- xmlpull-1.1.3.1.jar
- xpp3_min-1.1.4c.jar
- xstream-1.4.11.jar

プロジェクトの配下のWebContent->WEB-INF->libにコピーします。
eclipseのプロジェクトエクスプローラー(左の小窓)上の同じ場所のlibをリフレッシュして環境に反映しましょう。
にドラッグ＆ドロップしましょう。
![スクリーンショット 2019-04-09 22.02.03.png](https://qiita-image-store.s3.amazonaws.com/0/229009/3815fdb8-9ede-e668-8d26-9750f0afb4e0.png)
プロジュエクト名を右クリックして、Javaのビルド・パスから、クラスの作成先のパスを変更します。
![スクリーンショット 2019-04-10 7.25.43.png](https://qiita-image-store.s3.amazonaws.com/0/229009/6690f681-1e76-dfd6-e874-9665358779c0.png)

#フォーム画面(index.jsp)
プロジェクトエクスプローラー(左の小窓)のWebContentの上で右クリック
新規->ファイルを押してJSPファイルを作成しましょう。
下記の画面が表示されるのでFile nameに”index.jsp”と入力して”Finish”を押しましょう。
以下のようにフォーム画面(index.jsp)を記述しましょう。

```
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC 
  "-//W3C//DTD HTML 4.01 Transitional//EN" 
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
	<title>Hello Struts2!</title>
	</head>
	<body>
		<form action = "HelloStruts2">
			<label for = "name">Please enter your name</label><br/>
			<input type = "text" name = "name"/>
			<input type = "submit" value = "OK"/>
		</form>
	</body>
</html>
```

#結果画面(HelloStruts.jsp)
以下のように結果表示画面(HelloStruts.jsp)を記述しましょう。

```
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC 
  "-//W3C//DTD HTML 4.01 Transitional//EN" 
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<title>Hello Struts2!</title>
	</head>
	<body>
		Hello Struts2, <s:property value="name"/>
	</body>
</html>
```
🌾「<%@ taglib prefix="s" uri="/struts-tags" %>」は、Jspのタグライブラリにページロードされています。

#アクションファイルを作成
一見完成したように思えますがまだ未完成です。
なぜなら、フォーム画面から結果画面へ変数(name)を受け渡す必要があるからです。
そこで、変数の受け渡しを行うアクションファイル(HelloStruts2Action.java)を作成します。
HelloStruts2Action.javaをsrcの下にパッケージ名をhelloで作成します。
プロジェクトエクスプローラー(左の小窓)のJava Resources->srcで右クリックしHelloStruts2Action.javaを作ります。
![スクリーンショット 2019-04-11 21.41.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229009/254c623c-fdb8-9bff-3dc1-aa6f7046082b.png)

以下のようにHelloStruts2Action.javaを記述しましょう。

```
package com.stuts2.demo;

public class HelloStruts2Action {
	private String name;
	public String execute() throws Exception {
		return "success";
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
```

#Struts.xmlの作成（Strutsのルール）
「フォームの処理をHelloStruts2Action.excecute()で行い戻り値が”success”だったら”HelloWorld.jsp”(結果画面)を表示する」
ルールを明記する必要があります。
それはstruts2_demo->src->struts.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>
    <constant name="struts.devMode" value="true" />
    <package name="Demo" extends="struts-default">
        <action name="HelloStruts2" class="com.stuts2.demo.HelloStruts2Action" method="execute">
	    <result name="success">/HelloStruts.jsp</result>
        </action>
    </package>
</struts>
```
package要素の属性には、以下の値が設定できます

要素|解説
:--------|:--
name     |複数のアクションをグループ可する際の名前。別のpakage名と重複しないようにする(必須）
extends<img width="40px"/>|別のpackageを継承する。継承することによりそのパッケージの要素にアクセスできるようになる(任意）
namespace|urlの一部になる(任意）
abstract |trueを設定すると、子要素のactionが必須項目でなくなる(任意）

#web.xmlの設定(URLのルーティング)
Strutsは、バージョンによってMVCフレームワークを開発環境に導入実現も違います。今回Struts2.5をロードしますので、
WebContent->WEB-INF->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_4_0.xsd" id="WebApp_ID" version="4.0">
 	<display-name>struts2_demo</display-name>
  	<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>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>
```

#TomcatにContextを配置
Tomcatサーバのconf/Catalina/localhostディレクトリの下に、struts2_demo.xmlを作ります。
struts2_demo.xmlの中身は以下とないrます。

```
<Context path="/struts2_demo" docBase="/work/ws_eclipse/struts2_demo/WebContent" reloadable="false" source="org.eclipse.jst.jee.server:struts2_demo" />
```
オプション|解説
:---------|:---------
path <img width="150px"/>| Request-URIに対応するパスです。<br> ※ Request-URIの参照リンク:http://www.javadrive.jp/servlet/request/index6.html
reloadable| /WEB-INF/classes/ や /WEB-INF/libが変更されると、自動的に読み込みます。
docBase   | WebAppのContextフォルダを指定します。Tomcatは実行するとき、WebAppのフォルダーを探しその中のContextファイルを読んで画面表示に備えます。
workDir   | サーバレットのフォルダーを指定します。WebAppとやりとりするとき、temporary read-write(仮読みー書き）のために使います。

#eclipseでstruts2アプリを起動
EclipseからTomcatを起動します。
起動するログには、以下のメッセージが確認できれば、struts2_demoが立ち上がりました。
![スクリーンショット 2019-04-13 11.44.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229009/b2a3ed89-9ab4-38d4-56f0-97a6624d40df.png)
画面で動かしましよう。
ブラウザーに、「http://localhost:8080/struts2_demo/index.jsp」を入力すると、以下の画面が表示します。
![スクリーンショット 2019-04-13 11.52.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229009/be6b524a-ec95-169b-9035-8a1b12c1693e.png)
任意文言を書いてOKを押すと、次のページに遷移します。
![スクリーンショット 2019-04-13 11.53.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229009/65cd804e-c37b-0254-527e-ebbdb7fee0ee.png)

最後に、上記で作られたプロジェクトの構築は以下の通りになりました。
![スクリーンショット 2019-04-13 12.02.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229009/256915d4-5fd7-c07d-b493-73554eb908fe.png)