JSP 런타임 오류 - is exceeding the 65535 bytes limit

전자정부 스프링프레임워크 하에 개발을 진행중이시라면 프론트엔드 쪽은 jsp 페이지로 구성할텐데요. 최근에 스프링부트 마이그레이션 진행하면서 타임리프를 쓴다는걸 배웠으나 러닝커브가 가파르다는 얘기를 듣고 jsp를 버리기는 어렵겠구나 하는 생각을 해보았습니다.

 

새로운 언어의 문법을 익히는 데에도 시간이 소요되며 마이그레이션을 진행한다해도 어느 세월에 완료될지 알 수 없기에 그대로 jsp 를 고수하면서 개발을 진행하기로 합니다.

 

그러던 와중에 'is exceeding the 65535 bytes limit' 이러한 오류 문구를 발견하게 됩니다.

찾아보니 톰캣 서버가 jsp 페이지를 허용하는 크기를 넘어섰을 때 나타내는 오류 문구였습니다.

쉽게 말해 JSP 페이지 용량초과, 다른 말로 풀어낸다면 한페이지에 너무 많은 코드를 때려박았다라고 해야겠네요.

그래서 페이지를 읽어들일 때 오류가 발생했습니다.

 

너무 흔히 발생하는 오류여서 레퍼런스가 많이 있어서 저도 되새김질 하기 위해 정리해둡니다.

 

 

오류 문구

 

Spring Framework 하에 개발 진행 중에 서버와의 통신 중 아래와 같이  'is exceeding the 65535 bytes limit'  문구가 들어간 메시지를 만났다면 jsp 페이지 용량 초과로 풀어내시면 됩니다. 해결방법도 매우 간단합니다.

Stacktrace:] with root cause
org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: [94] in the generated java file: [xxx_jsp.java]
The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit

 

 

먼저 구동중인 tomcat 을 stop 시켜줍니다.

그리고 Tomcat 의 web.xml 을 열어 보시면 servlet 구문이 두개가 있습니다. 그중 아래 구문을 찾아가서 mappedfile 파라미터를 추가해주고 value를 falst로 설정해주시면 됩니다.

 

아래는 기본 tomcat 실행 시 생성된 web.xml 의 내용입니다.

<servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>        
        <load-on-startup>3</load-on-startup>
    </servlet>

 

mappedfile 항목 값을 false로 추가해준 xml 데이터는 아래와 같습니다.

새로이 추가된 저 항목으로 인해 jsp 용량 초과 문제는 해결이 됩니다.

<servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>mappedfile</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>

 

다시 tomcat 을 start 하시고 문제를 일으킨 페이지를 찾아가서 loading 시켜보시면 기존 발생했던 에러는 발생하지 않음을 알 수 있습니다. 

 

공통모듈로 묶어서 외부 jsp 로 보내고 include 방식으로 jsp 페이지 용량 초과 문제를 해결하기도 하지만 여기서는 간단하고 빠르게 조치할 수 있는 방법을 알려드립니다.