Java Servlet は、Java Platform, Enterprise Edition (Java EE) に含まれる Java のサーバーサイド技術。
Servlet は、Java 技術をベースとした web コンポーネントであり、動的なコンテンツを生成するものである。 Servlet は servlet コンテナによって管理される。
他の Java 技術ベースのコンポーネントと同様に、servlet はプラットフォーム非依存の Java クラスである。 Servlet をコンパイルして生成されるクラスファイルは、Java EE に対応した web サーバー上に動的にロードされ、実行される。
コンテナ (しばしば servlet エンジンと呼ばれる) は、servlet 機能を提供する web サーバーの拡張である。 Servlet は、servlet コンテナにより実装されるリクエスト・レスポンスの方法論にのっとって Web クライアントとやりとりを行う。
Servlet コンテナ (servlet container) は、Web サーバーの一部、またはアプリケーションサーバーの一部である。 リクエストとレスポンスのやり取りを行うネットワークサービスを提供し、MIME ベースのリクエストのデコードと MIME ベースのレスポンスの整形を行う。 Servlet コンテナは、servlet の保持と管理も行う。
Servlet コンテナは、Web サーバーに組み込まれることもあれば、Web サーバーのネイティブな拡張 API を通してアドオンとしてインストールされることもある。 また、Web 機能を持ったアプリケーションサーバーに組み込まれていることもある。 場合によっては、アプリケーションサーバーにインストールされることもある。
すべての servlet コンテナは、リクエストとレスポンスのプロトコルとして HTTP をサポートしている。 HTTPS (HTTP over SSL) などの他のプロトコルについては、必ずしもサポートされるわけではない。
Servlet は、他のサーバー拡張機構に対して次のような利点を持っている:
Java Servlet API 3.0 は、Java EE 6 に含まれている。
Java Servlet の仕様は Java Community Process により策定されている。
登場当初は、CGI/Perl の代替技術として注目された。 一般的な CGI とは違い、ページを開くたびに新たにプロセスが立ち上げるわけではなく、1 つのプロセスが複数のリクエストを処理するため、登場当時は CGI と比べて高速であるとして注目された。 しかし、現在では、Perl やその他のスクリプト言語でも 1 つのプロセスが複数のリクエストを処理するようにして使われることが多く、Servlet (Java) よりも記述が楽であるという理由などで、検索系サイトやポータルサイト、ちょっとしたコミュニティサイトなどではスクリプト言語が使われることが多い。
一方で、ミッションクリティカルな領域、金融系、基幹系業務では COBOL の代替として使われ、数多くの情報システムが COBOL から Java へとリプレースされている。 Java はこのようにセキュリティ分野に強い言語であるため、証券会社や金融システムなど確実な処理を必要とする領域では Perl や PHP よりも Java Servlet がよく使われる。
現在もっとも使われている Java 技術のひとつとされている。 JSF や Struts、Seasar2 などは Servlet をベースにしている。