JSP日記 疲れない程度の実験 03.12.12
前回は疲れた!
前回は、予想以上に疲れてしまったので、、、今回は疲れない程度の実験をしてみました。
実験1:<%! %>ディレクティブに宣言した変数を、ページアクセス時に++してみるとどうなるか?
<%! %>ディレクティブでstatic int count=0;と宣言し、ページアクセス時にcount++してみた。増加していくことを期待しつつ。
ソースファイル
結果

値が増加していきました!JSP職人な方には当然のことかもしれませんけど、初心者の私はちょっとビックリしました。
次にstaticを外してint count = 0;にしてみた。同じ結果になった。っていうことは、ずっと同じオブジェクトにアクセスしているということ?じゃぁ、いつ解放されるの?
とりあえず、out.printlnでthis,とカレントスレッドを出力してみた。
ソースファイル
こんなん出ました。

同じオブジェクトのようですね。スレッドは微妙に違いますねぇ。スレッドとかはサーバの実装しだいかな?と想像してみた。
synchronized(this)って感じでページで排他してみました。
ソースファイル
こんな結果になった。

止まった。スレッドが別物なので、両方ともsleepしたわけじゃないっぽい。ちゃんとsynchronizedしてるみたい。
Servletに変換された(と思われる)ソースが
/Library/Java/tomcat/work/Catalina/localhost/に入っているので、それをちょっと覗いてみた。
test04.jspの。
public final class test04_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
HttpJspBaseとJspSourceDependentを継承したクラスになってた。HttpServletかと思ったら、apache.orgのクラスになってた。
HttpJspBaseって何者?ってことで
http://ローカルホスト:8080/tomcat/docs/jasper/doc/api/index.htmlを参照しHttpJspBaseを調べてみた。
java.lang.Object
javax.servlet.GenericServlet
javax.servlet.http.HttpServlet
org.apache.jasper.runtime.HttpJspBase
こんな感じだった。なるほどね。これが実際には動いてるのですねぇ。へぇ。
なんとなく、JSPの仕組みが解った (ような気がする)。JSPの下にはServletというものが隠れていることもなんとなく解った(ような気がする)。
もう少し勉強したくなったので、SunのサイトからJ2EE API Documentとチュートリアルをダウンロードしてみた。これと、tomcatについてるAPI Documentでも眺めてみようかなぁ。
戻る