zoukankan      html  css  js  c++  java
  • 部分报错语句:第一句:org.apache.jasper.JasperException: Unable to compile class for JSP: 第二句:The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit

    多次遇到这个问题,记录下解决方案,以备后查,也给后来者一点提示。

    网上很多的文章都是写着这个是错误是JSP过大导致的,我也曾一度这样认为。
    网上的解决方案:
    方法1、修改include方式 (城市大脑项目 是方法1解决的

    将<%@ include file=" "%>  
    改为:<jsp:include page=" " />

    方法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 中,这里有必要了<% %>、<%! %>、<%=%>这几个标签的区别
    可以参考此文: https://www.cnblogs.com/alternative/p/7491647.html
    文中也提到了,放在<% %>的代码都会怼到 service方法中,所以抽离出的方法要放在jsp的话要放在 <%! %>标签中。

    一点点感悟:其实我们遇到问题,不要轻易地直接百度!要有几计的思考哇!至少把报错信息看清楚了吧哈哈

  • 相关阅读:
    嗨,我在京东发现个好东东,还挺便宜
    电车男_百度百科
    罗生门 百度百科
    丹朱AI的日记豆瓣社区(手机版)
    关于美国Amazon的工作情况 JiansNet
    仓廪实而知礼节,衣食足而知荣辱_百度百科
    分享:对linux的IO的再认识
    怎样征服美丽少女的评论 (4)
    代入感 百度百科
    高富帅们 ucla的衣服怎么样啊
  • 原文地址:https://www.cnblogs.com/min-yu/p/13949273.html
Copyright © 2011-2022 走看看