-
HTTP 캐시: Tomcat은 HTTP 캐시 메커니즘을 지원하며 응답 헤더에 Cache-Control, Expires 및 ETag와 같은 필드를 설정하여 캐시 정책을 제어할 수 있습니다. 이러한 필드는 응답을 캐시할 수 있는지 여부와 캐시의 유효 기간을 브라우저에 알려줍니다.
-
서블릿 캐시: Tomcat은 또한 동일한 응답이 반복적으로 생성되는 것을 방지하기 위해 서블릿의 응답 콘텐츠를 캐시할 수 있는 서블릿 캐시 메커니즘을 제공합니다. web.xml 파일에서 <cacheable>true</cacheable>을 구성하여 서블릿 캐싱을 활성화할 수 있습니다.
-
세션 캐시: Tomcat은 세션 액세스 속도를 향상시키기 위해 세션 데이터를 메모리에 저장할 수 있는 세션(Session) 캐시를 지원합니다. context.xml 파일에서 <Manager className="org.apache.catalina.session.PertantManager" />를 구성하여 세션 캐싱을 활성화할 수 있습니다.
-
정적 리소스 캐싱: Tomcat은 정적 리소스(예: 이미지, CSS 및 JavaScript 파일)를 캐시하여 파일 시스템에 대한 액세스를 줄일 수 있습니다. context.xml 파일에서 <Resources> 요소를 구성하여 정적 리소스 캐싱을 활성화할 수 있습니다.
프로젝트 작업을 하다가 jsp 페이지를 수정한 후 읽어내지 못하는 현상이 있었습니다. tomcat을 주의깊게 연구한 결과 jsp 페이지가 요청되면 Tomcat이 이를 JspServlet에 할당하여 처리하는 것을 발견했습니다 . 불리언 문장이 있습니다. precompile =
jspServlet preCompile(request)의 service() 메소드에서 jsp 페이지를 요청할 때 ?jsp_precompile 쿼리 문자열이 있는지 판단하고, 가져오면 다시 컴파일한 후 serviceJspFile(request, response, jspUri, null, precompile)을 사용하여 jsp 파일을 컴파일할지 여부를 추가로 판단합니다. 다음은 JspServletWraper 서비스 메서드입니다.
if (options.getDevelopment() || firstTime ) {
synchronized (this) {
if (firstTime) {
firstTime = false;
}
// The following sets reload to true, if necessary
ctxt.compile();
}
}
핵심은 컴파일러의 isOutDated(boolean checkClass) 판단에 있습니다.
판단 기준은 jsp의 마지막 수정 시간이 대상 파일의 마지막 수정 시간보다 길면 재컴파일해야 한다는 것입니다.
또 다른 상황은 jsp의 마지막 수정 시간이 대상 파일의 마지막 수정 시간보다 늦 더라도 jsp의 include 명령에 포함된 파일의 마지막 수정 시간이 대상 파일의 수정 시간보다 빠르면 되는 경우입니다. 해당 대상 파일을 다시 시작해야 합니다. 기본 jsp 파일을 컴파일합니다.