【Servletとは】
Servletとは、「Webサーバ上(バックエンド)で動く、Javaで書かれたプログラム」のこと。
サーバ上でウェブページなどを動的に生成したり、データ処理を行うために、Javaで作成されたプログラム及びその仕様。
業務用のWEBシステムを開発するときによく使われている。
【Servletの役割】
Servlet自体は、WEBページをはじめとし画面に関する処理はいっさい行わず、WEBブラウザからの要求に応えたり、送られてきたデータを処理したりする役割を担っている。
ServletはJavaプログラムなので、単独ではWEBアプリ作成するための機能が不十分。
その為「ホームページのファイル(JSP)」や「サーブレットコンテナ」と呼ばれる他のプログラムと連携する必要がある。
(補足)
・Webサーバ:ホームページやWebサービスを置いておくコンピュータ。
・動的なWEBページ:アクセスしたときの状況(ログインの有無など)に応じて異なる内容が表示されるWebページのこと。 例として、ユーザーが書き込むことで内容が増える掲示板サイトやブログ、表示内容がユーザーごとに違うショッピングサイトなどがある。※動的にWEBページを作成することで、WEBアプリを実現することが可能となる。
【ホームページのファイル(JSP)】
JSPとは、HTML内にJavaのコードを埋め込み、動的にWEBページを生成する技術のこと。HTMLファイルとJavaのプログラムが合体したような見た目のソースをしている。
ServletはWEBアプリ内部の処理を担当し、JSPは主にWEBページを担当している。
ServletとJSPが連携することで、動的にWEBページを作ることが可能になる。
~ServletとJSPの違い~
・Servletはがっつりプログラム。それに対して、JSPは基本的にはホームページのファイル(HTMLファイル)。
・処理が始まるときの手順が違う。JSPは処理が始まるときに、Servletに変化する工程が発生する。その為、実際に処理をしているときの姿は同じ(どちらもServlet)。
【サーブレットコンテナ】
例)Tomcat(トムチャット)、Glassfish(グラスフィッシュ)など…
ServletはJavaプログラムなので、実行環境が必要となる。その実行環境となるソフトウェアが「サーブレットコンテナ」である。
厳密に言うと、HTTPリクエストはサーブレットコンテナが受け取り、「サーブレットコンテナがServletに対して処理の命令を出す」流れとなる。
【特徴】
・ライフサイクル管理
(ライフサイクル:処理が始まってから終了するまでの一連の流れ)
通常は、一連の処理が完了したらそれまでに使ったデータを破棄してしまう。
しかし、Servletは一連の処理が終わっても、データを保持して再利用できるようにする。
そのため、最初の1回目は処理に時間がかかるが、2回目はデータを再利用するので処理が早くなる。
頻繁に不特定多数の処理を行う必要があるWEBアプリでは、データをできる限り共有して使いまわした方が効率がよくなるのである。
・マルチスレッド対応
(マルチスレッド;同時に複数の処理をすること。)
1つのプログラムを実行している間は、他のプログラムは実行中のプログラムが処理されるのを待つ必要になるが、
それだと、複数のユーザーから頻繁に同時にアクセスがあるWEBアプリでは、常に順番待ちになってしまい非常に効率が悪くなってしまう。
これを解消してくれるサーブレットは、複数の処理を同時に行うマルチスレッドに対応しているので、複数のユーザーからのアクセスでも効率良く処理を行うことができる。
・プラットフォーム非依存
Servletというよりは、Javaの特徴ではあるが、
Windows、Mac、Linuxなどコンピューターに依存することなく動作させることができる。
【サンプルのコード】
●サーブレットのコード
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
response.setContentType(“text/html;charset=Shift_JIS”);
PrintWriter out=response.getWriter();
out.println(“<html><head>”);
out.println(“<title>Hello, World!!</title>”);
out.println(“</head><body>”);
out.println(“<p>Hello,World!!</p>”);
out.println(“</body></html>”);
}
}
●JSPのコード
<html>
<head>
<title>Hello, World!!</title>
</head>
<body>
<% out.println(“<p>Hello,World!!</p>”); %>
</body>
</html>