[PR]子育てママさんへ:3年毎に15万円うけとれる医療保険?



JSP日記 疲れない程度の実験 03.12.12



前回は疲れた!
 前回は、予想以上に疲れてしまったので、、、今回は疲れない程度の実験をしてみました。


実験1:<%! %>ディレクティブに宣言した変数を、ページアクセス時に++してみるとどうなるか?
<%! %>ディレクティブでstatic int count=0;と宣言し、ページアクセス時にcount++してみた。増加していくことを期待しつつ。

ソースファイル
結果



 値が増加していきました!JSP職人な方には当然のことかもしれませんけど、初心者の私はちょっとビックリしました。

 次にstaticを外してint count = 0;にしてみた。同じ結果になった。っていうことは、ずっと同じオブジェクトにアクセスしているということ?じゃぁ、いつ解放されるの?


実験2:ほんとに同じオブジェクトなのか?
とりあえず、out.printlnでthis,とカレントスレッドを出力してみた。

ソースファイル
こんなん出ました。



同じオブジェクトのようですね。スレッドは微妙に違いますねぇ。スレッドとかはサーバの実装しだいかな?と想像してみた。


実験3:同じオブジェクトだったら、synchronizedしたらページ表示が固まる?排他できるのかなぁ?
 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でも眺めてみようかなぁ。


戻る




[PR]安室さんTV番組で大絶賛:すっきりスリムを目指すならコレ♪