- up: 📁Java
- tags: 🔖Web Development
📝Java: Web開発
- ClojureのWeb開発技術: 📝Clojure Web Development
Java Web開発基礎概念
📝Java Servlet
サーブレット, Javaサーブレット, Java Servletともいう.
📝Web サーバ上で動くJavaのアプリケーションとその仕様.
具体的な主な役割は,
- ライフサイクル管理
- マルチスレッド対応
- プラットフォーム非依存
JavaのWeb開発を語る上で避けられない重要概念. この言葉を起点にしていろんな概念がでてくるので, それらを関係性の中で理解, さらに具体的なソフトウェアまで覚えればより記憶が強固になる.
- links.
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
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.
- 非同期 & イベントドリブンのための📝Web アプリケーションフレームワーク.
- Java NIO フレームワーク.
- 簡単に TCP/IP のサーバが作れる.
NIO はファイルにアクセスするための Java library.
ノンブロッキングフレームワーク. ブロッキングIOに比べて高いスループットが得られ, ノンブロッキングIOを理解することはNettyのコアコンポーネントとそれらの関係を理解するために不可欠. (channel/future/event/handler)
References
- 公式 Document: http://docs.jboss.org/netty/3.2/guide/html/
- Getting Started の日本語訳.素晴らしい!
- Java でノンブロッキング IO を使ったネットワークアプリを学ぶのに最適な- Netty 3.5 系の Getting Started を日本語訳しました - しふーのブログ
- イベントドリブンで通信処理を行える Netty 導入編 - Taste of Tech Topics
- Netty の Pipeline と ChannelHandler の関係を学ぶ - Starlight
- Nettyの紹介 - 開発者ドキュメント
- Netty (software) - Wikipedia
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で考えると理解が強固になるかも.
- Model: Javaのクラス
- View: JSP
- Controller: 📝Java Servlet
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.