- PR -

JSPのメソッド制限

投稿者投稿内容
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-10-13 13:55
うーむ、なるほど確かに。69k ですか。
思ったよりも短いもんですね…。
JSP を自動生成なんてのをさせると困るかも?

と思って、単純に .jsp としてセーブして試してみたところ、ふつうにうまくいきました。ついでに <body></body> 内を倍にしたものでも大丈夫でした。(j2sdk 1.4.1, tomcat 3.2.4)

これは、すべて static なためメソッド内はほぼ out.write() 一文で済んでしまい、
String はコードとは違う部分に入るからでしょう。

ちなみに、「<% out.write("a"); %>」を10000個並べた jsp はアウトです。
out.write * 10000 というコードになるからでしょう。

# もちろん、同様に、「<% out.write("a"); %>[改行]」は 5000行でアウト。
# このへんに ymatsu さんのトラブル解決ヒントがあったり?


[ メッセージ編集済み 編集者: しょむ 編集日時 2002-10-13 14:11 ]
yu
ベテラン
会議室デビュー日: 2002/09/29
投稿数: 58
お住まい・勤務地: 東京
投稿日時: 2002-10-14 12:15
引用:

しょむさんの書き込み (2002-10-13 13:55) より:
これは、すべて static なためメソッド内はほぼ out.write() 一文で済んでしまい、
String はコードとは違う部分に入るからでしょう。



実験結果ありがとうございます。面白いですね。

final static String htmlContent = "XHTML 1.0 ...";
void printFunction() {
out.write(htmlContent);
}
みたいな実装になっているんですよね。

クラスは確か2MBまでOKですし、これなら64KB越え出来るんですね。

あれ、でも、Stringは2MまでOKですが、文字列定数、
つまり、クラスのコンスタントプール内の、CONSTANT_Utf8って、
64KBの制限がありますよね。

ということは、2つ以上の文字列に分割しているのかなぁ。
ymatsu
常連さん
会議室デビュー日: 2002/08/19
投稿数: 22
投稿日時: 2002-10-14 13:31
引き続いてのご意見ありがとうございます。

実は、原意の発端となったJSPはしょむさんがおっしゃられていた
通りにXSLTを利用しての自動生成した産物だったのです。

で、問題のJSPに関してはできるだけJSP内のJavaコードを
JavaBeanに持っていくことで、64Kはクリアできました。
ただサイズ的にまだまだ余裕なのか、デッドゾーンギリギリ
なのか不安なところです(^^;
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-10-14 15:43
ロジック部分は整形部分に関わるところは Bean にもってくとして、
整形に関わる部分は CSS に落とすとか、taglib を使うとかすれば、
さらにシェイプアップできそうですね。
未記入
ぬし
会議室デビュー日: 2002/03/28
投稿数: 255
投稿日時: 2002-10-15 12:37
>ロジック部分は整形部分に関わるところは Bean にもってくとして、
>整形に関わる部分は CSS に落とすとか、taglib を使うとかすれば、
>さらにシェイプアップできそうですね。

たしかincludeとかfowardとかありませんでしたっけ?

たとえば,
1,ヘッダ部
2,本文1
3,巨大なテーブル1
4,本文2
5,巨大なテーブル2
6,本文3
7,後処理
って感じのHTMLを作成したいとすると,例えば,この
1,2,3,4,5,6,7を,それぞれ別のJSPなり
Servletなりにしておいて,必要に応じて呼び出した方が,
柔軟性も増しますしバグも出難くなると思います.
#もちろん小さい場合には無理して分割するまでもないですが.

で,こういう風に分割しただけでも,ちょっとやそっとじゃ64KBを
超えるなんてことは無いはずなんです.

>ということは、2つ以上の文字列に分割しているのかなぁ。

#文字列自体がコンスタントプールに入るってのはその通り.
#だから,たんなるテキストで64KBくらいはへでもない.

#どうやら基本的に一行を一つのStringにするようなコードに
#なってるようですね.もちろん,これは仕様ではないでしょうが.

しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-10-15 16:20
XML + XSLT -> JSP ってことですから、include/forward に落としていくのはちょっと面倒かもですね。複数の JSP を生成したりしなきゃいけなくなるので。

やっぱり問題はどういう JSP が吐かれているのかってとこでは。

たとえば、XSLT で要素繰り返しごとに <% もげもげ %> ってのを吐き出していて、「もげもげ」のバイトコードが先の実験で使った out.print("a"); のバイトコードの10倍程度の大きさ だとすると、要素数がたかだか 100 程度で破綻しますよね。

なんだかそのあたりの作りがよろしくないのではないかと思ったり。

[ メッセージ編集済み 編集者: しょむ 編集日時 2002-10-15 16:22 ]
ymatsu
常連さん
会議室デビュー日: 2002/08/19
投稿数: 22
投稿日時: 2002-10-15 17:16
自動生成されたJSPが分割された状態で吐き出させるのは、
設計をやり直せるなら考えたいところですね。

原因となったJSPではif文による分岐や、一度しか使用しない変数が結構ありましたから。
話の繰り返しになりますが、JavaBeanにロジックを持っていって解決したわけですが、
余裕があればやっぱ設計からやり直したいですね〜(苦笑)


スキルアップ/キャリアアップ(JOB@IT)