tomcatでjsp/servlet/struts2

#tomcatでservlet　HelloWorld

Javaとjsp/servletを学習して、Eclipseを使用して開発をしていたが、
Eclipseを使わず開発をするために以下やったことをまとめる

####環境
　　・macOS Catalina 10.15.2
　　・Tomcat 9.0.30
　　・Java 13

####参考にしたサイト
　　■さとうきびの初心者プログラミング日記＞Tomcat -ServletでHelloWorldしてみる(Mac)
　　　http://satoukibi.hatenablog.com/entry/2017/02/24/Tomcat_-Servlet%E3%81%A7HelloWorld%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B%28Mac%29

　　■soracane＞‎Struts2について‎＞03.Struts2の設計と設定のルール
　　　https://sites.google.com/site/soracane/home/struts2nitsuite/struts2no-she-jito-she-dingnoruru


brewにtomcatがあるか調べる

```terminal
$ brew search tomcat　
==> Formulae
tomcat          tomcat-native   tomcat@6        tomcat@7        tomcat@8
```

tomcatインストール

```terminal
$ brew install tomcat
・・・
==> Downloading https://www.apache.org/dyn/closer.cgi?path=/tomcat/tomcat-9/v9.0
==> Downloading from https://www-eu.apache.org/dist/tomcat/tomcat-9/v9.0.30/bin/
######################################################################## 100.0%
🍺  /usr/local/Cellar/tomcat/9.0.30: 641 files, 14.8MB, built in 27 seconds
```
/usr/local/Cellar/tomcat/9.0.30にインストールされた


tomcatの起動

```terminal
$  /usr/local/Cellar/tomcat/9.0.30/bin/catalina start
Using CATALINA_BASE:   /usr/local/Cellar/tomcat/9.0.30/libexec
Using CATALINA_HOME:   /usr/local/Cellar/tomcat/9.0.30/libexec
Using CATALINA_TMPDIR: /usr/local/Cellar/tomcat/9.0.30/libexec/temp
Using JRE_HOME:        /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
Using CLASSPATH:       /usr/local/Cellar/tomcat/9.0.30/libexec/bin/bootstrap.jar:/usr/local/Cellar/tomcat/9.0.30/libexec/bin/tomcat-juli.jar
Tomcat started.
```

http//localhost:8080でtomcatの画面が表示されていたら起動成功
<img width="1012" alt="スクリーンショット 2019-12-22 16.54.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493097/e77c3d3b-b08d-b697-5afb-e4915fdedf41.png">


終了するには以下

```terminal
$ /usr/local/Cellar/tomcat/9.0.30/bin/catalina stop
```



HelloWorld.javaの作成

```java:HelloWorld.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {

  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head>");
    out.println("<title>Hello World!</title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<h1>Hello World!</h1>");
    out.println("</body>");
    out.println("</html>");
  }
}
```
web.xmlの作成

```xml:web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<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">

  <servlet>
    <servlet-name>HelloWorldName</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>HelloWorldName</servlet-name>
    <url-pattern>/HelloWorldPage</url-pattern>
  </servlet-mapping>

</web-app>
```

コンパイル

```terminal
$ javac -classpath "/usr/local/Cellar/tomcat/9.0.30/libexec/lib/servlet-api.jar" HelloWorld.java
```

