【備忘録】Struts 1.x Maven 環境構築

## 初めに
Struts 1.x系のMaven環境構築に関する情報が少なかったため備忘録として記録します。
Qiita初投稿なので見づらい部分もあるかと思いますが、ご容赦ください。

## 環境要件
Eclipse 4.33.0
Java8
Struts 1.3.10

## 環境構築
### 1. EclipseでMavenプロジェクトを新規作成する。
[ファイル]→[新規]→[Mavenプロジェクト]
[シンプルなプロジェクトの作成(S) (アーキタイプ選択のスキップ)]→[次へ]

```
グループID: com.example
アーティファクトID: struts1-app2
バージョン: 0.0.1-SNAPSHOT
パッケージング: war
```

→[完了]

### 2. ファイル階層を整える。
```
struts1-app/
├── pom.xml
└── src/
	└── main/
		├── java/
		│	└── com/ (新規作成)
		│		└── example/ (新規作成)
		│			├── HelloAction.java (新規作成)
		│			└── HelloForm.java (新規作成)
		└── webapp/
			├── index.jsp (新規作成)
			├── hello.jsp (新規作成)
			└── WEB-INF/ (新規作成)
				├── web.xml (新規作成)
				└── struts-config.xml (新規作成)
```

### 3. pom.xmlにコードを記載する。

```xml:pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
	http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	
	<groupId>com.example</groupId>
	<artifactId>struts1-app2</artifactId>
	<version>1.0-SNAPSHOT</version>
	<packaging>war</packaging>
	
	<properties>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	
	<dependencies>
		<!-- Struts 1 -->
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts-core</artifactId>
			<version>1.3.10</version>
		</dependency>
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts-taglib</artifactId>
			<version>1.3.10</version>
		</dependency>
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts-tiles</artifactId>
			<version>1.3.10</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1.3</version>
		</dependency>
		<!-- Servlet API -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>
	
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
			
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>3.2.3</version>
			</plugin>
		</plugins>
	</build>
</project>
```

### 4. struts-config.xml、web.xmlにコードを記載。

```xml:struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
	"http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>
	<form-beans>
		<form-bean name="helloForm" type="com.example.HelloForm"/>
	</form-beans>
	
	<action-mappings>
		<action path="/hello"
			type="com.example.HelloAction"
			name="helloForm"
			scope="request"
			input="/hello.jsp">
			<forward name="success" path="/hello.jsp"/>
		</action>
	</action-mappings>
</struts-config>
```

```xml:web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
	version="2.4">
	
	<display-name>Struts1 Sample App</display-name>
	
	<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
		<init-param>
			<param-name>config</param-name>
			<param-value>/WEB-INF/struts-config.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
</web-app>
```

### 5. HelloAction.java、HelloForm.javaにコードを記載。

```java:HelloAction.java
package com.example;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class HelloAction extends Action {
	@Override
	public ActionForward execute(
		ActionMapping mapping,
		ActionForm form,
		HttpServletRequest request,
		HttpServletResponse response) throws Exception {
		
		// フォームをキャストして値を取得
		HelloForm helloForm = (HelloForm) form;
		String name = helloForm.getName();
		
		// リクエストスコープにメッセージを設定
		request.setAttribute("message", "Hello, " + name + "!");
		
		// struts-config.xml の success フォワードに遷移
		return mapping.findForward("success");
	}
}

```

```java:HelloForm.java
package com.example;

import org.apache.struts.action.ActionForm;

public class HelloForm extends ActionForm {
	private String name;
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
}

```

### 6. index.jsp、hello.jspにコードを記載。

```jsp:index.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<html>
<head>
    <title>Hello Form</title>
</head>
<body>
	<html:form action="/hello">
		名前: <html:text property="name" />
		<html:submit value="送信" />
	</html:form>
</body>
</html>

```

```jsp:hello.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
    <title>Hello Success</title>
</head>
<body>
	<p>${message}</p>
</body>
</html>

```

### 7. Mavenプロジェクトの更新(必要であれば)
プロジェクト上で ALT+F5

### 8. Tomcat8で起動
他の記事を参考にしてください。
また気が向いたら書きます。

### 9. http://localhost:8080/struts1-app2/ にアクセス
成功していれば入力フォームのページが表示されるはずです。
![{BD8D81FB-BA71-4835-8E13-AA5FAB14BED3}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3685632/75b0c3df-c786-41fe-a37a-81bcada07c90.png)
↓
![{ED39C22B-8A46-4838-9684-FC2BFE837640}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3685632/36b32bf9-326f-4a6d-b334-9ab82c743e86.png)

## 最後に
次期現場のキャッチアップということでこれからStruts 1.xで遊んでみたいと思います。
~~本当はSpring触りたい…；；~~