java - 如何修复错误 _jspService(HttpServletRequest, HttpServletResponse) 方法的代码超出了 65535 字节限制 Jboss
问题描述
我遇到了在生成的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)
解决方案
您的 JSP 太大/太复杂。你需要重构它
我们尝试重构但它不起作用是否有任何替代解决方案?
不。
问题在于 Java 虚拟机规范对编译的 Java 方法中字节码的字节数施加了硬性限制。(具体来说,类文件格式使用 16 位数字作为方法代码数组的边。)
Java 编译器无法自动将太大的方法拆分为子方法。你必须在源代码级别自己做。
对于 JSP,JSP 编译器将每个 JSP 转换为具有单个(大型)Java 方法的类,除非您可以通过将一些逻辑移动到单独的方法、类或使用“动态包含”的 JSP 来重构它;请参阅https://stackoverflow.com/a/5484509/139985。)
推荐阅读
- c# - 负值最短路径的最快算法?
- python-3.x - 使用 Xarray 在 NetCDF 中将时间更新为 Proleptic Gregorian
- java - 使用 Vector 以编程方式绘制多边形
- azure - 身份验证后重定向到 http 时应该是 https
- angular - ./src/app/app.module.ngfactory.js 中的错误并且无法解析 @ngx-translate 实例
- php - 如何从 MYSQL 表中获取数据到 Android 应用程序
- macos - NSAttributedString size() 方法返回不正确的宽度
- ios - 具有方面拟合图像和自动布局的 UITableViewCell
- python - 如何将字符串转换为参数名称并将其传递给函数?
- android - 如何设置 WorkManager 在后台上传