JaeWon's Devlog
article thumbnail
반응형

프로젝트 진행 도중 텍스트로만 구성되었지만, 엄청난 양의 jsp 파일을 화면에 노출하는 경우가 있었다.

개발서버에 해당 파일을 아무런 의심 없이 올리고 확인을 해보려고 하였지만, 계속해서 해당 화면은 확인이 안되고, 비정상적으로 종료되기만 하였다.

로컬에서도 확인을 해보려고 하였을때, 아래와 같은 에러가 확인되었다.

심각: 서블릿 [jsp]을(를) 위한 Servlet.service() 호출이 예외를 발생시켰습니다.
org.apache.jasper.JasperException: JSP를 위한 클래스를 컴파일할 수 없습니다.: 

코드 생성된 자바 파일 [/Users/hwangjaewon/study/coding_test/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/work/Catalina/localhost/test/org/apache/jsp/WEB_002dINF/views/home_jsp.java]의 [85] 행에서 오류가 발생했습니다.
The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit

Stacktrace:
	at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:101)
	at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:213)
	at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:556)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:380)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:350)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
	at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:597)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:383)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:331)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)

 

1. 에러 발생 상황

- 엄청난 크기의 jsp 파일을 tomcat 서버에서 확인하고자 함.

 

2. 원인

- jsp 컴파일 중 기본으로 설정되어있는 jsp 파일의 용량보다 큰 파일이므로 에러 발생.

 

3. 에러 발생시 해결방법

- tomcat 에 있는 web.xml에 아래의 코드를 추가한다.

- Eclipse 기준 : Servers -> Tomcat v8.5 ... -> web.xml

- Linux(개발/운영 서버) 기준 : Tomcat 경로 -> web.xml

<servlet>
	<servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    	...
    <!-- [S]아래 내용을 추가 -->
    <init-param>
    	<param-name>mappedfile</param-name>
        <param-value>false</param-value>
    </init-param>
    <!-- [E]아래 내용을 추가 -->
 </servlet>

- 이후 다시 프로젝트를 실행하게 되면, 정상적으로 화면이 노출된다.

 

4. 번외

- 위 코드를 추가해도 동일한 상황이 발생하는 경우가 있다.

- 이러한 경우에는 아래와 같이 include 되어 있는 페이지가 있다면 동적으로 호출하는 방법으로 해결한다.

//정적 삽입
//jsp 파일이 자바파일로 바뀔때 자바 문서에 삽입되어 컴파일됨
<%@ include file="파일 위치"%>

//동적 삽입
//jsp 파일이 컴파일 된 후 실행중에 삽입됨
<%@ include page="파일 위치"%>

참고

- https://team621.tistory.com/18

반응형
profile

JaeWon's Devlog

@Wonol

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!