JSP/Servlet
よく対比される二つのJavaのサーバサイドプログラム。
JSP書きやすい・Servlet書きにくい
よってJSPの方が優秀。
みたいなことをよく耳にしていて(オレの環境だけかもしれないけど)、なんとなくそんな感じに思っていたんだけど、ちょっと調べたら全然違うことがわかった。
<JSPプログラム>test <% out.println("<h1>hello</h1>"); %>
<Serletプログラム> import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloTest extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>test</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>hello</h1>"); out.println("</body>"); out.println("</html>"); } }
まぁ、結果はまった同じだが、ソースコードは一目瞭然、前者の方が分かりやすい。
しかし、実際のところJSPファイルはServletに変換されて実行されるのだ。
実際に動作させる時のプロセスを簡単にまとめるとこう。
JSP
コンパイル不要。ページにアクセスした瞬間にコンパイルする。
そのため初回のアクセスは長い。しかし、二回目以降は高速。
ソースコードは見やすいが、逆に煩雑になりやすい。
Servlet
事前にコンパイルする必要がある。サーバ上にあるのはclassファイル。
コンパイル済みのため初回からスムーズ。
ソースコードはみにくい。しかしJavaの処理を書くのには適してる(そのままかけるのだから当然)。
こうやって比較をあげてみたけれど、実はそもそも比較することが間違っている。なぜなら両者は同じ立場で存在しているわけではないからだ。
じゃあ何か?
答えは最近流行のMVCという概念。Model-View-Controllerの頭文字で、簡単に説明するとModelは論理部分・処理を表す。ViewはそのModelの結果の出力など、ユーザインタフェイスを担当し、Controllerはその二つをつかさどる。
ようするに役割を分割してソフトウェアを作成しましょって話。
んで、JSPはViewを、ServletはControllerを担当するという傾向がある。
もちろんModelを担当するところを担う技術?もあるけれどそこはあまり知らないのでパス。
さて、話を整理すると、WebのUI部分・・・つまりデザインを表すのに適しているのがJSPで、具体的な処理や振る舞いを作成するのにはServletを使おうということ。
要するに適材適所。何事も使いどころが肝心なんですねー。