すがブロ

sugamasaoのhatenablogだよ

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を使おうということ。
要するに適材適所。何事も使いどころが肝心なんですねー。