p> 기본
구성은 일반적인 구성 정보를 응용 프로그램 수준 및 템플릿에서 사용할 수있는 글로벌 공유 변수에 저장하는 객체입니다. 또한 템플릿 인스턴스의 생성 및 캐싱을 담당합니다. 구성은 실제로 Freemarker.template.configuration 객체의 인스턴스입니다. 일반적으로 응용 프로그램은 공유 단일 인스턴스 구성 객체를 사용합니다.
구성 객체는 템플릿 개체 메소드에서 사용할 수 있습니다. 각 템플릿 인스턴스는 구성 인스턴스와 연관됩니다. 템플릿 생성자와 관련이 있습니다. 일반적 으로이 메소드를 사용하여 configuration.getTemplate별로 템플릿 객체를 얻습니다.
공유 변수
공유 변수는 모든 템플릿에서 사용하도록 정의 된 변수입니다. 구성 객체의 setsharedVariable 메소드를 통해 공유 변수를 추가 할 수 있습니다.
구성 cfg = 새로운 구성 (); ... cfg.setsharedVariable ( "랩", new wrapdirective ()); cfg.setsharedvariable ( "회사", "Foo Inc."); // ObjectWrapper.Default_Wrapper를 사용합니다
이 구성 객체와 관련된 모든 템플릿 인스턴스는 To_upper Converter, 회사를 얻어 문자열을 얻을 수 있으므로이 변수를 계속해서 루팅 할 필요가 없습니다. 루트에 동일한 이름의 변수를 추가하면 새로 추가 된 변수가 이전 공유 변수를 덮어 씁니다.
경고하다!
구성 객체를 MultithReaded라고하는 경우 TemplateModel 구현 클래스를 공유 변수로 사용하지 마십시오. 예를 들어 Servlet 기반 웹 사이트와 같이 스레드되지 않기 때문입니다.
구성 객체는 이미 일부 공유 변환기 변수로 초기화됩니다.
이름 수업
구성 매개 변수
구성 매개 변수는 프리 마커의 작동 동작에 영향을 줄 수있는 매개 변수입니다. 예를 들어 Locale, number_format.
구성 매개 변수는 구성 인스턴스에 저장되며 템플릿 인스턴스로 수정할 수 있습니다. 예를 들어, 구성에서 "en_us"와 동일한 로케일을 설정하면 SetLocale 메소드를 사용하여 단일 템플릿 인스턴스에서 기본 구성을 수정하지 않는 한 모든 템플릿 객체가 "en_us"를 사용합니다. 따라서 구성에 의해 설정된 매개 변수는 기본 매개 변수로 간주 될 수 있으며, 이는 템플릿의 첫 번째 레벨에서 설정된 매개 변수로 덮어 쓸 수 있으며, 다음과 같이 환경에서 설정된 매개 변수 (템플릿 파일 지침이 설정된)에 의해 둘 다에 의해 설정된 매개 변수 정보를 덮어 쓸 수 있습니다.
$ {1.2} <#설정 locale = "en_us"> $ {1.2}이 호출 방법을 3 개의 레이어 (구성 객체 레이어, 템플릿 레이어 및 실행 환경 계층)로 상상할 수 있습니다. 다음 표는 각 레이어의 매개 변수 설정을 보여줍니다.
구성 매개 변수의 최종 결과는 다음과 같습니다.
설정할 수있는 매개 변수 목록을 쿼리하려면 프리 마커 API 문서의 다음 두 부분을 참조하십시오.
모든 구성 레이어
freemarker.core.configurable.setsetting (문자열, 문자열)
구성 레이어 구성
Freemarker.template.configuration.setsetting (문자열, 문자열)
로드 템플릿
템플릿 로더
템플릿 로더는 추상 경로 ( "index.ftl"또는 "products/catalog.ftl")를 기반으로 원래 데이터를로드하는 객체이며, 어떤 종류의 리소스 (데이터베이스의 디렉토리 또는 데이터의 파일 데이터)가 특정 로더 구현에 따라 다릅니다. cfg.gettemplate에 전화하면 프리 마커는 이전 구성 객체로 구성한 템플릿 로더를 요청하여 파일로드를 담당합니다.
내장 템플릿 로더 <br /> 다음 세 가지 방법을 사용하여 템플릿로드를 설정할 수 있습니다.
void setDirectoryfortemPlatEloading (파일 dir);
또는
void setclassfortemplateloading (클래스 cl, 문자열 접두사);
또는
void setservletContextFortemPlatEloading (Object ServletContext, String Path);
위의 첫 번째 방법은 파일 시스템에 디렉토리를 지정합니다. 프리 마커는이 디렉토리에 템플릿을 녹음합니다. 말할 것도없이,이 디렉토리는 존재해야합니다. 그렇지 않으면 예외가 발생해야합니다.
두 번째 방법은 클래스를 입력 매개 변수로 사용합니다. 클래스 로더를 사용하여 템플릿을로드하려면이 메소드를 사용할 수 있습니다. 이 메소드는 템플릿 파일을 찾기 위해 호출됩니다. 동시에,이 템플릿 로딩 방법은 특히 생산 시스템에서 이전 템플릿 로딩 방법보다 더 안정적입니다. 리소스 파일, 아이콘 등을 .jar 파일로 쉽게 패키지 할 수 있습니다.
세 번째 방법은 웹 응용 프로그램의 컨텍스트 및 기본 경로를 매개 변수로 사용합니다 (WEN-INF의 부모 경로에 대해). 이 메소드의 템플릿 로더는 웹 응용 프로그램 컨텍스트에서 템플릿을로드합니다.
여러 위치에서 템플릿을로드합니다
여러 위치에서 템플릿을로드하려면 다른 위치에 해당하는 단일 템플릿 로더를 생성 한 다음 MultitemPlateloader라는 템플릿 로더로 랩핑 한 다음 Method SettemPlateloader (Templateloader Loader)를 통해 구성 객체로 설정할 수 있습니다. 다음은 두 가지 위치에서 템플릿을로드하는 예입니다.
Freemarker.Cache.*; // 템플릿 로더는이 패키지에 라이브 ... FILETEMPLATELOADER ftl1 = 새 FILETEMPLATELOADER (새 파일 ( "/tmp/templates")); filetemplateloader ftl2 = new FiletemPlateloader (새 파일 ( "/usr/data/templates")); ClasstemPlateloader CTL = New ClasstemPlateloader (getClass (), ""); templateloader [] 로더 = 새 templateloader [] {ftl1, ftl2, ctl}; MultitemPlateloader mtl = 새로운 MultitemPlateloader (로더); cfg.settemplateloader (mtl);프리 마커는 먼저 경로 /tmp /템플릿에서 템플릿 파일을 검색합니다. 찾을 수없는 경우 PATH/USR/DATA/TEMPLATES로 돌아갑니다. 찾을 수없는 경우 클래스 로더에로드하십시오.
다른 리소스에서 템플릿 파일을 가져옵니다
이러한 내장 템플릿 로더 중 어느 것도 요구 사항을 충족하지 않으면 템플릿 로더를 직접 사용자 정의하고 Freemarker.cache.templateloader 인터페이스를 구현 한 다음 메소드 SNTEMPLATELOADER (TemplatEloader Loader)를 통해 구성 객체로 전달할 수 있습니다.
캐시 템플릿
프리 마커 캐시 템플릿은 getTemplate 메소드를 통해 템플릿을 얻을 때 프리 마커는 템플릿 객체를 반환 할뿐만 아니라 객체를 캐시한다는 것을 의미합니다. 다음에 같은 경로로 템플릿을 요청하면 캐시의 템플릿 개체를 반환합니다. 템플릿 파일을 변경하면 다음에 템플릿을 얻을 때 프리 마커는 템플릿을 자동으로 다시로드하고 다시 정리합니다. 그럼에도 불구하고 파일이 수정되었는지 여부를 직접 결정하는 데 시간이 많이 걸리는 작업 인 경우 Freemarker는 구성 객체 수준에서 구성 매개 변수 "업데이트 지연"을 제공합니다. 이 매개 변수는 프리 마커가 템플릿의 버전을 결정하는 데 걸리는 시간을 의미합니다. 기본 설정은 5 초이므로 각 5 초가 템플릿이 수정되었는지 여부를 결정합니다. 실시간 판단을 원한다면이 매개 변수를 0으로 설정하십시오. 주목해야 할 또 다른 사항은 모든 로더 가이 판단 방법을 지원하지는 않는다는 것입니다. 예를 들어, 클래스 로더를 기반으로 한 템플릿 로더는 템플릿 파일을 수정 한 것을 찾지 못합니다.
이것이 프리 마커가 캐시에서 템플릿을 삭제하는 방법입니다. configuration 객체 메소드 cleartemplatecache를 사용하여 캐시의 템플릿 객체를 수동으로 명확히 할 수 있습니다. 실제로 캐시 부분은 구성 요소로 프리 마커에 추가 할 수 있습니다 (즉, 타사 캐시 체계를 사용할 수 있습니다). cache_storage 매개 변수를 설정하여이를 달성 할 수 있습니다. 대부분의 개발자가 프리 마커와 함께 제공되는 Freemarker.cache.mrucachestorage를 구현하는 것으로 충분합니다. 이 캐시는 가장 최근에 사용 된 정책의 2 가지 레벨을 사용합니다. 첫 번째 레벨에서 모든 캐시 항목은 강력한 참조를 사용합니다. 항목은 JVM에 의해 명확하지 않으며, 비교적 약한 참조 인 소프트 참조. 최대 시간에 도달 할 때까지 최근에 사용되지 않은 항목은 보조 캐시로 이동됩니다. 이 수준에서는 항목이 만료에 도달 할 때까지 모두 약한 참조입니다. 예를 들어, 강력한 참조 영역을 20으로, 약한 참조 영역을 250으로 설정하려면 다음 코드를 사용할 수 있습니다.
cfg.setCachestorage (New Freemarker.cache.Mrucachestorage (20, 250))
Mrucachestorage는 기본 캐시 구현이므로 다음과 같이 설정할 수도 있습니다.
cfg.setsetting (configuration.cache_storage_key, "strong : 20, soft : 250");
새 구성을 생성 할 때 Mrucachestorage 캐시를 사용하여 기본적으로 구현되며 기본값 MaxStrongsize는 0과 같으며 MaxSoftsize는 integer.max_value (즉, 이론적 최대 값)와 같습니다. 그러나 고 부하 시스템의 경우 MaxStrongsize를 0이 아닌 값으로 설정하는 것이 좋습니다. 그렇지 않으면 템플릿의 재 장전 및 재판매가 자주 발생합니다.
예외 처리
가능한 예외
프리 마커에 의해 생성 된 예외는 일반적으로 다음 범주로 분류 될 수 있습니다.
프리 마커의 초기화 단계에서 생성 된 예외 : 일반적으로 응용 프로그램에서 프리 마커를 초기화하면 되며이 기간에 생성 된 예외를 초기화 예외라고합니다.
로드 및 구문 분석 템플릿 중 예외 : configuration.getTemplate () 메소드를 통해 템플릿을 얻을 때 (템플릿이 이전에 캐시되지 않은 경우) 두 가지 유형의 예외가 생성됩니다.
IOException : 템플릿을 찾을 수 없거나 파일을 읽을 수있는 권한이없는 것 등 템플릿을 읽을 때 다른 IO 예외가 발생하기 때문에; Freemarker.core.parseException 템플릿 파일의 구문이 올바르지 않기 때문에;
실행 중 예외 : Template.Process (...) 메소드를 호출하면 두 가지 유형의 예외가 발생합니다.
IOException 출력에 데이터를 작성할 때 발생하는 오류; Freemarker.template.templatexception 가장 일반적인 오류와 같이 런타임 중에 생성 된 기타 예외는 템플릿이 존재하지 않는 변수를 지칭한다는 것입니다.