Java Servlet

Java Servlet(ジャバ サーブレット)とは、サーバ上でウェブページなどを動的に生成したりデータ処理を行うために、Javaで作成されたプログラム及びその仕様である。単にサーブレットと呼ばれることが多い。Jakarta EEの一機能という位置づけになっている。この機能を用いてショッピングサイトやオンラインバンキングなどをはじめとする多種多様な動的なWebサイトが構築されている。

概要

Java Servlet 
MVCアーキテクチャにおけるJava Servlet, JSP, JavaBeansの位置づけ

Java Servletはサーバサイド技術として登場した。

同様の技術(すなわち対抗技術)としてはPerlなどを用いたCGIPHPプログラムのプロセスをApache HTTP Server上で動かすことができるmod_phpなどのモジュール、マイクロソフトが提供するASPなどがある。CGIがクライアントのリクエストのたびに新しいプロセスを起動するのに対して、サーブレットはメモリに常駐して、リクエストのたびにプロセスより軽量なスレッドを起動するので、効率がよい。また、サーブレットはJavaで書かれているのでさまざまなプラットフォームで使うことができる。

Servlet 2.3からは、フィルター機能が追加され、Servletの実行前後に処理を差し込むことが可能となった。

サーブレットの技術の延長としてJSPがあるが、JSPはサーブレットを自動生成して動作している。厳密に言えばサーブレットとJSPは違う技術だが、これらは組み合わせて使うのが一般的なため、JSPもサーブレットの一部として扱われることが多い。

サーブレットの実行環境(実行するためのソフトウェア)はWebコンテナ、またはサーブレットコンテナと呼ばれる。これらの言葉はあまり区別されずに使われることも多いが、純粋にサーブレットの処理を行うものをサーブレットコンテナと呼び、サーブレットコンテナを含みJSPやHTTPサーバとしての機能も含むものをWebコンテナと呼ぶ傾向がある。

Webコンテナとしては、Apache Tomcat, Jetty, BEA WebLogic Server, IBM WebSphere Application Server, Resin, JBossなどがある。

サーバサイドJava

当初、JavaはAppletなどのクライアント側でJavaプログラムを稼動させるクライアントサイドの技術として注目を集めていた。しかし、サーブレットの登場以降、サーバ側でJavaプログラムを稼動させる形態が急速に普及した。こうしたサーバ側でJavaプログラムを稼動させる形態をサーバサイドJavaと呼ぶ。

役割

JSPの登場により、Java Servletはデータの入出力処理 (Controller) を担当することが推奨される。これはModel View Controller (MVC) による役割付けである。

歴史

Servletの歴史
バージョン リリース プラットフォーム 内容
1.0 1997/01 -- --
2.0 JDK 1.1 Java Servlet Development Kit 2.0の一部としてリリース
2.1 1998/11 -- 公式な初版、RequestDispatcher, ServletContextを追加
2.2 1999/08 J2EE 1.2, J2SE 1.2 J2EEの一部となる
2.3 2001/08 J2EE 1.3, J2SE 1.2 Filter機能追加
2.4 2003/11 J2EE 1.4, J2SE 1.3 web.xml にXML Schema を利用
2.5 2005/09 JavaEE 5, JavaSE 5 JavaSE 5が必須となる, annotationをサポート
3.0 2009/12 JavaEE 6, JavaSE 6 開発容易性の実現, 動的設定, login/logoutメソッドサポート, 非同期Servlet, アノテーションSecurity, Fileアップロード
3.1 2013/05 JavaEE 7 クラウド対応, ノンブロッキング処理用I/O APIの追加, WebSocket等へのプロトコルアップグレードの対応, セキュリティ機能の強化
4.0 2017/09 JavaEE 8 HTTP/2サポート
4.0.3 2019/09/10 Jakarta EE 8 「Java」の商標から名前が変更
5.0 2020/10/09 Jakarta EE 9 APIがパッケージjavax.servletからjakarta.servletに移動
6.0 2021/10/15 Jakarta EE 10 非推奨の機能の削除と、リクエストされた拡張機能を実装

以下は、service()メソッドが何回呼ばれたかを出力する単純なサーブレットである。

サーブレットはServletインタフェースを実装する必要がある。サーブレットの実装は通常、プロトコルに依存しない抽象クラスであるGenericServletか、HTTP用のサブクラスであるHttpServletクラスを継承することで行う。この例ではHttpServletクラスを継承している。

service()メソッドはサーブレットのリクエストごとの処理を記述するメソッドである。HttpServletクラスを継承する場合、ここからさらにdoGet(), doPost(), doPut(), doDelete()といったHTTPメソッドごとのメソッドに分岐させることができる。ただし、以下の例ではその機能を使わず、直接service()メソッドをオーバーライドしている。

import java.io.IOException;   import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;  public class ServletLifeCycleExample extends HttpServlet {       private int count;       @Override     public void init(ServletConfig config) throws ServletException {         super.init(config);         getServletContext().log("init() called");         count = 0;     }       @Override     protected void service(HttpServletRequest request, HttpServletResponse response)             throws ServletException, IOException {         getServletContext().log("service() called");         count++;         response.getWriter().write("Incrementing the count: count = " + count);     }       @Override     public void destroy() {         getServletContext().log("destroy() called");     }  } 

Web.xml定義

Web.xml定義
バージョン 定義内容
2.3

http://java.sun.com/dtd/web-app_2_3.dtd">

2.4

http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

2.5

http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

3.0

http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

3.1

http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">

脚注

関連項目

外部リンク

Tags:

Java Servlet 概要Java Servlet サーバサイドJavaJava Servlet 役割Java Servlet 歴史Java Servlet Web.xml定義Java Servlet 脚注Java Servlet 関連項目Java Servlet 外部リンクJava ServletJakarta EEJavaウェブページサーバプログラム (コンピュータ)

🔥 Trending searches on Wiki 日本語:

ダルビッシュ有大東駿介機動戦士ガンダム 水星の魔女メジャー (アニメ)太宰治ローマの休日小野花梨広河隆一日本テレビ放送網おねがい☆ティーチャー華原朋美りんごちゃん (ものまねタレント)いないいないばあっ!勃起テネリフェ空港ジャンボ機衝突事故丘みどり日本調教馬の日本国外への遠征ウィキペディア岡部元信アリー・デベリー新世紀エヴァンゲリオン黒木華異世界のんびり農家転生したらスライムだった件イクイノックス森迫永依鈴木敏夫深津絵里関ジャニ∞アルカトラズからの脱出鶴岡慎也日本のアナウンサーバイオハザードシリーズの登場人物ロサンゼルス・ドジャースONE PIECE (アニメ)清原果耶キャスパー (映画)金子勇 (プログラマー)天才てれびくんシリーズの出演者・登場キャラクター明石家さんま特捜9片瀬美月戦術核兵器海賊 (ONE PIECE)アーロン・ジャッジ甲斐拓也シン・ウルトラマン東京スカイツリー波瑠峰さを理菊地姫奈なにわ男子松井裕樹唐橋ユミ日本出身のメジャーリーグベースボール選手一覧MIX (漫画)スティーブン・クワンアメリカ合衆国大統領の一覧アイナ・ジ・エンド葵わかな北条氏康足利尊氏選抜高等学校野球大会女子高生コンクリート詰め殺人事件所ジョージ坂本勇人マックス・シャーザー【推しの子】フリーメイソンとよ田みのるトレバー・バウアー新庄剛志パンテラウイリー・ドーシー澤田有也佳アタリショック岩田絵里奈🡆 More