<?xml version="1.0" encoding="utf-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd"
>
<web-app>
  <servlet>
    <servlet-name>tester</servlet-name>
    <servlet-class>freemarker.test.servlet.Model2TesterServlet</servlet-class>
  </servlet>

  <servlet>
    <servlet-name>freemarker</servlet-name>
    <servlet-class>freemarker.ext.jsp.JspTestFreemarkerServlet</servlet-class>

    <!-- FreemarkerServlet settings: -->
    <init-param>
      <param-name>TemplatePath</param-name>
      <param-value>/</param-value>
    </init-param>
    <init-param>
      <param-name>NoCache</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>ContentType</param-name>
      <param-value>text/html; charset=UTF-8</param-value> <!-- Forces UTF-8 output encoding! -->
    </init-param>
    <init-param>
      <param-name>MetaInfTldSources</param-name>
      <param-value>webInfPerLibJars, classpath:.*displaytag.*\.jar$, classpath</param-value>
    </init-param>
    <init-param>
      <param-name>ClasspathTlds</param-name>
      <param-value>
        /freemarker/ext/jsp/tldDiscovery-ClassPathTlds-1.tld,
        freemarker/ext/jsp/tldDiscovery-ClassPathTlds-2.tld,
      </param-value>
    </init-param>

    <!-- FreeMarker settings: -->
    <init-param>
      <param-name>incompatible_improvements</param-name>
      <param-value>2.3.21</param-value>
    </init-param>
    <init-param>
      <param-name>template_exception_handler</param-name>
      <!-- Some may prefer "html_debug" for development. -->
      <param-value>rethrow</param-value>
    </init-param>
    <init-param>
      <param-name>template_update_delay</param-name>
      <param-value>0</param-value> <!-- 0 is for development only! Use higher value otherwise. -->
    </init-param>
    <init-param>
      <param-name>default_encoding</param-name>
      <param-value>UTF-8</param-value> <!-- The encoding of the template files. -->
    </init-param>
    <init-param>
      <param-name>locale</param-name>
      <param-value>en_US</param-value>
    </init-param>
    <init-param>
      <param-name>number_format</param-name>
      <param-value>0.##########</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet>
    <servlet-name>freemarker-defaultOverride</servlet-name>
    <servlet-class>freemarker.ext.jsp.JspTestFreemarkerServletWithDefaultOverride</servlet-class>

    <!-- FreemarkerServlet settings: -->
    <init-param>
      <param-name>TemplatePath</param-name>
      <param-value>/</param-value>
    </init-param>
    <init-param>
      <param-name>NoCache</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>ContentType</param-name>
      <param-value>text/html; charset=UTF-8</param-value> <!-- Forces UTF-8 output encoding! -->
    </init-param>
    <init-param>
      <param-name>ClasspathTlds</param-name>
      <param-value>
        freemarker/ext/jsp/tldDiscovery-ClassPathTlds-2.tld,
      </param-value>
    </init-param>

    <!-- FreeMarker settings: -->
    <init-param>
      <param-name>incompatible_improvements</param-name>
      <param-value>2.3.22</param-value>
    </init-param>
    <init-param>
      <param-name>template_exception_handler</param-name>
      <!-- Some may prefer "html_debug" for development. -->
      <param-value>rethrow</param-value>
    </init-param>
    <init-param>
      <param-name>template_update_delay</param-name>
      <param-value>0</param-value> <!-- 0 is for development only! Use higher value otherwise. -->
    </init-param>
    <init-param>
      <param-name>default_encoding</param-name>
      <param-value>UTF-8</param-value> <!-- The encoding of the template files. -->
    </init-param>
    <init-param>
      <param-name>locale</param-name>
      <param-value>en_US</param-value>
    </init-param>
    <init-param>
      <param-name>number_format</param-name>
      <param-value>0.##########</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>tester</servlet-name>
    <url-pattern>/tester</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>freemarker</servlet-name>
    <url-pattern>*.ftl</url-pattern>
  </servlet-mapping>

  <taglib>
    <taglib-uri>http://freemarker.sf.net/taglibs/freemarker-junit-test-tag-2.2</taglib-uri>
    <taglib-location>/not-auto-scanned/fmtesttag.tld</taglib-location>
  </taglib>
  <taglib>
    <taglib-uri>http://freemarker.sf.net/taglibs/freemarker-junit-test-tag-2.2-2</taglib-uri>
    <taglib-location>/WEB-INF/taglib 2.jar</taglib-location>
  </taglib>
  <taglib>
    <taglib-uri>/subdir/taglib</taglib-uri>
    <taglib-location>/WEB-INF/fmtesttag4.tld</taglib-location>
  </taglib>

  <!-- Prevent the visiting of MVC Views from outside the servlet container. RequestDispatcher.forward/include should and 
    will still work. Removing this may open security holes! -->
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>FreeMarker MVC Views</web-resource-name>
      <url-pattern>*.ftl</url-pattern>
      <url-pattern>*.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <!-- Nobody is allowed to visit these -->
    </auth-constraint>
  </security-constraint>

</web-app>
