报错:The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes
网上很多的文章都是写着这个是错误是JSP过大导致的,我也曾一度这样认为。
网上的解决方案:
方法1、修改include方式
将<%@ include file=" "%>
改为:``
方法2、修改 Tomcat 的web.xml配置文件,添加如下配置
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>mappedfile</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
mappedfile
: 是否对每个输入行都用一条print语句来生成静态内容,以方便调试。缺省为true。
这样做,只是让Tomcat不为JSP每行都添加print语句,但是实际上,当文件达到一定程度,还是会发生错误,所以最根本的还是尽量减小JSP大小。
其实有个很重要的点,你仔细看报错信息,The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes
,这里说的其实是 _jspService() 方法的代码 超过了65535字节,我们知道,其实jsp也是一个servlet,编译后jsp的内容都会放在service() 方法中。无限的include,将嵌套页面的一些代码全部都塞到了主jsp的 service() 方法中,这样才导致了这个问题。
我们细想,一个方法!这么多代码量!查看费劲维护困难!设计上是不是有点问题?
所以,换个思路,是不是应该把某些较公共的方法抽出来,需要使用时是以调用的形式,而不是copy copy,这里粘一块那边粘一块!这样方法体精简许多,一些不需要关心的逻辑封装成方法也没有影响,还可复用!
抽离出来的方法可以放在 java文件,也可以放在 JSP 中,这里有必要了<% %>、<%! %>、<%=%>这几个标签的区别
文中也提到了,放在<% %>的代码都会怼到 service方法中,所以抽离出的方法要放在jsp的话要放在 <%! %>标签中。
一点点感悟:其实我们遇到问题,不要轻易地直接百度!要有几计的思考哇!至少把报错信息看清楚了