JSP页面变得太长而无法编译

时间:2012-01-04 14:39:11

标签: 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)

我该怎么做才能避免这种例外。?

2 个答案:

答案 0 :(得分:6)

在JSP编译期间,JSP文件的整个主体将放在单个try块中。 Java块可以包含的限制是64KB。 JSP文件生成的Java代码的大小显然超过了该值。

也许你在JSP文件中有很多HTML或条件。您需要将JSP文件拆分为<jsp:include>所包含的较小部分。例如,每个页眉,页脚,菜单,正文和/或有条件显示的部分等一个JSP包含文件。它还有一个额外的优点,即它可以更好地重复使用。

或许,您可能会遵循沮丧的oldschool使用 scriptlets (那些<% %>事物)在JSP文件中编写原始Java代码的不良做法,而Java代码实际上属于普通Java类。 JSP中所有Java代码的Get rid,然后将其移动到一个完整的servlet类中。在那里,你可以自由地编写可重复使用的类/方法,而不是将整个事物放在一个不可维护的“上帝”块中。

答案 1 :(得分:0)

解决了这个问题。

在standlone.xml中,在web子系统下 - &gt;配置添加keep-generated = false。

它对我有用。