2012-01-04 17 views
3

JSPページがあります。時間の経過とともに、何とか長くなっています。JSPページが長すぎてコンパイルできない

最近、私は、JSPページをコンパイルしたと私は

org.apache.jasper.JasperException: Unable to compile class for JSP: 

    An error occurred at line: 320 in the generated java file 
    The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit 

Stacktrace: 
at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102) 
at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:331) 
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:457) 
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:378) 
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353) 
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340) 

が、私はこの例外を避けるために何をすべきコンパイラから例外が発生しましたか。?

答えて

6

JSPコンパイル時に、JSPファイルの本文全体が単一のtryブロック内に配置されます。 Javaブロックに含まれる制限は64KBです。 JSPファイルの生成されたJavaコードのサイズが明らかにそれを超えました。

おそらく、JSPファイルに非常に多くのHTMLまたは条件文があります。 JSPファイルを小さな部分に分割して、それを含むファイルを<jsp:include>に分割する必要があります。たとえば、ヘッダー、フッター、メニュー、本文、および/または条件付きで表示されたパーツなどの1つのJSPインクルードファイルは、再利用が容易であるという利点があります。

または、おそらくあなたはそのJavaコードは、実際に、通常のJavaクラスに属しながら、スクリプトレット(これら<% %>のもの)を使用して、JSPファイル内の生のJavaコードを書くの落胆オールドスクール悪い習慣を追いました。 Get ridのJavaコードをJSPに入れ、完全にservletクラスに移動します。そこには、全体を1つの大きな維持不能な「神」ブロックの中に入れる代わりに、きれいに再利用可能なクラス/メソッドを書く自由があります。

+3

ああ、古いtry-blockの制限、誰でも遅かれ早かれ実行され、適切なJSPコーディングの難しい方法を学ぶ:) – pap

0

問題を解決しました。

(standalone.xml内)、Webサブシステム - >コンフィグレーションでkeep-generated = falseを追加します。

それは私のために働いた。