####tomcatのディレクトリ構成
**/usr/local/Cellar/tomcat/バージョン/libexec/webapps/**
webapps配下にwebアプリケーションを配置する

####webアプリのディレクトリ構成
```
webapps/
　　└--webアプリのルートディレクトリ/
　　　　　　└--WEB-INF/
　　　　　　　　　　　|--web.xml
　　　　　　　　　　　└--classes/
　　　　　　　　　　　　　　└HelloWorld.class
```

http://localhost:8080/test/HelloWorldPageにアクセス
<img width="534" alt="スクリーンショット 2019-12-22 17.17.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493097/78b73662-13ed-a8f3-7cd0-5f9c131df3c5.png">

できた

#tomcatでstruts2を利用したwebアプリを動かす
　　・ホームページ表示(index.jsp)
　　・ボタンクリックでHelloStrutsと表示するページ表示(hello.jsp)
　　・ボタンクリックで名前を入力するページ表示(welcome.jsp)
　　　→名前入力後、送信ボタンクリックでＰＯＳＴ通信で送られた名前を表示するページ表示(login.jsp)
　
struts2のディレクトリ構成

```terminal
webapps/
　　└--HelloStruts/
　　　　　　|--index.jsp
　　　　　　|--hello.jsp
　　　　　　|--welcome.jsp
　　　　　　|--login.jsp
　　　　　　|--src/
　　　　　　|　　└--action/
　　　　　　|　　　　└--com/
　　　　　　|　　　　　　└--action/
　　　　　　|　　　　　　　　|--HelloStrutsAction.java
　　　　　　|　　　　　　　　|--WelcomeAction.java
　　　　　　|　　　　　　　　└--Login.Action.java
　　　　　　└--WEB-INF/
　　　　　　　　　　　|--web.xml
　　　　　　　　　　　|--lib/　※ライブラリ
　　　　　　　　　　　|　　|--commons-fileupload-1.4.jar
　　　　　　　　　　　|　　|--commons-io-2.2.jar
　　　　　　　　　　　|　　|--commons-lang3-3.2.jar
　　　　　　　　　　　|　　|--commons-logging-1.1.3.jar
　　　　　　　　　　　|　　|--freemarker-2.3.28.jar
　　　　　　　　　　　|　　|--javassist-3.11.0.GA.jar
　　　　　　　　　　　|　　|--ogni-3.0.21.jar
　　　　　　　　　　　|　　|--struts2-core-2.3.37.jar
　　　　　　　　　　　|　　└--xwork-core-2.3.37.jar
　　　　　　　　　　　└--classes/
　　　　　　　　　　　　　　|--struts.xml
　　　　　　　　　　　　　　└--com/
                           └--action/
　　　　　　　　　　　　　　　　　　　|--HelloStrutsAction.class
　　　　　　　　　　　　　　　　　　　|--WelcomeAction.class
　　　　　　　　　　　　　　　　　　　└--Login.Action.class
```

javaファイルがあるディレクトリに移動

```terminal
cd /usr/local/Cellar/tomcat/9.0.30/libexec/webapps/HelloStruts/src/com/action
```

コンパイル&ライブラリのパスを通す
※ライブラリの間は「:」でつないでいる

```terminal
$ javac -classpath "/usr/local/Cellar/tomcat/9.0.30/libexec/webapps/HelloStruts/WEB-INF/lib/commons-fileupload-1.4.jar:
/usr/local/Cellar/tomcat/9.0.30/libexec/webapps/HelloStruts/WEB-INF/lib/commons-io-2.2.jar:
/usr/local/Cellar/tomcat/9.0.30/libexec/webapps/HelloStruts/WEB-INF/lib/commons-lang3-3.2.jar:
/usr/local/Cellar/tomcat/9.0.30/libexec/webapps/HelloStruts/WEB-INF/lib/commons-logging-1.1.3.jar:
/usr/local/Cellar/tomcat/9.0.30/libexec/webapps/HelloStruts/WEB-INF/lib/freemarker-2.3.28.jar:
/usr/local/Cellar/tomcat/9.0.30/libexec/webapps/HelloStruts/WEB-INF/lib/javassist-3.11.0.GA.jar:
/usr/local/Cellar/tomcat/9.0.30/libexec/webapps/HelloStruts/WEB-INF/lib/ognl-3.0.21.jar:
/usr/local/Cellar/tomcat/9.0.30/libexec/webapps/HelloStruts/WEB-INF/lib/struts2-core-2.3.37.jar:
/usr/local/Cellar/tomcat/9.0.30/libexec/webapps/HelloStruts/WEB-INF/lib/xwork-core-2.3.37.jar"
 HelloStrutsAction.java LoginAction.java WelcomeAction.java
```

javaファイルの下にそれぞれの.classファイルができているので、
それを/HelloStruts/WEB-INF/classes/classes/配下に移動して
http://localhost:8080/HelloStruts/
にアクセス

<img width="389" alt="スクリーンショット 2019-12-22 18.32.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493097/8d5b5155-5e80-72b1-8246-a2b7a131736f.png">
ホームページ表示
　　↓↓↓
HelloStrutsボタンをクリック
<img width="486" alt="スクリーンショット 2019-12-22 18.32.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493097/ee4d0b72-1b7e-feed-6eca-a1346d508ebe.png">
HelloStrutsと表示できた！


ホームページに戻る
<img width="389" alt="スクリーンショット 2019-12-22 18.32.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493097/49d5e86b-9c3d-c05e-4445-60308bbc1043.png">
Welcomeボタンをクリック
　　↓↓↓
<img width="465" alt="スクリーンショット 2019-12-22 18.33.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493097/c3726494-c856-e41d-4aac-3ed982b37471.png">
入力するページを表示できた！
　　↓↓↓
ユーザー名を入力して送信ボタンをクリック
<img width="456" alt="スクリーンショット 2019-12-22 18.34.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493097/75304d73-77f2-ab6b-3887-907436d21d21.png">
実行できた！

javaファイルやライブラリが大きくなるとコンパイルするコマンドがどんどん長くなってしまうし大変なので
今後はそこを改善してみたいと思う。