??????????? Java ????????棨???JSP??????????????????????????????????????????????ù?JSP???JSP ??????????????????????? web ??????????? ??????????Щ????С?£?????????????????????????????header.jsp ?? footer.jsp????????????????????????????????????????????????????????????????????? FreeMarker ??塣FreeMarker ????????????????????????й???? FreeMarker ???????????Щ???????????????? web ?????? FreeMarker??

????1?????????? PermGen ????
????????????????Java Web??ó???????????????? JVM ?? PermGen ??????????????????? FreeMarker ??岻??????????????? PermGen ??????????????μ?????????????
????2??????????
??????????????????????????????????? CMS ???????????????????????????????????????2?????????ó?????????????????? JSP ?????????????????????? FreeMarker ????????????????? ?????????????????????????????????????
????ClassTemplateLoader????classpath?м?????塣
????FileTemplateLoader??????????д????????м?????塣
????StringTemplateLoader???????????? Map ?м?????塣
????URLTemplateLoader???? URL ?м?????塣 ????????? getURL ??????????ú???????????
????WebappTemplateLoader???? servlet ???????м?????塣
????FreeMarker ???????????????????????γ????????????????????????? WebappTemplateLoader ??? WEB—INF ?????????????С?
????Configuration configuration = new Configuration();
????configuration.setTemplateLoader(
????new WebappTemplateLoader(servletContext?? "WEB-INF/content"));
????3???????????????????
????FreeMarker ????????????????壬?????????? ??????? JSP ?е? header ?? footer ??FreeMarker ??????????????壨???????? head.ftl??
????<head>
????<title>${title}</title>
????</head>
?????????????????????壨site.ftl body??????
????<html>
????${body}
????</html>
??????????????????????????? body ???????????????????????????????????????????????????????? body ?????? JSP ????????????Щ??
????4????е???
????JSP ??????????????????????????????? Java ???????FreeMarker ??壬???????????塣????????????????????У??????????????????
????5????? JSP ???
??????? Jsp ????????????п??????????????????? FreeMarker ??? JSP ??????????????????? FreeMarker ?????????? JSP ????
????6???????????е????????
???????????????? Servlet 3.0/El 2.2 ???????????????????????з?????????????????????????????? EL ?????з???????????????£?????????????????????? JSP ?????????? ???? FreeMarker ???????????????á?
????${customer.address.country}
????${customer.getAddress().country}
????7. ??????????????
????FreeMarker ?? Jsp ????????????????д????????? FreeMarker ??????????????Щ??
????Invoice Date: ${(customer.invoice.date)!}
???????????? FreeMarker ??????????? null ?????????????? customer??invoice ???? date ???????????????????????????????:
????Invoice Date:
???????????????????????????????
????Invoice Date: ${(customer.invoice.date)!'No Invoice Available'}
??????????????????????:
????Invoice Date: No Invoice Available
??????μ????????????????????
????8?????????
????FreeMarker ?????????????????“????”?????????????????????????????????????????? ???磬??????????ó????????????????????
????Configuration configuration = new Configuration();
????configuration.setSharedVariable("app"?? "StackHunter");
??????????κ????????????????????
????App: ${app}
??????????ù?????????????????? ???????? ${i18n.resourceBundle.key} ?????????????????
????${i18n.countries.CA}
????${i18n.countries['CA']}
????${i18n.countries[countryCode]}
??????????Щ?ж????? countries_en.properties ???????? key “CA”????????????????????? TemplateHashModel????????????????????????????????
????9????? JSON
????FreeMarker ???? JSON ???? ???????????μ? JSON ?洢?????????? user ????????С?
????{ 'firstName': 'John'?? 'lastName': 'Smith'?? 'age': 25?? 'address': { 'streetAddress': '21 2nd Street'?? 'city': 'New York'?? 'state': 'NY'?? 'postalCode': 10021 }}
??????? ?eval ???????????????? JSON ?????????????????????????????á?
????<#assign user = user?eval>
????User: ${user.firstName}?? ${user.address.city}
????10?????????? Web ????
???????? JSP ???????FreeMarker ???????? servlet ?????????á?????????????????????????? ????????? XML ???????????????????????????? web ? ?????????????????????????С? ????????? web ?????????? FreeMarker?? web ??????????????????