提问者:小点点

如何修复错误方法_jspService(HttpServletRequest,HttpServletResponse)的代码超过了Jboss的65535字节限制


我遇到了生成的 java 文件中第 384 行的错误 方法的代码

_jspService(HttpServletRequest,HttpServletResponse)

超出了65535字节的限制。

我尝试了几种网络解决方案,但问题仍然存在。

我使用Jboss-5.1.0 GA作为服务器。

下面是错误的堆栈跟踪。

An error occurred at line: 384 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:92)
            at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
            at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
            at org.apache.jasper.compiler.Compiler.compile(Compiler.java:335)
            at org.apache.jasper.compiler.Compiler.compile(Compiler.java:313)
            at org.apache.jasper.compiler.Compiler.compile(Compiler.java:300)
            at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:585)
            at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:312)
            at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
            at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:638)
            at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:543)
            at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:480)
            at com.liferay.portlet.PortletRequestDispatcherImpl.dispatch(PortletRequestDispatcherImpl.java:307)
            at com.liferay.portlet.PortletRequestDispatcherImpl.include(PortletRequestDispatcherImpl.java:115)
            at com.liferay.portal.struts.PortletRequestProcessor.doInclude(PortletRequestProcessor.java:284)
            at com.liferay.portal.struts.PortletRequestProcessor.doForward(PortletRequestProcessor.java:255)

共1个答案

匿名用户

您的JSP太大/太复杂。你需要重构它

我们尝试了重构,但它不起作用,还有其他解决方案吗?

号码

问题是Java虚拟机规范对编译后的Java方法中字节码的字节数有硬性限制。(具体来说,类文件格式使用16位数字作为方法代码数组的边。)

Java编译器不能自动将太大的方法拆分为子方法。你必须在源代码级别自己做。

对于JSP,JSP编译器用单个(大的)Java方法将每个JSP翻译成一个类,除非您可以通过将一些逻辑移到单独的方法、类或...使用“动态包含”的JSPs参见https://stackoverflow.com/a/5484509/139985.)