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

use*_*196 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)
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 6

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

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

或者,也许你遵循了沮丧的oldschool使用scriptlet(那些<% %>东西)在JSP文件中编写原始Java代码的不良做法,而Java代码实际上属于普通的Java类.摆脱 JSP中的所有Java代码,然后将其移动到一个完整的servlet类中.在那里,你可以自由地编写可重复使用的类/方法,而不是将整个内容放在一个大的不可维护的"上帝"块中.

  • 啊旧的try-block限制,每个人迟早都会遇到错误并且难以学习正确的JSP编码:) (3认同)