JSFを環境構築してみた！

仕事でJSFを使うので、独学でも触りたいと思い、環境構築しました。

##開発環境
Windows10 home
Java SE8
netbeans 8
GlassFish 4.1.1

#Javaのインストール
[こちらのサイト](https://www.oracle.com/java/technologies/javase-downloads.html)から、**Java SE 8**をインストールします。
最新版のJDKだと、netbeansをインストールする際にエラーが排出されてしまう為、**SE 8**をインストールしましょう。

#環境変数の設定
次に、「コントロールパネル」→「システムとセキュリティ」→「システム」の「システムの詳細設定」から環境変数の設定を行います。
「システム環境変数」の中に「Path」という変数があるので、編集ウィンドウから新規ボタンを押してJDKをインストールした場所のbinディレクトリのパスを追加します。
「Path」に追加後、コマンドプロンプトを立ち上げ、``javac``とコマンドを打って、きちんと環境変数が設定できているか、確認します。
以下のコマンドが表れれば、OKです。

```
Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true
使用方法: javac <options> <source files>
使用可能なオプションには次のものがあります。
  @<filename>                  ファイルからの読取りオプションおよびファイル名
  -Akey[=value]                注釈プロセッサに渡されるオプション
  --add-modules <module>(,<module>)*
        初期モジュールに加えて解決するルート・モジュール、または<module>が
                ALL-MODULE-PATHである場合はモジュール・パスのすべてのモジュール。
  --boot-class-path <path>, -bootclasspath <path>
        ブートストラップ・クラス・パスの位置をオーバーライドする
  --class-path <path>, -classpath <path>, -cp <path>
        ユーザー・クラス・ファイルおよび注釈プロセッサを検索する位置を指定する
  -d <directory>               生成されたクラス・ファイルを格納する位置を指定する
  -deprecation                 推奨されないAPIが使用されているソースの位置を出力する
  --enable-preview             プレビュー言語機能を有効にします。-sourceまたは--releaseとともに使用されます。
  -encoding <encoding>         ソース・ファイルが使用する文字エンコーディングを指定する
  -endorseddirs <dirs>         推奨規格パスの位置をオーバーライドする
  -extdirs <dirs>              インストール済み拡張機能の位置をオーバーライドする
  -g                           すべてのデバッグ情報を生成する
  -g:{lines,vars,source}       いくつかのデバッグ情報のみを生成する
  -g:none                      デバッグ情報を生成しない
  -h <directory>               生成されたネイティブ・ヘッダー・ファイルを格納する場所を指定する
  --help, -help, -?            このヘルプ・メッセージを出力します
  --help-extra, -X             追加オプションのヘルプを出力します
  -implicit:{none,class}       暗黙的に参照されるファイルについてクラス・ファイルを生成するかどうかを指定する
  -J<flag>                     <flag>を実行システムに直接渡す
  --limit-modules <module>(,<module>)*
        参照可能なモジュールの領域を制限します
  --module <module>(,<module>)*, -m <module>(,<module>)*
        指定したモジュールのみコンパイルし、タイムスタンプを確認する
  --module-path <path>, -p <path>
        アプリケーション・モジュールを検索する位置を指定する
  --module-source-path <module-source-path>
        複数モジュールの入力ソース・ファイルを検索する位置を指定する
  --module-version <バージョン>     コンパイルするモジュールのバージョンを指定します
  -nowarn                      警告を発生させない
  -parameters                  メソッド・パラメータにリフレクション用のメタデータを生成します
  -proc:{none,only}            注釈処理やコンパイルを実行するかどうかを制御します。
  -processor <class1>[,<class2>,<class3>...]
        実行する注釈プロセッサの名前。デフォルトの検出処理をバイパス
  --processor-module-path <path>
        注釈プロセッサを検索するモジュール・パスを指定する
  --processor-path <path>, -processorpath <path>
        注釈プロセッサを検索する位置を指定する
  -profile <profile>           使用されているAPIが指定したプロファイルで使用可能かどうかを確認します
  --release <release>
        指定されたJava SEリリースに対してコンパイルします。サポートされているリリース: 7, 8, 9, 10, 11, 12, 13, 14, 15
  -s <directory>               生成されたソース・ファイルを格納する場所を指定する
  --source <release>, -source <release>
        指定されたJava SEリリースとソースの互換性を保持します。サポートされているリリース: 7, 8, 9, 10, 11, 12, 13, 14, 15
  --source-path <path>, -sourcepath <path>
        入力ソース・ファイルを検索する位置を指定する
  --system <jdk>|none          システム・モジュールの位置をオーバーライドする
  --target <release>, -target <release>
        指定されたJava SEリリースに適したクラス・ファイルを生成します。サポートされているリリース: 7, 8, 9, 10, 11, 12, 13, 14, 15
  --upgrade-module-path <path>
        アップグレード可能なモジュールの位置をオーバーライドする
  -verbose                     コンパイラの動作についてメッセージを出力する
  --version, -version          バージョン情報
  -Werror                      警告が発生した場合にコンパイルを終了する
```

続いて、システム環境変数に「JAVA_HOME」という変数を追加します。
値はJDKをインストールした場所のパスになります。
追加後、コマンドプロンプトで``set JAVA_HOME``と入力し、以下のようになればOKです。

```
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_181
```

#netbeansをインストール
[こちらのサイト](https://www.oracle.com/technetwork/java/javase/downloads/jdk-netbeans-jsp-3413139-esa.html)から、**netstat8**をインストールします。

#GlassFishをインストール
続いて、webサーバーであるGlassFishを[こちらのサイト](https://download.oracle.com/glassfish/4.1.1/release/index.html)から、**4.1.1**のzipファイルをダウンロードします。
zipファイルは特定の場所に解凍すればOKです。

#Java Webアプリケーションの設定
netbeansを立ち上げ、いよいよプロジェクトの作成！...の前に、以下の設定を行います。
まず、「ツール」バーから「プラグイン」を選択します。
![スクリーンショット 2021-08-02 204021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506986/944643d6-da2c-6454-9500-8353ea3b9b91.png)

「使用可能なプラグインタブ」を開き、「Java EE」と検索し、Java EE Baseのボックスにチェックを入れ、「インストール」をクリックします。
インストールが完了したら、再起動を促すメッセージが表れるので、netbeansを再起動させます。

#プロジェクトを作成
再起動したら、いよいよプロジェクトの作成です。
ファイル->新規プロジェクトを選択し、カテゴリとプロジェクトを下図のように選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506986/bb33713b-8679-0d7a-63c9-032ebc024fa3.png)

「次」を押すと、プロジェクト名とプロジェクトを格納するパスを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506986/16cf307b-a414-bf4a-e395-6b820b34f3f0.png)

続いて、サーバーを指定します。
ここでは、GlassFishを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506986/3c838fa2-7e69-c66f-4bb5-440edead4054.png)

