方法的代码...超出 65535 字节限制

The code of method ... is exceeding the 65535 bytes limit

提问人:user2334908 提问时间:4/30/2013 最后编辑:AllTooSiruser2334908 更新时间:4/30/2013 访问量:17184

问:

在jsp中,我有一个小标题:

<%@ page import="java.util.*"%>

<% HttpSession CurrentSession =
 request.getSession();
 ...
%>

...和一个大的HTML

<html>
...
</html>

如果我尝试按原样阅读它,我会得到一个错误“......超出了 65535 字节的限制”。我必须打破它。由于我是 java 的新手,我不知道该怎么做。你能给我指路吗?

java jsp .class 文件

评论

0赞 AllTooSir 4/30/2013
你的JSP中是否有任何静态包含?
0赞 Alex D 4/30/2013
这说明了语言/运行时设计人员的重要一点;考虑到您的语言中的程序可能是计算机生成的(也许如果您的语言被用作编译目标)。手写程序永远不会触及的限制很容易给计算机生成的程序带来问题。
0赞 Antimony 4/30/2013
@Alex,但也可以对计算机脚本进行编程,以自动拆分方法。

答:

2赞 Joop Eggen 4/30/2013 #1

JSP 被转换为普通的 Servlet java 源代码,并且某些生成的方法太大,因为方法长度有 64 KB 的限制(在字节码上)。

如果可能的话,将静态包含(实际上嵌入其他 JSP 源代码)更改为动态包含。

解决方案(可能也是很好的风格)也是引入几种方法,将通用代码的各个部分移动到这些方法中。例如,生成一个 HTML 表格行:<tr>

<%@

    void tableRow(String... cellValues) {
        %><tr><%
           for (String cellValue : cellValues) {
               %>  <td><%= cellValue %></td>
  <%
           }
        %></tr>
  <%
    }
%>

...

<%
    tableRow("one", "unu", "un");
    tableRow("two", "du", "deux");
    tableRow("three", "tri", "trois");
%>

附言 上面的方法规模太小,省不了多少,拿大块做法 喜欢更有效。createResultsTable

0赞 McDowell 4/30/2013 #2

标准操作可用于在运行时包含内容 - 请参阅一些随机文档<jsp:include page="foo.html" %>

2赞 eis 4/30/2013 #3

JSP 被编译成 servlet 代码,然后被编译成实际的 java .class 文件。JSP 代码将被放入一个大的 doGet() 方法中,如果您的 JSP 文件非常大,它将达到 65535 的方法大小限制。该限制来自 JVM 规范(“code_length项的值必须小于 65536”)。

您应该将文件拆分为多个文件。我不会像本线程中建议的那样将其拆分为不同的方法,因为在这种情况下,它可以使代码逻辑更加复杂,但要像 McDowell 建议的那样对 HTML 部分执行 jsp:include。