“The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit” 的我之解決辦法

本文介绍了解决JSP页面因包含文件过大导致的错误方法。通过使用<jsp:include>标签代替<%@include>标签,并利用<jsp:param>进行参数传递,成功解决了65535字节限制的问题。

昨天,我遇到了一個讓我很頭疼的問題。 我做了一個共通的jsp,單只測它是ok的,可是,放在別的jsp中include它,就會報錯如標題所示:The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit。調用它的jsp是這樣寫的:< %@include file="/模塊名/nani_include.jsp" % > 。于是我將這個include語句換成了<jsp:include flush="true" page="/模塊名/nani_include.jsp"/>。不再 報錯了。因為  <%@ include file=" "%>標簽 是在jsp容器里將jsp文件翻譯成servlet文件,并編譯它時,是靜態包含被包含jsp的,也就是編譯出來是一個類文件,而java類文件是不允許超過65k這么大的,所以會報錯如標題所示。而<jsp:include flush="true" page=" "/>在翻譯并編譯后,產生的是兩個類文件,也就是說 被調用的jsp生成獨立的類文件,而調用它的jsp生成的類文件中,只包含一個調用jsp的方法。

可是問題又出現了。參數傳不進去。

解決方法是:調用它的jsp用<jsp:param>傳參。

   <jsp:include flush="true" page="/模塊名/nani_include.jsp">
      <jsp:param name="ss" value="_programForm"/>  
   </jsp:include>

被調用的jsp中,用el表達式接這個參數就好了:

${ss}

(不管里面用什么標簽,name設成“ss”就好了)

 

希望有解決不了問題的人可以看到 呵呵

 

 

JSP编译过程中,可能会遇到生成的Java方法(如 `_jspService` 方法)超出字节限制的问题。这是因为 Java 虚拟机规范中规定,一个方法的字节码最多不能超过 65535 字节[^4]。当 JSP 页面内容过于复杂或包含大量静态 HTML 内容时,会导致 `_jspService` 方法体积过大,从而触发此限制。 ### 解决方案 1. **拆分 JSP 页面** 将大页面拆分为多个较小的 JSP 片段,并通过 `<jsp:include>` 或 `jsp:forward` 引入。这样可以有效减少单个 `_jspService` 方法的大小。 ```jsp <jsp:include page="header.jsp" /> <!-- 主要内容 --> <jsp:include page="footer.jsp" /> ``` 2. **使用 JSTL 和自定义标签库** 避免在 JSP 中嵌入过多脚本代码(Scriptlet),而是使用 JSTL(JSP 标准标签库)或自定义标签来替代复杂的逻辑处理,这有助于将部分逻辑从 `_jspService` 方法中移出。 3. **启用 JSP 预编译机制** 在应用部署前进行 JSP 预编译,可以提前发现并修复此类问题。Tomcat 等服务器支持在构建阶段编译 JSP 文件,避免运行时编译错误。 4. **调整服务器配置(不推荐)** 如果无法对 JSP 进行拆分或重构,可以尝试增加 JVM 的最大堆内存以缓解 OOM 问题,但不能突破 Java 方法字节码长度限制。因此,这不是根本解决办法。 5. **优化页面结构和输出内容** 减少冗余的 HTML 输出、压缩资源文件(如 CSS、JavaScript)以及采用模板引擎(如 Thymeleaf、Freemarker)可以降低 `_jspService` 方法的大小。 --- ### 示例:拆分 JSP 页面 ```jsp <!-- main.jsp --> <jsp:include page="top-nav.jsp" /> <jsp:include page="content-main.jsp" /> <jsp:include page="footer.jsp" /> ``` 每个被包含的 JSP 文件都会生成独立的 `_jspService` 方法,从而避免单个方法过长。 --- ### 总结 由于 Java 方法字节码长度限制是硬性规范,因此最有效的解决方案是合理设计和组织 JSP 页面结构,避免单一页面过于臃肿。优先考虑模块化设计、使用标签库以及引入现代模板引擎等方式,能够从根本上规避此类问题。 ---
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值