📝Java: Web開発

Java Web開発基礎概念

📝Java Servlet

サーブレット, Javaサーブレット, Java Servletともいう.

📝Web サーバ上で動くJavaのアプリケーションとその仕様.

具体的な主な役割は,

  • ライフサイクル管理
  • マルチスレッド対応
  • プラットフォーム非依存

JavaのWeb開発を語る上で避けられない重要概念. この言葉を起点にしていろんな概念がでてくるので, それらを関係性の中で理解, さらに具体的なソフトウェアまで覚えればより記憶が強固になる.

JSP

JavaServer Pages. HTML内にJavaのコードを埋め込んでおき, Webサーバで動的にWebページを生成してクライアントに返す技術.

MVCでいうところのViewに相当.

サーブレットコンテナ

サーブレットの実行環境. Webコンテナともいう.

Web.xml

クライアントから受信したリクエストをどの Servlet に届けるかを定めた情報.

port のような役割??

Marshalling

マーシャリング. 異なる 2 つのシステム間で, データを交換できるようにデータを操作する処理

Java Web開発アプリケーション

Java Native(HttpURLConnection/HttpClient)

まず注意したいことが, JavaのNative APIで2種類のAPIがある.

  • java.net.HttpURLConnection(HTTP/1.1, Java1.1から)
  • java.net.HttpClient(📝HTTP/2, Java11で追加)

HttpURLConnectionはJava1.1の昔からあるものに対し, Java11で追加されたjava.net.HttpClientはHTTP/2をサポートしている.

そして, 現在はまだHttpURLConnectionを利用したライブラリがあるものの, 将来的にはHTTP/2.0の仕様に合わせたjava.net.HttpClientを内部で利用するライブラリが主流になる.

サードパーティライブラリもこの観点でライブラリ選定をする必要ある. 古くからあるようなJavaのライブラリはHTTP/2.0の対応状況を確認したい.

Spring

📝Jetty

All Javaで実装された📝アプリケーションサーバ & Java Servletコンテナ.

Netty

https://netty.io/index.html

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

NIO はファイルにアクセスするための Java library.

ノンブロッキングフレームワーク. ブロッキングIOに比べて高いスループットが得られ, ノンブロッキングIOを理解することはNettyのコアコンポーネントとそれらの関係を理解するために不可欠. (channel/future/event/handler)

References

Apatch HttpClient

JavaのデファクトスタンダードなHTTPクライアント.

https://hc.apache.org/httpcomponents-client-5.1.x/

OkHttp

最近流行っている? yet another http client. 📝HTTP/2を使える. Apatchよりも信頼性が高い.

https://square.github.io/okhttp/

Java Web開発Insights

💡Java Servletの変遷

ちょっとWikipediaからの推測含む.

もともとJava言語の仕様のなかに梱包されて発展してきた経緯がある(JDK). JavaではWebサーバ抽象が言語に組み込まれているというのは, このServlet APIのことだと推測.

1999にJ2EE(Enterprise向けのAPIセット)の一部に移動. 2005にJSE5として戻る. 2019にJavaの商標が外れてJakartaに変更(javax.servlet -> jakarta.servlet).

💡Java ServletをMVCモデルに当てはめて理解

Railsをやった経験から, MVCで考えると理解が強固になるかも.

JettyとNettyの違いは?

名前が似ているので間違いやすい.

java - What’s the difference between Jetty and Netty? - Stack Overflow

基本的にはJettyがHTTPサーバ用, Nettyは非同期ネットワーク通信用のフレームワーク. どちらもいろいろな機能拡張が追加されて大きくなり, また機能も似てきた.

Netty is a framework to write TCP and UDP applications.

Jetty is a framework to write HTTP applications.