提问人:user2334908 提问时间:4/30/2013 最后编辑:AllTooSiruser2334908 更新时间:4/30/2013 访问量:17184
方法的代码...超出 65535 字节限制
The code of method ... is exceeding the 65535 bytes limit
问:
在jsp中,我有一个小标题:
<%@ page import="java.util.*"%>
<% HttpSession CurrentSession =
request.getSession();
...
%>
...和一个大的HTML
<html>
...
</html>
如果我尝试按原样阅读它,我会得到一个错误“......超出了 65535 字节的限制”。我必须打破它。由于我是 java 的新手,我不知道该怎么做。你能给我指路吗?
答:
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。
评论