in freemarker-javax-servlet/src/main/java/freemarker/ext/servlet/FreemarkerServlet.java [555:707]
private void initialize() throws InitParamValueException, MalformedWebXmlException, ConflictingInitParamsException {
config = createConfiguration();
// Only override what's coming from the config if it was explicitly specified:
final String iciInitParamValue = getInitParameter(Configuration.INCOMPATIBLE_IMPROVEMENTS_KEY);
if (iciInitParamValue != null) {
try {
config.setSetting(Configuration.INCOMPATIBLE_IMPROVEMENTS_KEY, iciInitParamValue);
} catch (Exception e) {
throw new InitParamValueException(Configuration.INCOMPATIBLE_IMPROVEMENTS_KEY, iciInitParamValue, e);
}
}
// Set FreemarkerServlet-specific defaults, except where createConfiguration() has already set them:
if (!config.isTemplateExceptionHandlerExplicitlySet()) {
config.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER);
}
if (!config.isLogTemplateExceptionsExplicitlySet()) {
config.setLogTemplateExceptions(false);
}
contentType = DEFAULT_CONTENT_TYPE;
// Process object_wrapper init-param out of order:
wrapper = createObjectWrapper();
if (LOG.isDebugEnabled()) {
LOG.debug("Using object wrapper: " + wrapper);
}
config.setObjectWrapper(wrapper);
// Process TemplatePath init-param out of order:
templatePath = getInitParameter(INIT_PARAM_TEMPLATE_PATH);
if (templatePath == null && !config.isTemplateLoaderExplicitlySet()) {
templatePath = InitParamParser.TEMPLATE_PATH_PREFIX_CLASS;
}
if (templatePath != null) {
try {
config.setTemplateLoader(createTemplateLoader(templatePath));
} catch (Exception e) {
throw new InitParamValueException(INIT_PARAM_TEMPLATE_PATH, templatePath, e);
}
}
metaInfTldSources = createDefaultMetaInfTldSources();
classpathTlds = createDefaultClassPathTlds();
// Process all other init-params:
Enumeration initpnames = getServletConfig().getInitParameterNames();
while (initpnames.hasMoreElements()) {
final String name = (String) initpnames.nextElement();
final String value = getInitParameter(name);
if (name == null) {
throw new MalformedWebXmlException(
"init-param without param-name. "
+ "Maybe the web.xml is not well-formed?");
}
if (value == null) {
throw new MalformedWebXmlException(
"init-param " + StringUtil.jQuote(name) + " without param-value. "
+ "Maybe the web.xml is not well-formed?");
}
try {
if (name.equals(DEPR_INITPARAM_OBJECT_WRAPPER)
|| name.equals(Configurable.OBJECT_WRAPPER_KEY)
|| name.equals(INIT_PARAM_TEMPLATE_PATH)
|| name.equals(Configuration.INCOMPATIBLE_IMPROVEMENTS)) {
// ignore: we have already processed these
} else if (name.equals(DEPR_INITPARAM_ENCODING)) { // BC
if (getInitParameter(Configuration.DEFAULT_ENCODING_KEY) != null) {
throw new ConflictingInitParamsException(
Configuration.DEFAULT_ENCODING_KEY, DEPR_INITPARAM_ENCODING);
}
config.setDefaultEncoding(value);
} else if (name.equals(DEPR_INITPARAM_TEMPLATE_DELAY)) { // BC
if (getInitParameter(Configuration.TEMPLATE_UPDATE_DELAY_KEY) != null) {
throw new ConflictingInitParamsException(
Configuration.TEMPLATE_UPDATE_DELAY_KEY, DEPR_INITPARAM_TEMPLATE_DELAY);
}
try {
config.setTemplateUpdateDelay(Integer.parseInt(value));
} catch (NumberFormatException e) {
// Intentionally ignored
}
} else if (name.equals(DEPR_INITPARAM_TEMPLATE_EXCEPTION_HANDLER)) { // BC
if (getInitParameter(Configurable.TEMPLATE_EXCEPTION_HANDLER_KEY) != null) {
throw new ConflictingInitParamsException(
Configurable.TEMPLATE_EXCEPTION_HANDLER_KEY, DEPR_INITPARAM_TEMPLATE_EXCEPTION_HANDLER);
}
if (DEPR_INITPARAM_TEMPLATE_EXCEPTION_HANDLER_RETHROW.equals(value)) {
config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
} else if (DEPR_INITPARAM_TEMPLATE_EXCEPTION_HANDLER_DEBUG.equals(value)) {
config.setTemplateExceptionHandler(TemplateExceptionHandler.DEBUG_HANDLER);
} else if (DEPR_INITPARAM_TEMPLATE_EXCEPTION_HANDLER_HTML_DEBUG.equals(value)) {
config.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER);
} else if (DEPR_INITPARAM_TEMPLATE_EXCEPTION_HANDLER_IGNORE.equals(value)) {
config.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
} else {
throw new InitParamValueException(DEPR_INITPARAM_TEMPLATE_EXCEPTION_HANDLER, value,
"Not one of the supported values.");
}
} else if (name.equals(INIT_PARAM_NO_CACHE)) {
noCache = StringUtil.getYesNo(value);
} else if (name.equals(INIT_PARAM_BUFFER_SIZE)) {
bufferSize = Integer.valueOf(parseSize(value));
} else if (name.equals(DEPR_INITPARAM_DEBUG)) { // BC
if (getInitParameter(INIT_PARAM_DEBUG) != null) {
throw new ConflictingInitParamsException(INIT_PARAM_DEBUG, DEPR_INITPARAM_DEBUG);
}
debug = StringUtil.getYesNo(value);
} else if (name.equals(INIT_PARAM_DEBUG)) {
debug = StringUtil.getYesNo(value);
} else if (name.equals(INIT_PARAM_CONTENT_TYPE)) {
contentType = new ContentType(value);
} else if (name.equals(INIT_PARAM_OVERRIDE_RESPONSE_CONTENT_TYPE)) {
overrideResponseContentType = initParamValueToEnum(value, OverrideResponseContentType.values());
} else if (name.equals(INIT_PARAM_RESPONSE_CHARACTER_ENCODING)) {
responseCharacterEncoding = initParamValueToEnum(value, ResponseCharacterEncoding.values());
if (responseCharacterEncoding == ResponseCharacterEncoding.FORCE_CHARSET) {
String charsetName = value.substring(INIT_PARAM_VALUE_FORCE_PREFIX.length()).trim();
forcedResponseCharacterEncoding = Charset.forName(charsetName);
}
} else if (name.equals(INIT_PARAM_OVERRIDE_RESPONSE_LOCALE)) {
overrideResponseLocale = initParamValueToEnum(value, OverrideResponseLocale.values());
} else if (name.equals(INIT_PARAM_EXCEPTION_ON_MISSING_TEMPLATE)) {
exceptionOnMissingTemplate = StringUtil.getYesNo(value);
} else if (name.equals(INIT_PARAM_META_INF_TLD_LOCATIONS)) {;
metaInfTldSources = parseAsMetaInfTldLocations(value);
} else if (name.equals(INIT_PARAM_CLASSPATH_TLDS)) {;
List newClasspathTlds = new ArrayList();
if (classpathTlds != null) {
newClasspathTlds.addAll(classpathTlds);
}
newClasspathTlds.addAll(InitParamParser.parseCommaSeparatedList(value));
classpathTlds = newClasspathTlds;
} else {
config.setSetting(name, value);
}
} catch (ConflictingInitParamsException e) {
throw e;
} catch (Exception e) {
throw new InitParamValueException(name, value, e);
}
} // while initpnames
if (contentType.containsCharset && responseCharacterEncoding != ResponseCharacterEncoding.LEGACY) {
throw new InitParamValueException(INIT_PARAM_CONTENT_TYPE, contentType.httpHeaderValue,
new IllegalStateException("You can't specify the charset in the content type, because the \"" +
INIT_PARAM_RESPONSE_CHARACTER_ENCODING + "\" init-param isn't set to "
+ "\"" + INIT_PARAM_VALUE_LEGACY + "\"."));
}
}