- 「JSP・サーブレットがいつまでたっても分からない…!」
- 「初心者向けに分かりやすく教えてほしい!」
この気持ち、とても分かります…!なぜなら私自身、文系出身のエンジニアとしてこれらを理解するのにとても時間がかかったためです。
そもそもややこしい概念という理由もありますが、簡単な説明だけがなされているサイトがなかなか見つからず、詳細な説明をするサイトばかりがヒットするのもそれに拍車をかけていますね。まだJSPやサーブレットが何も分かっていないのに、そんな詳細を伝えられても分かりません。
そのため、今回は私の理解できなかった経験を活かして、難しい説明は無しにして「とりあえずJSPとサーブレットってなんなんだ?」に焦点を絞ってご紹介したいと思います。ザックリとJSP・サーブレットを理解したい方におすすめです。
JSPとサーブレットってなんだ
それでは、JSPとサーブレットについてお話したいと思います。ザックリ理解してWebアプリケーションの背景を覚えてしまいましょう!
1. まずはJSPとサーブレットは別物と考える
まず初めに私がおすすめするのは、「JSPとサーブレットは別物だ」という前提に立つことです。
サイトを検索していると、よく「JSPとサーブレットは似ている」とか「JSPは実行時にサーブレットになるから結局同じもの」とか言った説明が出てくると思います。もちろんこれらは正しいのですが、初めてJSPとサーブレットを勉強する方にとっては混乱の元でしかありません(実体験)。
結局どう違うんだ、同じなら片方だけで良いじゃないか、とモヤモヤだけが溜まってしまいます。従って、「JSPとサーブレットは別のものだ」という前提に立ちましょう。
2. サーブレットとは
初めにサーブレットから説明します。サーブレットは「WebサーバにあるJava」のことです。今までは何でもかんでも「Java」って言っていたけど、Webサーバで動いているJavaはサーブレットって言うんだな、と思って下さい。
炊く前は「お米」だけど炊いたら「ご飯」になったり、会社では「課長」だけど家では「パパ」だったりするのと同じです。まずはザックリこのように捉えましょう。
ココがポイント
サーブレットとは、「Webサーバで動いているJava」のこと
具体的な動作で見ていきましょう。WebサーバにあるJavaですから、サーブレットはユーザのHTTPリクエストを受けて動き始めます。
例えば、ユーザ名とパスワードを入力してログインボタンを押したとき、そのリクエストをlogin.javaが受けたとします。このlogin.javaはユーザ名とパスワードが一致しているかなどを処理していくと思いますが、このlogin.javaがまさにサーブレットです。
クライアントの「ログインしたい」というリクエストを受けてWebサーバ上で動いているJavaですからね。
サーブレットをコードで理解する
実際にサーブレットはどのようなものか、コードを見てみましょう。
…とはいっても、先ほど申し上げた通り「Webサーバ上で、ユーザのリクエストを受けて動くJava」がサーブレットなので、別に見た目はただのJavaですよ。
@WebServlet("/sample") public class MyServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { String str = "Hello World"; PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>さーぶれっとてすと</title>"); out.println("</head>"); out.println("<body>"); out.println(str); out.println("</body>"); out.println("</html>"); } }
いかがでしょうか。こちらにアクセスをすると「Hello World」が表示されるHTMLページが返却されます。(ログインじゃなくてすみません)
サーブレット特有の書き方(doGetとかHttpServletとか)は初めて見たかもしれませんが、別に普通のJavaの見た目だったと思います。
ぜひサーブレットを怖がらないでくださいね。
3. JSPとは
さっきのサーブレットのコードですが、「JavaのprintlnでHTMLを作っているの?!ダサい!!」と思った方も多いのでしょうか。大丈夫です。その感性は正しいです。すごく読みにくいですよね。
そこでJSPが登場します。JSPについては「HTMLにJavaを埋め込んだもの」と理解しましょう。
実際のコードを見てみましょう。
<% int id = 123; String name = "maimai"; %> <!DOCTYPE html> <html> <head> <title>JSPのさんぷる</title> </head> <body> あなたのIDは<% id %>です。<br> あなたの名前は<% name %>です。 </body> </html>
いかがでしょうか。「HTMLにJavaを埋め込んだもの」がぴったりなコードですよね。
サーブレットだけでもHTMLページを表示できますが、JSPを使った方が分かりやすいので、「サーブレットでHTTPリクエストを受けて、JSPを返す」というのが基本の構成になります。
- ユーザが"https://sample.com/sample"にアクセス
- サーブレットクラスが起動
- いろいろな処理の後、samplePage.jspを返す
- ユーザがウェブページを見れる
4. 注意
今までの説明は、「サーブレットもJSPも聞いたことがない初心者の方が理解する」ことを目標とした説明になっているため、やや現実とはズレている説明もあります。
例えばJSPは「HTMLにJavaを埋め込んだ」と説明しましたが、実はJSPは実行されるときはサーブレットの形式に変更されるので、結局サーブレットだとも言えます。しかしこのような説明は最初の理解には不要です。「JSPがサーブレットに変更されるってどういうこと…?」といった余計な疑問を生んでしまうためですね。
まずは上記のざっくりとした説明で理解してしまい、それでも内部的な事情に興味を持った方だけさらに詳しく学ぶことがおすすめです。
ココがポイント
JSPとサーブレットはまずはざっくりでOK
概要より、コードを書いて内容を学ぼう
まとめ
JSPとサーブレットの違いをざっくりとお伝えしました。
- サーブレット:ウェブサーバで動くJavaのこと
- JSP:HTMLにJavaを埋め込んだもの
まずはここを押さえておけば十分です。あとは実際に触ることがおすすめですよ!
まずはザックリとこれらを押さえましょう。最後までお読みいただきありがとうございました!