【JSP・サーブレット】なぜ両方必要?基礎知識まとめ

javaでアプリ開発やっていくのにJSPとサーブレットについての知識がおぼろげになっちゃってるのでまとめなおしました。

サーブレット/JSPとは

簡潔にいうと、両方とも「サーブレットはjavaでサーバ側のバックエンド処理」を行います。

異なる点としては「書き方」がちょっと違う、コンパイルなどに違いがあるようで、そこからメリットデメリットも発生します。

サーブレット

java Servletの略称。

書き方としては、通常のjavaのプログラムのように記述していき、処理を行っていきます。

(djangoでいうとviews.pyやurls.pyでやっていることみたいな感じのイメージ)

実行する際にはコンパイルを必要とします。

JSP

JavaServer Pagesの略称

書き方としては、PHPなどのスクリプト言語みたいにHTML内に直接書き込み、処理を行っていきます。

(djangoのHTML内で日常的に記述してる< % static %>みたいな書き方。

JSPは実行の際コンパイルの必要はないです。

なぜ両方必要?

javaでweb開発を行う際は、基本的にサーブレットかJSPどちらか一方だけ使うということはなく、両方使って開発していきます。

どちらも同じ処理を行うならどっちかだけ使ったのでいいような気もしますが、そうなると割と不便だったりします。

サーブレットだけでweb開発していくとなると以下のようにout.printlnを多用しなきゃいけなかったりするのでなかなか不便・・

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/SampleServlet")
public class SampleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

// 運勢をランダムで決定
String[] luckArray = { "大吉", "吉", "中吉","小吉","凶","大凶" };
// 0以上3未満の整数を乱数で生成
int index = (int) (Math.random() * 6);
String luck = luckArray[index];

// 実行日を取得
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
String today = sdf.format(date);

// HTMLを出力
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>運勢占い</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>今日の日にち" + today + "</p>");
out.println("<p>あなたの運勢は..." + luck + "です!!</p>");
out.println("</body>");
out.println("</html>");
}
}

 

こうなるとHTMLを記述する際JSPがとても便利になりますが、逆にバックエンド処理の内容を全部HTMLに書き続けるとHTMLが見にくく、デザイン弄る際などめんどくさいことが増えていきます。

 

そのため、サーブレットで詳しいバックエンド処理を記述し、JSPを使ってその内容をHTMLにも反映させていくなど、両方を使った開発が主流であり、こうすることでHTMLもごちゃごちゃにならず、フロントエンドとバックエンドもわけやすくなる大きなメリットが生まれます。

※デザインとプログラム処理をわけることをロジックとデザインの分離というらしい。

 

(djangoだと全部デフォルトでやってたことだし、そりゃどっちかだけとか不便だろって感じる・・。Rubyでのweb開発もこんなかんじなのかな?))

 

そもそもJSPはサーブレットだけだと不便だから誕生した

そもそもサーブレットはJSPの原型で、サーブレットだけだとロジックとデザインの分離できないし不便だったことからJSPは生まれたようです。

参考:↓

JSPの処理の内容も、Javaサーバーがコードを読み込む際に、まずJSPで書かれたコードをサーブレットのソースコードに変換し、HTMLのタグをprintlnで書きだすみたいです。(JSPのコードをサーブレットのコードにするらしい)

 

※以下のサイト等めちゃ参考になります。さらに詳しく理解したい場合はご覧ください

Qiita

プログラミング学習サービスやら、ペットサロン予約サービス、風俗検索サービスなど色々とやっている「かずきち」です。■運営サ…

サーブレットとJSPを使ったサーバサイドプログラムの方法です…

Java、Java Script、JSPやサーブレットなど似たような名前が点在しています。プログラミングを習い始めた頃や…

 

JSPサーブレットの最新記事8件