Links User Guide 참고 아파치 톰캣 개발  | Jasper 2 JSP Engine How To| 소개 |  
톰캣 7.0은 Jasper 2 JSP 엔진을 
JavaServer Pages 2.2
명세서를 구현하기 위해 사용합니다. 
Jasper 2는 기존 Jasper의 성능을 향상시키기 위해 다시 디자인 되었습니다. 일반적인 코드 향상 이외에도 다음과 같은
변경이 있었습니다:
 
- JSP 커스텀 태크 풀링 - JSP 커스텀 태크를 위해 사용된 자바 오브젝트가
이제 사용될 수 있습니다. 이는 커스텀 태크를 사용하는 JSP 페이지의 성능을 월등히 향상시킵니다.
 
- 백그라운드 JSP 컴파일레이션 - 만약 여러분이 이미 컴파일된 JSP 페이지를 변경하면 Jasper 2는 그 페이지를
백그라운드로 재컴파일 할 수 있습니다. 기존에 컴파일된 JSP 페이지는 여전히 서버 요구에 따라 이용 가능합니다. 새로운 페이지가
성공적으로 컴파일되면 이는 예전 페이지를 대체하게 됩니다. 이는 여러분의 JSP 페이지가 생산 서버에 반영되기 쉽게 도와줍니다. 
 
- 포함된 페이지가 변경될 때 JSP 재컴파일 하기 - Jasper 2는 컴파일 타임에 JSP가 변경된 것을 감지할 수 있으며
부모 JSP를 재컴파일 합니다.
 
- JDT는 JSP 파일을 컴파일 하는데 사용됩니다 - 이클립스 JDT 자바 컴파일러는 이제 JSP 소스 컴파일을 수행하는데
사용됩니다. 이 컴파일러는 소스 의존도를 컨테이너 클래스로더로 부터 로드합니다. Ant와 javac은 여전히 사용 가능합니다.
 
 
Jasper는 서블렛 클래스를 사용하여 구현됩니다
org.apache.jasper.servlet.JspServlet. 
  |  
 | 설정 |  
 기본적으로 Jasper는 웹 애플리케이션 개발을 위해 설정됩니다.
생산 톰캣 서버를 사용하기 위한 Jasper 설정은 다음에서 정보를 얻으실 수 있습니다
생산 설정  
 Jasper를 구현하는 서블렛은 여러분의 글로벌 $CATALINA_BASE/conf/web.xml에 있는 초기 파라미터를 사용하여
설정됩니다.
 
- checkInterval - 만약 development가 false 이고 checkInterval이 0보다 크면 백그라운드 컴파일이
활성화 됩니다. checkInterval은 JSP 페이지(그리고 그것에 의존해 있는 파일들)가 재컴파일을 해야 하는지 check 하는 
초단위 시간을 뜻합니다. 기본적으로는 
0 초 입니다. 
- classdebuginfo - 클래스 파일이 디버깅 정보와 함께 컴파일 되어야 하는가?
true or false, 기본적으로는 true 입니다.
 
- classpath - 생성된 서블렛을 컴파일하는데 사용되는 클래스 경로를 뜻합니다. 이 파라미터는 오직
ServletContext attribute org.apache.jasper.Constants.SERVLET_CLASSPATH이 세팅되어 있지 않을 때만 효력이 있습니다. 이 
속성은 Jasper가 톰캣 안에서 사용될때는 언제나 세팅되어 집니다. 기본적으로 classpath는 현재 웹 애플리케이션에 따라 다이나믹하게
생성됩니다.
 
- compiler - Ant가 어떤 컴파일러는 JSP 페이지를 컴파일 하기 위해 사용해야 하는가를 결정합니다. 더 많은
정보를 위해서는 Ant 문서를 참고하세요. 만약 값이 세팅되어 있지 않으면 기본적으로 Eclipse JDT Java 컴파일러가 Ant 대신에
사용됩니다. 기본적은 값은 없습니다.
 
- compilerSourceVM - 어떤 JDK 버젼이 소스 파일과 호환이 되는가? (기본 값:
1.6) 
- compilerTargetVM - 어떤 JDK 버젼이 생성된 파일과 호환이 되는가?
(기본 값: 
1.6) 
- development - Jasper가 개발 모드에서 사용되는가? 만약 true이면 어떤 JSP가 수정을 위해 체크되었는지를
확인하는 빈도가 modificationTestInterval 에서 명시될 것 입니다.
true 또는 false,
기본값은 true 입니다. 
- displaySourceFragment - 소스 조각이 예외 메시지에 포함되어야 하는가?
true or false,
기본값은 true 입니다. 
- dumpSmap - JSR45 디버깅을 위한 SMAP 정보가 파일에 덤프되어야 하는가?
true or false, 기본값은
false 입니다. 만약 suppressSmap가 true 이면 false 입니다. 
- enablePooling - 태그 핸들러 풀링이 활성화 되었는지를 결정합니다. 이는 컴파일 옵션이며 이미 컴파일된
JSP의 행동을 바꾸지 않습니다.
true or false,
기본값은 true 입니다.
 
- engineOptionsClass - Jasper를 설정하는 클래스의 옵션을 명시합니다. 만약 없다면 기본
EmbeddedServletOptions가 사용됩니다.
 
