1.  インストールと設定  

サーブレット(Servlet)とは、JavaでWeb用のHTMLやテキストを出力する機能のことです。 サーブレットコンテナで動作し、動的にHTMLを出力できます。 JSP(Java Server Pages)は、サーブレットとペアで使われます。

Java Servlet(ジャバ サーブレット)とは、サーバ上でウェブページなどを動的に生成したりデータ処理を行うために、 Javaで作成されたプログラム及びその仕様である。Java Servletはサーバサイド技術として登場した。 『ウィキペディア(Wikipedia)』

Java Platform, Standard Edition(Java SE)を使用すると、デスクトップやサーバーでJavaアプリケーションを開発およびデプロイできます。 Java SE Development Kit (JDK)は、JavaSEを利用してJava言語でプログラム開発を行う際に必要な開発用ソフトウェアをまとめたパッケージ。 『Oracle』

Maven は Project Object Model (POM) という考え方に基づき、プロジェクトのビルド、テスト、ドキュメンテーション、成果物の配備など、 プロジェクトのライフサイクル全体を管理します。プロジェクトのビルドツールである。

インストール: JDK:OS X標準。 home brewでMavenインストール。

$ java -version
java version "1.8.0_241"
$ mvn -version
-bash: mvn: command not found
$ brew install maven
$ mvn -version
Apache Maven 3.6.3
Java version: 1.8.0_241,

Eclipse Jettyは、Webサーバーとjavax.servletコンテナーに加えて、 HTTP / 2、WebSocket、OSGi、JMX、JNDI、JAAS、およびその他の多くの統合をサポートしています。 これらのコンポーネントはオープンソースであり、商用利用と配布が可能です。 Jettyプロジェクトは、2009年からEclipse Foundationでホストされています。 『Eclipse』

インストール: home brewでJettyインストール。=> /usr/local/Cellar/jetty/9.4.30.v20200611

$ brew install jetty
$ which jetty
/usr/local/bin/jetty
(org=/usr/local/Cellar/jetty/9.4.30.v20200611/bin/jetty)
$ cd /usr/local/Cellar/jetty/9.4.30.v20200611/libexec/demo-base
$ java -jar ../start.jar
$ cd ./Jetty
$ mvn archetype:generate -DgroupId=com.baeldung -DartifactId=jetty-app -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
$ cd ./jetty-app
$ mvn package
$ cp ./target/jetty-app.war /JETTY_HOME/libexec/webapps/jetty-app.war
$ cd /JETTY_HOME/libexec
$ java -jar start.jar
localhost:8080 localhost:8080/jetty-app


    2.  Webサーバーとjavax.servletコンテナー  

Maven のあらゆる機能は、Maven で使用する堅牢なプラグイン一式によって実現されます。
Maven では、プラグインのそれぞれにゴールがあり、その内部は単なる Java メソッドとなっています。

jetty-maven-plugin: Mavenからjettyを起動。

pom.xml 作成: Maven用ビルド設定ファイル。

ファイルの作成: ディレクトリを作成しpom.xml、servlet.java、index.html、web.xml(パスを記述)を配置。

$ mkdir -p ./Gethome/src/main/{java,webapp/WEB-INF} Gethome$ mvn jetty:run (起動,build)
Gethome ├── pom.xml ├── src    └── main    ├── java    │   ├── servlet.java    │   └── tokei.java    └── webapp    ├── WEB-INF    │   ├── counter.txt    │   └── web.xml    ├── img    │   └── pdg    │   ├── 0.gif    └── index.html
Gethome └── target ├── classes │   └── servlet.class ├── generated-sources │   └── annotations └── maven-status └── maven-compiler-plugin └── compile └── default-compile ├── createdFiles.lst └── inputFiles.lst
pom.xml、web.xml servlet.java、起動、停止(control+c)
localhost:8080 動作確認
Servlet = HTMLのデータを生成するプログラム(本件の場合)。 【1】制御構造(if〜else文、for文、while文)。【2】継承(class〜extends クラスを定義)。【3】メソッドの定義の書き方。 【4】クラスオブジェクトの概念。【5】import文を書く。などを理解し、必要に応じてメソッドの使い方を調べる(API仕様ドキュメント)。 ServletはHttpServletクラスを継承して作成する。実行するにはコンパイルして.classファイルを作成する。 サーブレットの実体は,Webコンテナによって呼び出されるJavaのクラスです。


    3.  WebSocket  

WebSocketは、双方向、全二重、リアルタイムのクライアント/サーバー通信を提供することによって、 サーバーとWebブラウザー間の効率的な通信の制限に対する代替手段を提供します。 サーバーはいつでもクライアントにデータを送信できます。 TCP上で動作するため、低遅延の低レベル通信も提供され、 各メッセージのオーバーヘッドが削減されます。

