|
|
 |
連載
Servlet/JSP
Servlet/JSPの違い |
|
1.役割
サーバサイドプログラミングにはサーブレット/JSPの他に、CGI/Perl、PHP、WindowsのASP.NETなどがあります。
サーブレット/JSPはコンパイル型なので、古くから使われているCGI/Perl、PHPのインタープリタ型と比べると、より優れたパフォーマンスを発揮することが出来ます。
ASP.NETは高価なソフトのため、そのコストパフォーマンスを考えるとサーブレット/JSPの方が個人レベルから大規模システムまで幅広く使われるのではないかと思います。
ここでサーブレット/JSPといってもどのように使い分けるのかを簡単に説明していくことにします。
Model-View-Controller(MVC)デザインパターンでは下図のように3つのコンポーネントが構成され、
Model(モデル)はアプリケーションの対象として存在するデータ部分、View(ビュー)はモデルを画面上に表現するユーザインタフェース部分、Controller(コントローラ)はモデルを操作し、
入力の応答を定める部分となっています。
あくまで一選択肢に過ぎませんが、このビュー部分にJSP、コントローラ部分にサーブレットを利用します。
MVCには次のような長所があります。
- 信頼性が高い
- 再利用性と適用性が高い
- 開発期間の短縮
- 開発・メンテナンスのコストダウン
- 保守性に優れる
|
 |
| MVCデザインパターン |
|
| |
2.処理の方式の違い
JSPはHTMLの拡張版のような感じでインタプリタのように思われますが、サーブレットと同様にコンパイル型の言語です。
ただJSPは自動でコンパイルされるため、javacコマンドで手動でコンパイルするサーブレットとは一味違います。
共にコンパイル後は2回目のアクセス以降にメモリに常駐されますので、その後は高いパーフォーマンスを実現することが出来ます。
|
 |
| 処理の方式の違い |
|
| |
3.ソースコードの違い
前に述べたようにJSPは静的なHTMLを中心に、一部を動的なJavaコードで穴埋めしているので、それほどJavaを得意としていないWebデザイナー向けの記述をします。
これにより多くのJavaコードを記述して行くと、ソースコードが読みづらく複雑になってしまいます。
サーブレットはJavaコードの中でHTMLを出力して行く記述で、JSPとは逆にJavaプログラマー向けの記述をします。
HTMLそのものを記述するのではなく、HTMLの文字列をprintメソッドなどで出力する形なので、こちらもHTML部分が増えて行くとJSPと同様に複雑になって行きます。
役割分担を考慮すると共に、お互いのコードのどちらの使用率が高いかということも考慮して行く必要があります。
|
 |
| |
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class DateDisp extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=Shift_JIS");
PrintWriter out =response.getWriter();
Date today=new Date();
out.println("<HTML><HEAD>");
out.println("<TITLE>Servlet Sample</TITLE></HEAD>>BODY>");
out.println("今の時刻は"+today+"です。");
out.println("</BODY></HTML>");
}
}
|
|
| サーブレットのソースコード |
|
| |
 |
| |
<%@ page contentType="text/html;charaset=iso-2022-jp" %>
<%@ page import="java.util.*" %>
<HTML>
<HEAD>
<TITLE>スケジュール</TITLE>
</HEAD>
<BODY>
<%!
String[] week={"日","月","火","水","木","金","土"};
int y,m,d,n;
private void today() {
Calendar calendar = new GregorianCalendar();
y=calendar.get(Calendar.YEAR);
m=calendar.get(Calendar.MONTH)+1;
d=calendar.get(Calendar.DATE);
n=calendar.get(Calendar.DAY_OF_WEEK);
return;
}
%>
<H1>スケジュール</H1>
<%
today();
out.println(y+"年"+m+"月"+d+"日"+"("+week[n-1]+")");
%>
<BR>
本日のスケジュール
</BODY>
</HTML>
|
|
| JSPのソースコード |
|
| |
|
|