- errorOnUseBeanInvalidClassAttribute - useBean 액션의 클래스 속성이 유효한 클래스가 아닐때
에러를 이슈해야 하는가? 
true 또는 false, 기본값은
true 입니다. 
- fork - Ant fork JSP 페이지가 톰캣으로부터 개별적인 JVM에서 실행되는가? 
true 또는 false, 기본값은 true 입니다. 
- genStringAsCharArray - 몇몇 경우에 텍스트 스트링이 char 배열로 생성되어야 하는가?
기본값은 
false 입니다. 
- ieClassId - <jsp:plugin> 태그들을 쓸 때 인터넷 익스플로어로 보내지는 class-id 값.
기본값은  
clsid:8AD9C840-044E-11D1-B3E9-00805F499D93 입니다. 
- javaEncoding - 자바 소스 파일을 생성할 때 사용되는 자바 파일 인코딩.
기본값은 
UTF8 입니다. 
- keepgenerated - 각 페이지에 대해 생성되는 자바 소스 코드를 지니고 있어야 하는가 아니면 지워야 하는가?
, 기본값은  
true 입니다. 
- mappedfile - 디버깅이 쉽게 하기 위해서 각 인풋 라인마다 정적인 컨탠츠와 함께 statement를 출력해야 
하는가? 
true or false, 기본값은 true 입니다. 
- maxLoadedJsps - 웹 애플리케이션을 위해 로드되는 JSP의 최대 갯수. 만약 이보다 많은 JSP가 로드되면
이 한계점을 지키기 위해서 가장 오래전에 사용된 JSP가 언로드 됩니다. 0 또는 그보다 작은 값은 한계점이 없다는 것을
뜻합니다.기본값은 
-1 입니다. 
- jspIdleTimeout - JSP가 언로드 되기 전에 비활성화 되는 초단위 시간. 0 또는 그보다 작은 값은 
언로드 되지 않음을 뜻합니다. 기본값은 
-1 입니다. 
- modificationTestInterval - JSP가 수정되었는지 체크를 한 마지막 시간으로부터 특정 시간 간격동안
(초단위) JSP (그리고 그에 의존한 파일들)가 수정되었는지 체크하지 않도록 합니다. 0 값을 쓰면 매번 접근 시 마다 JSP가
체크됩니다. 개발 모드에서만 사용 가능합니다.
기본값은 
4 초 입니다. 
- recompileOnFail - 만약 JSP 컴파일이 실패한다면 modificationTestInterva가 무시되고 다음 접근이
재컴파일을 시도하는가? 개발 모드에서만 사용되며 기본적으로는 비활성화 되어 있습니다. 이는 과도한 리소스 사용을 막기 위함
입니다. 
 
- scratchdir - JSP 페이지를 컴파일 할 때 어떤 스크래치 디렉토리를 사용해야 하는가? 기본 값은
현재 웹애플리케이션 작업 디렉토리 입니다. 
 
- suppressSmap - JSR45를 위해 SMAP 정보를 생성하는 것이 억압되어 있는가?
Should the generation of SMAP info for JSR45
true 또는 false, 기본값은 false 입니다. 
- trimSpaces - 액션간에 탬플레이트 텍스트를 빈공간으로 해야 하는가 아니면 명령이 다듬어 져야 하는가?,
기본값은 
false 입니다.  재해석 필요!!!
- xpoweredBy - X-Powered-By 응답 해더가 생성된 서블렛에 의해 추가되어야 하는가를 결정합니다.
true or false,
기본값은 false 입니다. 
 
Eclipse JDT에 포함된 자바 컴파일러가 기본 컴파일러로 사용됩니다. 이는 톰캣 클래스 로더로 부터 모든 디펜던시를
로드하는 향상된 컴파일러 이며, 수십개의 JAR를 사용하여 대용량의 설치를 컴파일할 때 많은 도움을 줍니다. 빠른 서버에서
이는 많은 JSP 페이지에서도 서브-세컨드 재컴파일 사이클을 허용합니다.
 
 예전 톰캣 릴리즈에서도 사용된 아파치 안트가 새로운 컴파일로에서도 대신 사용될 수 있습니다. 이는 단순히 
lib/ecj-*.jar 파일을 삭제하고,최신 안트 배포판의 lib 안에 있는 ant.jar 과 ant-launcher.jar 파일로
대체하면 됩니다. 
  |  
 | 알려진 이슈들 |  
bug 39089 에서도 기술되어 있듯이, 알려진 JVM 이슈는
bug 6294277,
java.lang.InternalError: name is too long to represent 예외를 많은양의 JSP를 컴파일 할 때 
발생시킬 수 있습니다. 만약 이러한 상황이 발생할 시에는 이들 중 하나를 사용하면 해결할 수 있습니다:
 
- JSP 사이즈를 줄입니다JSP
 
- SMAP 생성을 비활성화 하고 JSR-045 
suppressSmap을 true로 변경합니다. 
 
  |  
 | Production Configuration |  
 주요 JSP 최적화 방법은 JSP를 미리 컴파일 하는 것입니다. 그러나 이 방법은 Jasper 서블렛 설정이 중요할 때는
가능하지 않거나 실용적이지 않습니다 (예를 들어 jsp-property-group feature를 사용할 때).
 
When using Jasper 2 in a production Tomcat server you should consider making
the following changes from the default configuration.
 
- development - To disable on access checks for JSP
pages compilation set this to 
false. 
- genStringAsCharArray - To generate slightly more efficient
char arrays, set this to 
true. 
- modificationTestInterval - If development has to be set to
true for any reason (such as dynamic generation of JSPs), setting
this to a high value will improve performance a lot. 
- trimSpaces - To remove useless bytes from the response,
set this to 
true. 
 
  |  
  |