<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
  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.
-->

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
	version="2.4">

    <servlet>
        <servlet-name>tester</servlet-name>
        <servlet-class>freemarker.test.servlet.Model2TesterServlet</servlet-class>
    </servlet>

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

    <!-- Must use a webapp-local class for "class:", otherwise it won't find local resources. -->
    <servlet>
        <servlet-name>freemarker-class-root</servlet-name>
        <servlet-class>freemarker.ext.jsp.webapps.config.WebappLocalFreemarkerServlet</servlet-class>
        <init-param>
            <param-name>TemplatePath</param-name>
            <param-value>class://</param-value>
        </init-param>
    </servlet>
    <servlet>
        <servlet-name>freemarker-class-sub</servlet-name>
        <servlet-class>freemarker.ext.jsp.webapps.config.WebappLocalFreemarkerServlet</servlet-class>
        <init-param>
            <param-name>TemplatePath</param-name>
            <param-value>class://sub</param-value>
        </init-param>
    </servlet>

    <!-- No need to use webapp-local class for "classpath:" -->
    <servlet>
        <servlet-name>freemarker-classpath-root</servlet-name>
        <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
        <init-param>
            <param-name>TemplatePath</param-name>
            <param-value>classpath:/</param-value>
        </init-param>
    </servlet>
	<servlet>
		<servlet-name>freemarker-classpath-sub</servlet-name>
		<servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
        <init-param>
            <param-name>TemplatePath</param-name>
            <param-value>classpath:sub</param-value>
        </init-param>
	</servlet>

    <servlet>
        <servlet-name>freemarker-webinfPerTemplates</servlet-name>
        <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
        <init-param>
            <param-name>TemplatePath</param-name>
            <param-value>WEB-INF/templates</param-value>
        </init-param>
    </servlet>
    <servlet>
        <servlet-name>freemarker-contentRoot</servlet-name>
        <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
        <init-param>
            <param-name>TemplatePath</param-name>
            <param-value></param-value>
        </init-param>
    </servlet>

    <servlet>
        <servlet-name>freemarker-assertDefaultsFreemarkerServlet</servlet-name>
        <servlet-class>freemarker.ext.jsp.RealServletContainertTest$AssertDefaultsFreemarkerServlet</servlet-class>
        <init-param>
            <param-name>incompatible_improvements</param-name>
            <param-value>2.3.22</param-value>
        </init-param>
    </servlet>
    <servlet>
        <servlet-name>freemarker-assertDefaultsIcI2322FreemarkerServlet</servlet-name>
        <servlet-class>freemarker.ext.jsp.RealServletContainertTest$AssertDefaultsIcI2322FreemarkerServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>freemarker-assertCustomizedDefaultsFreemarkerServlet</servlet-name>
        <servlet-class>freemarker.ext.jsp.RealServletContainertTest$AssertCustomizedDefaultsFreemarkerServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>freemarker-assertObjectWrapperDefaults1FreemarkerServlet</servlet-name>
        <servlet-class>freemarker.ext.jsp.RealServletContainertTest$AssertObjectWrapperDefaults1FreemarkerServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>freemarker-assertObjectWrapperDefaults2FreemarkerServlet</servlet-name>
        <servlet-class>freemarker.ext.jsp.RealServletContainertTest$AssertObjectWrapperDefaults2FreemarkerServlet</servlet-class>
    </servlet>

</web-app>