「次」を押すと、サーバーの場所を指定します。
ここで、GlassFishをインストールした場所を指定するのですが、**\glassfish4\glassfish**になるように指定し、「ライセンス契約を読んで同意しました」にチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506986/09ccd4e9-8ee5-ea49-e5c0-a2b5dacf22f5.png)

最後にドメイン名を指定し、「終了」を押せば、サーバーの設定は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506986/9c8c8010-ea0f-cd37-bea6-388eb1e1fea0.png)

続いて、フレームワークを指定します。
ここでは「Java Server Faces」にチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506986/ccee8982-8e09-f2b8-3083-5c1521f3a497.png)

これで、プロジェクトの作成は完了です。

#Hello World的なものを表示させる
プロジェクトバーにあるプロジェクト名を右クリックし、「実行」を押せば、サーバーが立ち上がり、プロジェクトが実行されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506986/75acf6cb-25ae-13ef-52d1-b9b20f4964e3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506986/35c63227-8b45-589d-a0d9-10a7e964f037.png)


無事、「Hello from Facelets」というテキストが表示されました！

#まとめ
JSFは古めのフレームワークだからか、書籍やネットの記事がかなり少ない為、初心者にはとっつきにくいと思います。
しかし、使う現場はある程度あったり、MVC構造の勉強になるので、使ってみてはいかがでしょうか。

#参考文献と引用
[【Win10】NetBeansでJSFの開発環境を構築する](https://qiita.com/kumamonmaster/items/ae71c55933e77c26fdc5)
[GlassFish 4.0のインストールとNetBeans 8.0の連携](https://masatoshitada.hatenadiary.jp/entry/2014/08/26/173922)
[NetBeansでJava Webアプリケーションを作成できません](https://www.it-swarm-ja.com/ja/java/netbeans%E3%81%A7java-web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%BD%9C%E6%88%90%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93/940922741/)