JSR 356: Java開発者がWebSocketをアプ​​リケーションと統合するために使用できるAPIを指定します。
JavaでWebSocketサーバプログラムを実装するためには、アノテーションとクラスを使用する。

WebSocketエンドポイント: WebsocketクライアントがURIに対してメッセージを送信するたびに、受け取ったメッセージを基にメッセージを作成し、 そのメッセージをレスポンスとして即座に返します。

$ mkdir -p ./WS-Chat/src/main/{java,webapp/WEB-INF} $ git clone https://github.com/ukiuni/WebSocketInspect.git

$ cp ./WebSocketInspect/src/org/ukiuni/inspect/websocket /action/WebSocketEndpointAction.java
./WS-Chat/src/main/java/wsCHAT.java

$ cp ./WebSocketInspect/WebContent/index.html
./WS-Chat/src/main/webapp/index.html

WS-Chat$ mvn jetty:run
WS-Chat ├── pom.xml └── src └── main ├── java │   └── wsCHAT.java └── webapp ├── WEB-INF └── index.html
pom.xml (Maven 依存関係) 動作確認
WebSocket Secure (WSS) は WebSocket の暗号化バージョンです。


    4.  JDBC  

Java Database Connectivity(JDBC)は、Java と関係データベースの接続のためのAPI(Application Programming Interface)。 ODBCをベースにサン・マイクロシステムズおよびDataDirect が共同で開発していると言われている。
そのためドライバのデフォルトの自動コミットの有効化など似ている点も多々ある。 Java においてSQL(問い合わせ言語)を使用して、関係データベース管理システム (RDBMS) などと接続する機能を標準化(抽象化)している。
利用する為には、各DBMS用のJDBCドライバを用意する必要がある。 『ウィキペディア(Wikipedia)』

データベースによって必要とされるプロトコルは異なっている。これを解消するために、
データベースごとにデータベースとJDBC API間の差異を吸収するJDBCドライバが必要になる。

MySQL Connector/J: MySQL用のJDBCドライバ。

$ mkdir -p ./DBmysql/src/main/{java,webapp/WEB-INF} DBselect.java
DBmysql ├── pom.xml └── src └── main ├── java │   └── DBselect.java └── webapp └── WEB-INF └── web.xml
pom.xml (Maven 依存関係)
web.xml
DBmysql$ mvn jetty:run
localhost:8080/DBmysql
$ mysql.server start
Starting MySQL
SUCCESS!

DBmysql$ mvn jetty:run
localhost:8080/DBmysql

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
(クラス `com.mysql.jdbc.Driver 'をロードしています。 これは非推奨です。 新しいドライバクラスは `com.mysql.cj.jdbc.Driver 'です。 ドライバーはSPIを介して自動的に登録され、ドライバークラスを手動でロードする必要は通常ありません。)

web.xml DBupdate.java
index.html
DBmysql$ mvn jetty:run
localhost:8080
localhost:8080/DBupdate localhost:8080/DBselect

PreparedStatement プリコンパイルされた SQL 文を表すオブジェクトです。SQL文は、プリコンパイルされ、 PreparedStatementオブジェクトに格納されます。その後、このオブジェクトは、この文を複数回効率的に実行するために使用できます。


    5.  JNDI  

Java Naming and Directory Interface(JNDI)は、ディレクトリ・サービスが提供するデータやオブジェクトを名前で発見(discover)し、 参照(lookup)するのためのAPIである。他の全てのJava APIと同様、JNDIは他システムに対するインターフェースであり、 具体的な実装からは独立している。またJNDIにはサービス・プロバイダ・インターフェース(SPI)が規定されており、 フレームワークにディレクトリ・サービスの実装をプラグインすることができる。 ディレクトリ・サービスの実装はサーバでもフラットファイルでもデータベースでもよく、サービスの提供側が任意に選択できる。
『ウィキペディア(Wikipedia)』

コネクションプーリング: データベースへの接続は重い処理なので、一度確立した接続を何度も再利用するのが普通である。
コネクションプールはJDBCドライバ上に生成され、JDBCドライバが管理します。
Webアプリケーションでトランザクションを制御する場合は、JNDIからUserTransactionを取得して制御します。



REMARK    

Maven local Repository
$ mvn help:evaluate -Dexpression=settings.localRepository
/Users/user/.m2/repository

Maven local Repository / mysql-connector-java
$ mvn install:install-file -Dfile=mysql-connector-java-8.0.21.jql
-DartifactId=mysql-connector-java -Dversion=8.0.21 -Dpackaging=jarar -DgroupId=mys
/Users/user/.m2/repository/mysql/mysql-connector-j/8.0.21/mysql-connector-j-8.0.21.jar.*




2020.8.30