サーブレット&JSPとは? 概要と2つの役割の違いを解説
サーブレット&JSPはどちらもサーバーで動作するJavaのプログラムで、サーブレットとJSPはサーブレット&JSP、サーブレット/JSPといったようにまとめて表現されることが多いです。なぜなら、どちらもWEBアプリケーションを実現する際に組み合わせて使用することが多く、JSPはサーブレット技術の応用だからです。サーブレットの機能はサーブレットクラスというクラスを使用して実現し、JSPの機能はJSPファイルを使用して実現します。
しかし、結局JSPファイルは実行時にサーブレットクラスに変換されます。よって実現できることに大きな違いはありません。この2つは記述方法の違いからそれぞれに適した役割があるのです。端的に表現するならば、サーブレットは、他のプログラムへの指示出しをする役割、JSPは画面表示を行う役割です。それぞれの概要と違いを見ていきましょう。
サーブレットとは
サーブレットクラスにより実現され、サーブレットクラスは、doGetメソッドとdoPostメソッドを実装しています。どちらもサーブレットクラスが呼び出された際に実行されますが、どちらが実行されるかは呼び出した側で指定します。
下記はHTMLのフォームタグによりサーブレットを呼び出すサンプルです。
<form action="/example/WantedServlet" method="post"> 名前:<input type ="text" name="name"><br> パスワード:<input type="pass" name="pass"><br> <input type="submit" value="ログイン">
action属性で呼び出されるサーブレットクラスを指定し、method属性で"post"を指定しています。フォームが送信されるとwantedServletのdoPostメソッドが実行されます。method属性を"get"と記述した場合はdoGetメソッドが実行されます。
さらに、同メソッド内で処理を分けることも可能で、そのためにはリクエストパラメータを使用します。下記は上の行がリクエストパラメータを使用していないリンク、下の行がリクエストパラメータを使用しているリンクです。
<a href ="/example/WantedServlet" >戻る</a><br /> <a href ="/example/WantedServlet?action=done">登録</a>
こうすることで、サーブレットのdoGetメソッド内では、リクエストパラメータがない場合と"done"の場合で、if文等で処理を振り分けることができます。
このようにサーブレットはユーザーのアクションに合わせて、様々な処理を実行することができます。その処理内容の中に、クラスを呼び出す、値を格納する、画面を呼び出す等を記述すれば様々な機能が実装できるのです。よって、サーブレットはサーバー内での指示出しの役割として適しているといえます。
JSP(Jakarta Server Pages)とは
JSPファイルにより実現されます。下記がファイルの一例です。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <%String hello="Hello World";%> <%=hello %> </body> </html>
以上のように、HTMLコードを骨子にJavaコードを埋め込む形式です。よって、JSPは画面表示をすることに適していると言えるでしょう。
サーブレットからの指示で画面を表示し、入力された情報をサーブレットに渡す、サーブレットから渡された情報を画面に表示する、といったユーザとのインターフェースの役割を果たします。
具体例
ログイン機能を用いて具体的な役割をみていきましょう。ログイン機能は主に下記で実現されます。
- ①ログインを行うための入力画面の表示
- ②入力された情報をデータベースへ問い合わせて照会
- ③照会結果を画面に表示
まずは、ユーザーIDやパスワードを表示するログイン画面ですが、これは主にJSPファイルにより実現します。そしてその入力画面で記入された情報がサーバへ送られ、データベースへの問い合わせが必要になります。入力画面からの情報を受け取り、問い合わせの指示を出すのがサーブレットの役割で、これはサーブレットクラスにより実現します。
サーブレットクラスで照会作業もできますが、一般的には、Javaのクラスファイルを別で作成し、そのクラスに処理を任せます。照会作業の成否を別で作成したクラスから受け取り、その結果を元にログイン成功画面あるいは失敗画面を表示するJSPファイルを呼び出すのがサーブレットクラスの役割です。
ログイン画面とログイン情報入力後の画面表示を行うのがJSP、JSPに入力されたユーザー情報を元にデータベースを照会するクラスを呼び出し、その結果を元に適切なJSPを呼び出すのがサーブレットです。
MVCモデル
先の例はMVCモデルに当てはめるて考えるとさらに理解が深まります。MVCモデルはデザインパターンと呼ばれる過去の偉人たちがまとめたアプリケーション構造の黄金パターンの一種です。
MはModelの頭文字で、アプリケーションの中核となる処理を、Vはviewの頭文字で、ユーザーへの画面表示を、CはControllerの頭文字でユーザからの要求を受け取り、処理をModelに依頼し結果表示をViewに依頼します。今回の例では、実際にデータベースへの問い合わせを行ったクラスをM、画面表示を行ったJSPをV、指示出しを行ったサーブレットをCに当てはめることができます。このモデルのメリットはソースコードがわかりやすくなるだけでなく、実際の開発現場での作業分担にも効果を発揮するという点で、Modelはデータベースに詳しい担当者、ViewはデザインセンスのあるWebデザイナーといったような担当別の分業が可能となります。
サーブレット&JSPの動作環境
サーブレット&JSPはJakarta Enterprise Edition(Jakarta EE)※という機能セットに含まれています。Java Standard Edition(Java SE) で最低限のJavaプログラムを作成できますが、企業用の大規模システム開発やWEBアプリケーションを作成する際にはJakarta EEが必要になります。これらの機能を利用するためにはアプリケーションサーバにJakarta EEをインストールする必要があります。そうすることで、サーブレットコンテナと呼ばれる実行環境が用意されサーブレット&JSPは機能することができます。
※管理会社が変更となったことでJava EEから改名しました。
まとめ
- ・サーブレット&JSPは主にWEBアプリケーションを実現するために使用されるJavaプログラムである。
- ・サーブレットは、主にサーバー内での各機能への指示を出す役割。
- ・JSPは主に画面表示を行う役割。
- ・MVCモデルを活用すると役割分担が明確になる。
サーブレット&JSPの概要と役割の違いを紹介しましたが、この二つはJavaでWEBアプリケーションを実現するために重宝する技術です。より深いWEBアプリケーションの理解への足掛かりとなれば幸いです。