2014年01月27日
Webアプリケーションを作りましょう! その4 JSPとサーブレットでWEBアプリ入門!後編
昨日、JSPを体験していただきましたが、JSPは、やはり手軽です。
HTMLと似た感覚で書けますので、ウェブデザイナーが動的ページを作る際に、
JSPでウェブページを作成し、本格的な処理はプログラマがサーブレットに処理を書く
といった分担ができるわけですね。
3.サーブレットを作成する
では、サーブレットのクラスを作成します。
サーブレットはプログラムなので、WEB-INF/srcに配置します。
上記を右クリックし、新規→クラス→名前に「TestServlet」としました。
ここでは詳しく触れませんが、Servletを動かすには、javax.servlet〜のAPIのimport文を記述します。
(しなくてかけないというわけではありません)
という私も、APIに関しては知識が浅く、たいして語れる知識も持ち合わせていません。
またまたぶっ飛びますが、Javaの重要な技術「継承」もひつようになります。
この「TestServlet」クラスは、親クラスとして「HttpServlet」クラスを継承しています。
継承をすると、親が持っている値やメソッドを自分が定義したように使えるようなイメージです。
例えば、人クラスが鳥クラスを継承すると、空を飛べる。みたいなイメージです。
下記に示すdoGetというメソッドは、「HttpServlet」のメソッドを継承しています。
throwsという表現も出てきますね。
ここでは例外が発生する可能性があるものを書いていると思ってください。
恐らくいないと思いますが、このサイトで1からJavaをやってみた人には、
いきなりぶっ飛んだ記述になってますが、お許しください。
package testWeb;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse;
@WebServlet (name="testsrv" ,urlPatterns= "/testsrv")
public class TestServlet extends HttpServlet{
protected void doGet(HttpServletRequest req,HttpServletResponse resp)
throws IOException,ServletException{
resp.setContentType( "text/html;charset=UTF-8" );
PrintWriter out = resp.getWriter();
String msg = "Servlet動くかなぁ・・・" ;
out.println( "<!DOCTYPE html><html><head><meta charset='UTF-8' />" );
out.println( "<title>Servletで作る動的ページ</title>" );
out.println( "</head><body>" );
out.println(msg);
out.println( "</body></html>" );
}
}
コードの前に書いた補足を読み取れば、何とかコードは読み取れるレベルかな。
タグを打つにも、print文の中に入れなければなりません。
あとは、やたらimportしなければいけませんね。
補足してないところで言うと、
import javax.servlet.annotation.WebServlet;
を使うことで、サーブレットの場所を指定しています。
実行結果は、下記です。
昨日の記事と比較すればわかるように、ただ単に、ウェブページの内容を表示したいだけなら
JSPで作った方が楽です。逆にコードが多くなるなら、サーブレットのほうが楽ですね。
結局、JSPもサーブレットなのです。JSPは実行されるときに、サーブレットソースに変換されてから
コンパイルされて実行しているのに過ぎないのです。
だから、昔の人はJSPなんてなかったから、全部サーブレットで書いていたんだぞ!なんて話をこの間、聞きました。
この技術を応用すれば、ウェブ上で動的ページを作ることが可能なわけです。
意外と簡単でしょう。ウェブアプリ。
ただこれをセキュリティ面、処理速度、I/O、データストアなど、
商用レベルで設計、構築しなければならないと考えると難しくなるのですね。
次は、データベースと連携させてみましょうか。
これができれば、データの受け渡しができるようになるので、
さらにアプリケーションっぽくなりますね。