diff --git a/tiles-2.2.2-commons-ognl.patch b/tiles-2.2.2-commons-ognl.patch
new file mode 100644
index 0000000..edaa878
--- /dev/null
+++ b/tiles-2.2.2-commons-ognl.patch
@@ -0,0 +1,144 @@
+diff -Nru tiles-2.2.2/src/tiles-ognl/pom.xml tiles-2.2.2-gil/src/tiles-ognl/pom.xml
+--- tiles-2.2.2/src/tiles-ognl/pom.xml 2010-06-17 20:31:47.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-ognl/pom.xml 2012-05-26 23:47:08.921350602 +0200
+@@ -114,9 +114,9 @@
+ test
+
+
+- ognl
+- ognl
+- 2.7.3
++ org.apache.commons
++ commons-ognl
++ 4.0-incubating-SNAPSHOT
+
+
+
+diff -Nru tiles-2.2.2/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/DelegatePropertyAccessor.java tiles-2.2.2-gil/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/DelegatePropertyAccessor.java
+--- tiles-2.2.2/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/DelegatePropertyAccessor.java 2010-06-17 20:31:47.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/DelegatePropertyAccessor.java 2012-05-26 23:47:08.931350602 +0200
+@@ -23,9 +23,9 @@
+
+ import java.util.Map;
+
+-import ognl.OgnlContext;
+-import ognl.OgnlException;
+-import ognl.PropertyAccessor;
++import org.apache.commons.ognl.OgnlContext;
++import org.apache.commons.ognl.OgnlException;
++import org.apache.commons.ognl.PropertyAccessor;
+
+ /**
+ * Uses a {@link PropertyAccessorDelegateFactory} to delegate the methods to
+diff -Nru tiles-2.2.2/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/NestedObjectDelegatePropertyAccessor.java tiles-2.2.2-gil/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/NestedObjectDelegatePropertyAccessor.java
+--- tiles-2.2.2/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/NestedObjectDelegatePropertyAccessor.java 2010-06-17 20:31:47.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/NestedObjectDelegatePropertyAccessor.java 2012-05-26 23:47:08.937350602 +0200
+@@ -23,9 +23,9 @@
+
+ import java.util.Map;
+
+-import ognl.OgnlContext;
+-import ognl.OgnlException;
+-import ognl.PropertyAccessor;
++import org.apache.commons.ognl.OgnlContext;
++import org.apache.commons.ognl.OgnlException;
++import org.apache.commons.ognl.PropertyAccessor;
+
+ /**
+ * Uses a {@link PropertyAccessor} as a delegate, but passing a nested object as
+diff -Nru tiles-2.2.2/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/OGNLAttributeEvaluator.java tiles-2.2.2-gil/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/OGNLAttributeEvaluator.java
+--- tiles-2.2.2/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/OGNLAttributeEvaluator.java 2010-06-17 20:31:47.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/OGNLAttributeEvaluator.java 2012-05-26 23:47:08.935350602 +0200
+@@ -23,8 +23,8 @@
+
+ import java.util.Map;
+
+-import ognl.Ognl;
+-import ognl.OgnlException;
++import org.apache.commons.ognl.Ognl;
++import org.apache.commons.ognl.OgnlException;
+
+ import org.apache.tiles.context.TilesRequestContext;
+ import org.apache.tiles.evaluator.AbstractAttributeEvaluator;
+diff -Nru tiles-2.2.2/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/PropertyAccessorDelegateFactory.java tiles-2.2.2-gil/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/PropertyAccessorDelegateFactory.java
+--- tiles-2.2.2/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/PropertyAccessorDelegateFactory.java 2010-06-17 20:31:47.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/PropertyAccessorDelegateFactory.java 2012-05-26 23:47:08.932350602 +0200
+@@ -21,7 +21,7 @@
+
+ package org.apache.tiles.ognl;
+
+-import ognl.PropertyAccessor;
++import org.apache.commons.ognl.PropertyAccessor;
+
+ /**
+ * Decides a {@link PropertyAccessor} depending on the property name and the
+diff -Nru tiles-2.2.2/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/TilesContextPropertyAccessorDelegateFactory.java tiles-2.2.2-gil/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/TilesContextPropertyAccessorDelegateFactory.java
+--- tiles-2.2.2/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/TilesContextPropertyAccessorDelegateFactory.java 2010-06-17 20:31:47.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-ognl/src/main/java/org/apache/tiles/ognl/TilesContextPropertyAccessorDelegateFactory.java 2012-05-26 23:47:08.939350602 +0200
+@@ -23,7 +23,7 @@
+
+ import java.util.Map;
+
+-import ognl.PropertyAccessor;
++import org.apache.commons.ognl.PropertyAccessor;
+
+ import org.apache.tiles.TilesApplicationContext;
+ import org.apache.tiles.context.TilesRequestContext;
+diff -Nru tiles-2.2.2/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/DelegatePropertyAccessorTest.java tiles-2.2.2-gil/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/DelegatePropertyAccessorTest.java
+--- tiles-2.2.2/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/DelegatePropertyAccessorTest.java 2010-06-17 20:31:47.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/DelegatePropertyAccessorTest.java 2012-05-26 23:47:08.945350602 +0200
+@@ -26,9 +26,9 @@
+
+ import java.util.Map;
+
+-import ognl.OgnlContext;
+-import ognl.OgnlException;
+-import ognl.PropertyAccessor;
++import org.apache.commons.ognl.OgnlContext;
++import org.apache.commons.ognl.OgnlException;
++import org.apache.commons.ognl.PropertyAccessor;
+
+ import org.apache.tiles.ognl.DelegatePropertyAccessor;
+ import org.apache.tiles.ognl.PropertyAccessorDelegateFactory;
+diff -Nru tiles-2.2.2/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/NestedObjectDelegatePropertyAccessorTest.java tiles-2.2.2-gil/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/NestedObjectDelegatePropertyAccessorTest.java
+--- tiles-2.2.2/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/NestedObjectDelegatePropertyAccessorTest.java 2010-06-17 20:31:47.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/NestedObjectDelegatePropertyAccessorTest.java 2012-05-26 23:47:08.942350602 +0200
+@@ -26,9 +26,9 @@
+
+ import java.util.Map;
+
+-import ognl.OgnlContext;
+-import ognl.OgnlException;
+-import ognl.PropertyAccessor;
++import org.apache.commons.ognl.OgnlContext;
++import org.apache.commons.ognl.OgnlException;
++import org.apache.commons.ognl.PropertyAccessor;
+
+ import org.apache.tiles.ognl.NestedObjectDelegatePropertyAccessor;
+ import org.apache.tiles.ognl.NestedObjectExtractor;
+diff -Nru tiles-2.2.2/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/OGNLAttributeEvaluatorTest.java tiles-2.2.2-gil/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/OGNLAttributeEvaluatorTest.java
+--- tiles-2.2.2/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/OGNLAttributeEvaluatorTest.java 2010-06-17 20:31:47.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/OGNLAttributeEvaluatorTest.java 2012-05-26 23:47:08.943350602 +0200
+@@ -25,8 +25,8 @@
+
+ import junit.framework.TestCase;
+
+-import ognl.OgnlRuntime;
+-import ognl.PropertyAccessor;
++import org.apache.commons.ognl.OgnlRuntime;
++import org.apache.commons.ognl.PropertyAccessor;
+
+ import org.apache.tiles.Attribute;
+ import org.apache.tiles.Expression;
+diff -Nru tiles-2.2.2/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/TilesContextPropertyAccessorDelegateFactoryTest.java tiles-2.2.2-gil/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/TilesContextPropertyAccessorDelegateFactoryTest.java
+--- tiles-2.2.2/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/TilesContextPropertyAccessorDelegateFactoryTest.java 2010-06-17 20:31:47.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-ognl/src/test/java/org/apache/tiles/ognl/TilesContextPropertyAccessorDelegateFactoryTest.java 2012-05-26 23:47:08.944350602 +0200
+@@ -27,7 +27,7 @@
+ import java.util.HashMap;
+ import java.util.Map;
+
+-import ognl.PropertyAccessor;
++import org.apache.commons.ognl.PropertyAccessor;
+
+ import org.apache.tiles.TilesApplicationContext;
+ import org.apache.tiles.context.TilesRequestContext;
diff --git a/tiles-2.2.2-fix-build.patch b/tiles-2.2.2-fix-build.patch
new file mode 100644
index 0000000..53f3a77
--- /dev/null
+++ b/tiles-2.2.2-fix-build.patch
@@ -0,0 +1,355 @@
+diff -Nru tiles-2.2.2/src/pom.xml tiles-2.2.2-gil/src/pom.xml
+--- tiles-2.2.2/src/pom.xml 2010-06-17 20:31:47.000000000 +0200
++++ tiles-2.2.2-gil/src/pom.xml 2012-06-13 16:34:08.278243928 +0200
+@@ -63,7 +63,7 @@
+ tiles-compat
+ tiles-extras
+ assembly
+- tiles-test-pom
++
+
+
+
+@@ -85,6 +85,7 @@
+
+
+
++ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+@@ -161,9 +162,11 @@
+ maven-project-info-reports-plugin
+
+
++ org.apache.maven.plugins
+ maven-surefire-report-plugin
+
+
++ org.apache.maven.plugins
+ maven-checkstyle-plugin
+
+ http://svn.eu.apache.org/repos/asf/tiles/maven/trunk/build/tiles_checks.xml
+@@ -171,8 +174,8 @@
+
+
+
+- org.codehaus.mojo
+- jxr-maven-plugin
++ org.apache.maven.plugins
++ maven-jxr-plugin
+
+
+ maven-pmd-plugin
+@@ -215,9 +218,9 @@
+
+
+
+- org.codehaus.mojo
+- rat-maven-plugin
+- 1.0-alpha-3
++ org.apache.rat
++ apache-rat-plugin
++ 0.8-SNAPSHOT
+
+
+ pom.xml
+@@ -233,8 +236,8 @@
+
+
+
+- org.apache.${artifactId}
+- org.apache.tiles.*;version=${pom.version}
++ org.apache.${project.artifactId}
++ org.apache.tiles.*;version=${project.version}
+ *
+
+
+@@ -255,6 +258,7 @@
+
+
+
++ org.apache.maven.plugins
+ maven-install-plugin
+
+ true
+@@ -298,9 +302,9 @@
+
+
+
+- org.codehaus.mojo
+- rat-maven-plugin
+- 1.0-alpha-3
++ org.apache.rat
++ apache-rat-plugin
++ 0.8-SNAPSHOT
+
+
+ verify
+diff -Nru tiles-2.2.2/src/tiles-api/pom.xml tiles-2.2.2-gil/src/tiles-api/pom.xml
+--- tiles-2.2.2/src/tiles-api/pom.xml 2010-06-17 20:31:42.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-api/pom.xml 2012-06-13 16:30:44.536233963 +0200
+@@ -77,7 +77,7 @@
+
+ javax.servlet
+ servlet-api
+- 2.5
++ 7.0.27
+ test
+
+
+diff -Nru tiles-2.2.2/src/tiles-compat/pom.xml tiles-2.2.2-gil/src/tiles-compat/pom.xml
+--- tiles-2.2.2/src/tiles-compat/pom.xml 2010-06-17 20:31:43.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-compat/pom.xml 2012-06-13 16:30:44.537233963 +0200
+@@ -107,7 +107,7 @@
+
+ javax.servlet
+ servlet-api
+- 2.5
++ 7.0.27
+ test
+
+
+@@ -125,12 +125,12 @@
+ test
+
+
+-
++
+
+
+
+diff -Nru tiles-2.2.2/src/tiles-core/pom.xml tiles-2.2.2-gil/src/tiles-core/pom.xml
+--- tiles-2.2.2/src/tiles-core/pom.xml 2010-06-17 20:31:46.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-core/pom.xml 2012-06-13 16:30:44.537233963 +0200
+@@ -137,17 +137,17 @@
+ test
+
+
+-
++
+
+
+ javax.servlet
+ servlet-api
+- 2.5
++ 7.0.27
+ test
+
+
+diff -Nru tiles-2.2.2/src/tiles-el/pom.xml tiles-2.2.2-gil/src/tiles-el/pom.xml
+--- tiles-2.2.2/src/tiles-el/pom.xml 2010-06-17 20:31:47.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-el/pom.xml 2012-06-13 16:30:44.538233963 +0200
+@@ -108,28 +108,28 @@
+
+
+
+- javax.el
+- el-api
+- 1.0
++ org.apache.tomcat
++ tomcat-el-api
++ 7.0.27
+ provided
+
+
+ javax.servlet
+ servlet-api
+- 2.5
++ 7.0.27
+ provided
+
+
+- javax.servlet.jsp
+- jsp-api
+- 2.1
++ org.apache.tomcat
++ tomcat-jsp-api
++ 7.0.27
+ provided
+
+
+
+ org.apache.tomcat
+ jasper-el
+- 6.0.20
++ 7.0.27
+ compile
+ true
+
+diff -Nru tiles-2.2.2/src/tiles-extras/pom.xml tiles-2.2.2-gil/src/tiles-extras/pom.xml
+--- tiles-2.2.2/src/tiles-extras/pom.xml 2010-06-17 20:31:37.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-extras/pom.xml 2012-06-13 16:30:44.538233963 +0200
+@@ -117,14 +117,14 @@
+
+ javax.servlet
+ servlet-api
+- 2.5
++ 7.0.27
+ provided
+
+
+
+- javax.servlet.jsp
+- jsp-api
+- 2.1
++ org.apache.tomcat
++ tomcat-jsp-api
++ 7.0.27
+ provided
+
+
+diff -Nru tiles-2.2.2/src/tiles-freemarker/pom.xml tiles-2.2.2-gil/src/tiles-freemarker/pom.xml
+--- tiles-2.2.2/src/tiles-freemarker/pom.xml 2010-06-17 20:31:43.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-freemarker/pom.xml 2012-06-13 16:30:44.539233963 +0200
+@@ -59,7 +59,7 @@
+
+ javax.servlet
+ servlet-api
+- 2.5
++ 7.0.27
+ provided
+
+
+diff -Nru tiles-2.2.2/src/tiles-jsp/pom.xml tiles-2.2.2-gil/src/tiles-jsp/pom.xml
+--- tiles-2.2.2/src/tiles-jsp/pom.xml 2010-06-17 20:31:47.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-jsp/pom.xml 2012-06-13 16:30:44.539233963 +0200
+@@ -82,19 +82,6 @@
+
+
+
+-
+-
+-
+- net.sourceforge.maven-taglib
+- maven-taglib-plugin
+-
+- true
+-
+-
+-
+-
+-
+-
+
+
+ org.apache.tiles
+@@ -117,13 +104,13 @@
+
+ javax.servlet
+ servlet-api
+- 2.5
++ 7.0.27
+ provided
+
+
+- javax.servlet.jsp
+- jsp-api
+- 2.1
++ org.apache.tomcat
++ tomcat-jsp-api
++ 7.0.27
+ provided
+
+
+@@ -144,12 +131,12 @@
+ 2.4
+ test
+
+-
++
+
+
+
+diff -Nru tiles-2.2.2/src/tiles-portlet/pom.xml tiles-2.2.2-gil/src/tiles-portlet/pom.xml
+--- tiles-2.2.2/src/tiles-portlet/pom.xml 2010-06-17 20:31:46.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-portlet/pom.xml 2012-06-13 16:30:44.539233963 +0200
+@@ -135,16 +135,16 @@
+
+ javax.servlet
+ servlet-api
+- 2.5
++ 7.0.27
+ test
+
+
+-
++
+
+
+
+diff -Nru tiles-2.2.2/src/tiles-servlet/pom.xml tiles-2.2.2-gil/src/tiles-servlet/pom.xml
+--- tiles-2.2.2/src/tiles-servlet/pom.xml 2010-06-17 20:31:44.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-servlet/pom.xml 2012-06-13 16:30:44.540233963 +0200
+@@ -111,7 +111,7 @@
+
+ javax.servlet
+ servlet-api
+- 2.5
++ 7.0.27
+ provided
+
+
+@@ -132,12 +132,12 @@
+ 2.4
+ test
+
+-
++
+
+
+
+diff -Nru tiles-2.2.2/src/tiles-servlet-wildcard/pom.xml tiles-2.2.2-gil/src/tiles-servlet-wildcard/pom.xml
+--- tiles-2.2.2/src/tiles-servlet-wildcard/pom.xml 2010-06-17 20:31:42.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-servlet-wildcard/pom.xml 2012-06-13 16:30:44.540233963 +0200
+@@ -109,7 +109,7 @@
+
+ javax.servlet
+ servlet-api
+- 2.5
++ 7.0.27
+ provided
+
+
+diff -Nru tiles-2.2.2/src/tiles-velocity/pom.xml tiles-2.2.2-gil/src/tiles-velocity/pom.xml
+--- tiles-2.2.2/src/tiles-velocity/pom.xml 2010-06-17 20:31:47.000000000 +0200
++++ tiles-2.2.2-gil/src/tiles-velocity/pom.xml 2012-06-13 16:30:44.541233963 +0200
+@@ -55,7 +55,7 @@
+
+ javax.servlet
+ servlet-api
+- 2.5
++ 7.0.27
+ provided
+
+
diff --git a/tiles-2.2.2-parent-pom.patch b/tiles-2.2.2-parent-pom.patch
new file mode 100644
index 0000000..a7cffeb
--- /dev/null
+++ b/tiles-2.2.2-parent-pom.patch
@@ -0,0 +1,10 @@
+--- src/pom.xml 2012-05-27 00:38:23.845328560 +0200
++++ src/pom.xml-gil 2012-05-27 00:45:06.523325673 +0200
+@@ -27,6 +27,7 @@
+ org.apache.tiles
+ tiles-master
+ 3
++ ../pom.xml
+
+
+ 4.0.0
diff --git a/tiles-2.2.2-servlet3.1.patch b/tiles-2.2.2-servlet3.1.patch
new file mode 100644
index 0000000..e65c8ae
--- /dev/null
+++ b/tiles-2.2.2-servlet3.1.patch
@@ -0,0 +1,428 @@
+From ba20922aeae437d7d2d792531c12aa0222e1f77a Mon Sep 17 00:00:00 2001
+From: maminjie
+Date: Thu, 20 Aug 2020 17:46:35 +0800
+Subject: [PATCH] fix does not override abstract method
+
+---
+ .../taglib/definition/InitContainerTag.java | 178 ++++++++++++++++-
+ .../tiles/web/util/ServletContextAdapter.java | 179 ++++++++++++++++++
+ 2 files changed, 355 insertions(+), 2 deletions(-)
+
+diff --git a/src/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/InitContainerTag.java b/src/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/InitContainerTag.java
+index d98cb86..64d9858 100644
+--- a/src/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/InitContainerTag.java
++++ b/src/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/InitContainerTag.java
+@@ -28,11 +28,19 @@ import java.util.Enumeration;
+ import java.util.Hashtable;
+ import java.util.Iterator;
+ import java.util.Set;
++import java.util.Map;
++import java.util.EventListener;
+
+ import javax.servlet.RequestDispatcher;
+ import javax.servlet.Servlet;
+ import javax.servlet.ServletContext;
+ import javax.servlet.ServletException;
++import javax.servlet.descriptor.JspConfigDescriptor;
++import javax.servlet.SessionTrackingMode;
++import javax.servlet.SessionCookieConfig;
++import javax.servlet.FilterRegistration;
++import javax.servlet.Filter;
++import javax.servlet.ServletRegistration;
+
+ import org.apache.tiles.ArrayStack;
+ import org.apache.tiles.AttributeContext;
+@@ -319,8 +327,9 @@ public class InitContainerTag extends TilesBodyTag {
+ * @param name The name of the parameter.
+ * @param value The value of the parameter.
+ */
+- public void setInitParameter(String name, String value) {
++ public boolean setInitParameter(String name, String value) {
+ initParameters.put(name, value);
++ return true;
+ }
+
+ /**
+@@ -366,8 +375,173 @@ public class InitContainerTag extends TilesBodyTag {
+ public String getContextPath() {
+ return rootContext.getContextPath();
+ }
++
++ /** {@inheritDoc} */
++ public void setResponseCharacterEncoding(String type) {
++ rootContext.setResponseCharacterEncoding(type);
++ }
+
+- /**
++ /** {@inheritDoc} */
++ public String getResponseCharacterEncoding() {
++ return rootContext.getResponseCharacterEncoding();
++ }
++
++ /** {@inheritDoc} */
++ public void setRequestCharacterEncoding(String type) {
++ rootContext.setRequestCharacterEncoding(type);
++ }
++
++ /** {@inheritDoc} */
++ public String getRequestCharacterEncoding() {
++ return rootContext.getRequestCharacterEncoding();
++ }
++
++ /** {@inheritDoc} */
++ public void setSessionTimeout(int timeout) {
++ rootContext.setSessionTimeout(timeout);
++ }
++
++ /** {@inheritDoc} */
++ public int getSessionTimeout() {
++ return rootContext.getSessionTimeout();
++ }
++
++ /** {@inheritDoc} */
++ public String getVirtualServerName() {
++ return rootContext.getVirtualServerName();
++ }
++
++ /** {@inheritDoc} */
++ public void declareRoles(String... roles) {
++ rootContext.declareRoles(roles);
++ }
++
++ /** {@inheritDoc} */
++ public ClassLoader getClassLoader() {
++ return rootContext.getClassLoader();
++ }
++
++ /** {@inheritDoc} */
++ public JspConfigDescriptor getJspConfigDescriptor() {
++ return rootContext.getJspConfigDescriptor();
++ }
++
++ /** {@inheritDoc} */
++ public T createListener(Class clazz) throws ServletException {
++ return rootContext.createListener(clazz);
++ }
++
++ /** {@inheritDoc} */
++ public void addListener(Class extends EventListener> listenerClass) {
++ rootContext.addListener(listenerClass);
++ }
++
++ /** {@inheritDoc} */
++ public void addListener(T t) {
++ rootContext.addListener(t);
++ }
++
++ /** {@inheritDoc} */
++ public void addListener(String className) {
++ rootContext.addListener(className);
++ }
++
++ /** {@inheritDoc} */
++ public Set getEffectiveSessionTrackingModes() {
++ return rootContext.getEffectiveSessionTrackingModes();
++ }
++
++ /** {@inheritDoc} */
++ public Set getDefaultSessionTrackingModes() {
++ return rootContext.getDefaultSessionTrackingModes();
++ }
++
++ /** {@inheritDoc} */
++ public void setSessionTrackingModes(Set sessionTrackingModes) {
++ rootContext.setSessionTrackingModes(sessionTrackingModes);
++ }
++
++ /** {@inheritDoc} */
++ public SessionCookieConfig getSessionCookieConfig() {
++ return rootContext.getSessionCookieConfig();
++ }
++
++ /** {@inheritDoc} */
++ public Map getFilterRegistrations() {
++ return rootContext.getFilterRegistrations();
++ }
++
++ /** {@inheritDoc} */
++ public FilterRegistration getFilterRegistration(String filterName) {
++ return rootContext.getFilterRegistration(filterName);
++ }
++
++ /** {@inheritDoc} */
++ public T createFilter(Class clazz) throws ServletException {
++ return rootContext.createFilter(clazz);
++ }
++
++ /** {@inheritDoc} */
++ public FilterRegistration.Dynamic addFilter(String filterName, Class extends Filter> filterClass) {
++ return rootContext.addFilter(filterName, filterClass);
++ }
++
++ /** {@inheritDoc} */
++ public FilterRegistration.Dynamic addFilter(String filterName, String className) {
++ return rootContext.addFilter(filterName, className);
++ }
++
++ /** {@inheritDoc} */
++ public FilterRegistration.Dynamic addFilter(String filterName, Filter filter) {
++ return rootContext.addFilter(filterName, filter);
++ }
++
++ /** {@inheritDoc} */
++ public Map getServletRegistrations() {
++ return rootContext.getServletRegistrations();
++ }
++
++ /** {@inheritDoc} */
++ public ServletRegistration getServletRegistration(String servletName) {
++ return rootContext.getServletRegistration(servletName);
++ }
++
++ /** {@inheritDoc} */
++ public T createServlet(Class clazz) throws ServletException {
++ return rootContext.createServlet(clazz);
++ }
++
++ /** {@inheritDoc} */
++ public ServletRegistration.Dynamic addJspFile(String s1, String s2) {
++ return rootContext.addJspFile(s1, s2);
++ }
++
++ /** {@inheritDoc} */
++ public ServletRegistration.Dynamic addServlet(String servletName, Class extends Servlet> servletClass) {
++ return rootContext.addServlet(servletName, servletClass);
++ }
++
++ /** {@inheritDoc} */
++ public ServletRegistration.Dynamic addServlet(String servletName, Servlet servlet) {
++ return rootContext.addServlet(servletName, servlet);
++ }
++
++ /** {@inheritDoc} */
++ public ServletRegistration.Dynamic addServlet(String servletName, String className) {
++ return rootContext.addServlet(servletName, className);
++ }
++
++ /** {@inheritDoc} */
++ public int getEffectiveMinorVersion() {
++ return rootContext.getEffectiveMinorVersion();
++ }
++
++ /** {@inheritDoc} */
++ public int getEffectiveMajorVersion() {
++ return rootContext.getEffectiveMajorVersion();
++ }
++
++ /**
+ * Composes an enumeration and an iterator into a single enumeration.
+ */
+ @SuppressWarnings("unchecked")
+diff --git a/src/tiles-servlet/src/main/java/org/apache/tiles/web/util/ServletContextAdapter.java b/src/tiles-servlet/src/main/java/org/apache/tiles/web/util/ServletContextAdapter.java
+index da6f339..c03e3e1 100644
+--- a/src/tiles-servlet/src/main/java/org/apache/tiles/web/util/ServletContextAdapter.java
++++ b/src/tiles-servlet/src/main/java/org/apache/tiles/web/util/ServletContextAdapter.java
+@@ -24,14 +24,23 @@ import java.io.InputStream;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.util.Enumeration;
++import java.util.EnumSet;
+ import java.util.Hashtable;
++import java.util.Map;
+ import java.util.Set;
++import java.util.EventListener;
+
+ import javax.servlet.RequestDispatcher;
+ import javax.servlet.Servlet;
+ import javax.servlet.ServletConfig;
+ import javax.servlet.ServletContext;
+ import javax.servlet.ServletException;
++import javax.servlet.descriptor.JspConfigDescriptor;
++import javax.servlet.SessionTrackingMode;
++import javax.servlet.SessionCookieConfig;
++import javax.servlet.FilterRegistration;
++import javax.servlet.Filter;
++import javax.servlet.ServletRegistration;
+
+ /**
+ * Adapts a servlet config and a servlet context to become a unique servlet
+@@ -206,6 +215,176 @@ public class ServletContextAdapter implements ServletContext {
+ public String getContextPath() {
+ return rootContext.getContextPath();
+ }
++
++ /** {@inheritDoc} */
++ public void setResponseCharacterEncoding(String type) {
++ rootContext.setResponseCharacterEncoding(type);
++ }
++
++ /** {@inheritDoc} */
++ public String getResponseCharacterEncoding() {
++ return rootContext.getResponseCharacterEncoding();
++ }
++
++ /** {@inheritDoc} */
++ public void setRequestCharacterEncoding(String type) {
++ rootContext.setRequestCharacterEncoding(type);
++ }
++
++ /** {@inheritDoc} */
++ public String getRequestCharacterEncoding() {
++ return rootContext.getRequestCharacterEncoding();
++ }
++
++ /** {@inheritDoc} */
++ public void setSessionTimeout(int timeout) {
++ rootContext.setSessionTimeout(timeout);
++ }
++
++ /** {@inheritDoc} */
++ public int getSessionTimeout() {
++ return rootContext.getSessionTimeout();
++ }
++
++ /** {@inheritDoc} */
++ public String getVirtualServerName() {
++ return rootContext.getVirtualServerName();
++ }
++
++ /** {@inheritDoc} */
++ public void declareRoles(String... roles) {
++ rootContext.declareRoles(roles);
++ }
++
++ /** {@inheritDoc} */
++ public ClassLoader getClassLoader() {
++ return rootContext.getClassLoader();
++ }
++
++ /** {@inheritDoc} */
++ public JspConfigDescriptor getJspConfigDescriptor() {
++ return rootContext.getJspConfigDescriptor();
++ }
++
++ /** {@inheritDoc} */
++ public T createListener(Class clazz) throws ServletException {
++ return rootContext.createListener(clazz);
++ }
++
++ /** {@inheritDoc} */
++ public void addListener(Class extends EventListener> listenerClass) {
++ rootContext.addListener(listenerClass);
++ }
++
++ /** {@inheritDoc} */
++ public void addListener(T t) {
++ rootContext.addListener(t);
++ }
++
++ /** {@inheritDoc} */
++ public void addListener(String className) {
++ rootContext.addListener(className);
++ }
++
++ /** {@inheritDoc} */
++ public Set getEffectiveSessionTrackingModes() {
++ return rootContext.getEffectiveSessionTrackingModes();
++ }
++
++ /** {@inheritDoc} */
++ public Set getDefaultSessionTrackingModes() {
++ return rootContext.getDefaultSessionTrackingModes();
++ }
++
++ /** {@inheritDoc} */
++ public void setSessionTrackingModes(Set sessionTrackingModes) {
++ rootContext.setSessionTrackingModes(sessionTrackingModes);
++ }
++
++ /** {@inheritDoc} */
++ public SessionCookieConfig getSessionCookieConfig() {
++ return rootContext.getSessionCookieConfig();
++ }
++
++ /** {@inheritDoc} */
++ public Map getFilterRegistrations() {
++ return rootContext.getFilterRegistrations();
++ }
++
++ /** {@inheritDoc} */
++ public FilterRegistration getFilterRegistration(String filterName) {
++ return rootContext.getFilterRegistration(filterName);
++ }
++
++ /** {@inheritDoc} */
++ public T createFilter(Class clazz) throws ServletException {
++ return rootContext.createFilter(clazz);
++ }
++
++ /** {@inheritDoc} */
++ public FilterRegistration.Dynamic addFilter(String filterName, Class extends Filter> filterClass) {
++ return rootContext.addFilter(filterName, filterClass);
++ }
++
++ /** {@inheritDoc} */
++ public FilterRegistration.Dynamic addFilter(String filterName, String className) {
++ return rootContext.addFilter(filterName, className);
++ }
++
++ /** {@inheritDoc} */
++ public FilterRegistration.Dynamic addFilter(String filterName, Filter filter) {
++ return rootContext.addFilter(filterName, filter);
++ }
++
++ /** {@inheritDoc} */
++ public Map getServletRegistrations() {
++ return rootContext.getServletRegistrations();
++ }
++
++ /** {@inheritDoc} */
++ public ServletRegistration getServletRegistration(String servletName) {
++ return rootContext.getServletRegistration(servletName);
++ }
++
++ /** {@inheritDoc} */
++ public T createServlet(Class clazz) throws ServletException {
++ return rootContext.createServlet(clazz);
++ }
++
++ /** {@inheritDoc} */
++ public ServletRegistration.Dynamic addJspFile(String s1, String s2) {
++ return rootContext.addJspFile(s1, s2);
++ }
++
++ /** {@inheritDoc} */
++ public ServletRegistration.Dynamic addServlet(String servletName, Class extends Servlet> servletClass) {
++ return rootContext.addServlet(servletName, servletClass);
++ }
++
++ /** {@inheritDoc} */
++ public ServletRegistration.Dynamic addServlet(String servletName, Servlet servlet) {
++ return rootContext.addServlet(servletName, servlet);
++ }
++
++ /** {@inheritDoc} */
++ public ServletRegistration.Dynamic addServlet(String servletName, String className) {
++ return rootContext.addServlet(servletName, className);
++ }
++
++ /** {@inheritDoc} */
++ public boolean setInitParameter(String name, String value) {
++ return rootContext.setInitParameter(name, value);
++ }
++
++ /** {@inheritDoc} */
++ public int getEffectiveMinorVersion() {
++ return rootContext.getEffectiveMinorVersion();
++ }
++
++ /** {@inheritDoc} */
++ public int getEffectiveMajorVersion() {
++ return rootContext.getEffectiveMajorVersion();
++ }
+
+ /**
+ * Composes an enumeration into a single one.
+--
+2.23.0
+
diff --git a/tiles-2.2.2-src.tar.gz b/tiles-2.2.2-src.tar.gz
new file mode 100644
index 0000000..d1f5283
Binary files /dev/null and b/tiles-2.2.2-src.tar.gz differ
diff --git a/tiles.spec b/tiles.spec
new file mode 100644
index 0000000..bca9f68
--- /dev/null
+++ b/tiles.spec
@@ -0,0 +1,122 @@
+Name: tiles
+Version: 2.2.2
+Release: 1
+Summary: Java templating framework for web application user interfaces
+License: ASL 2.0
+Url: http://tiles.apache.org/
+Source0: http://archive.apache.org/dist/tiles/v%{version}/tiles-%{version}-src.tar.gz
+# remove shale-test and maven-taglib-plugin
+# change
+# org.codehaus.mojo rat-maven-plugin in org.apache.rat apache-rat-plugin
+# org.codehaus.mojo jxr-maven-plugin in org.apache.maven.plugins maven-jxr-plugin
+# use tomcat 7.x apis
+Patch0: %{name}-%{version}-fix-build.patch
+# replace ognl ognl 2.7.3 with apache-commons-ognl
+Patch1: %{name}-%{version}-commons-ognl.patch
+# add tiles-master relativePath
+Patch2: %{name}-%{version}-parent-pom.patch
+# fix does not override abstract method
+Patch3: %{name}-%{version}-servlet3.1.patch
+BuildRequires: mvn(commons-digester:commons-digester) mvn(javax.portlet:portlet-api)
+BuildRequires: mvn(org.apache.commons:commons-ognl) mvn(org.apache.tomcat:tomcat-el-api)
+BuildRequires: mvn(org.apache.tomcat:tomcat-jasper-el) mvn(org.apache.tomcat:tomcat-jsp-api)
+BuildRequires: mvn(org.apache.tomcat:tomcat-servlet-api)
+BuildRequires: mvn(org.apache.velocity:velocity-tools) mvn(org.freemarker:freemarker)
+BuildRequires: mvn(org.mvel:mvel2) mvn(org.slf4j:jcl-over-slf4j) mvn(org.slf4j:slf4j-jdk14)
+BuildRequires: slf4j tomcat-lib
+%if 0
+BuildRequires: mvn(org.easymock:easymockclassextension) >= 2.4
+BuildRequires: mvn(org.apache.shale:shale-test) >= 1.0.5
+%endif
+BuildRequires: mvn(junit:junit)
+BuildRequires: maven-local maven-plugin-bundle maven-resources-plugin
+BuildRequires: mvn(org.apache.maven.shared:maven-artifact-resolver)
+BuildRequires: mvn(org.apache.maven.shared:maven-shared-components:pom:)
+BuildArch: noarch
+
+%description
+Apache Tiles is a templating framework built to simplify the
+development of web application user interfaces. Tiles allows
+authors to define page fragments which can be assembled into
+a complete page at runtime. These fragments, or tiles, can
+be used as simple includes in order to reduce the duplication
+of common page elements or embedded within other tiles to
+develop a series of reusable templates. These templates
+streamline the development of a consistent look and feel
+across an entire application. Tiles grew in popularity as a
+component of the popular Struts framework. It has since been
+extracted from Struts and is now integrated with various
+frameworks, such as Struts 2 and Shale.
+
+%package javadoc
+Summary: Javadoc for %{name}
+%description javadoc
+This package contains javadoc for %{name}.
+
+%prep
+%setup -q -n %{name}-%{version}
+%patch0 -p1
+%patch1 -p1
+%patch2 -p0
+%patch3 -p1
+%pom_disable_module tiles-portlet-wildcard src/pom.xml
+%pom_disable_module tiles-servlet-wildcard src/pom.xml
+%pom_disable_module tiles-extras src/pom.xml
+%pom_disable_module assembly src/pom.xml
+sed -i "s|jasper-el|tomcat-jasper-el|" src/tiles-el/pom.xml
+sed -i "s|javax.servlet|org.apache.tomcat|" src/tiles-core/pom.xml \
+ src/tiles-api/pom.xml \
+ src/tiles-velocity/pom.xml \
+ src/tiles-servlet/pom.xml \
+ src/tiles-compat/pom.xml \
+ src/tiles-portlet/pom.xml \
+ src/tiles-jsp/pom.xml \
+ src/tiles-extras/pom.xml \
+ src/tiles-freemarker/pom.xml \
+ src/tiles-el/pom.xml \
+ src/tiles-servlet-wildcard/pom.xml
+sed -i "s|servlet-api|tomcat-servlet-api|" src/tiles-core/pom.xml \
+ src/tiles-api/pom.xml \
+ src/tiles-velocity/pom.xml \
+ src/tiles-servlet/pom.xml \
+ src/tiles-compat/pom.xml \
+ src/tiles-portlet/pom.xml \
+ src/tiles-jsp/pom.xml \
+ src/tiles-extras/pom.xml \
+ src/tiles-freemarker/pom.xml \
+ src/tiles-el/pom.xml \
+ src/tiles-servlet-wildcard/pom.xml
+%pom_remove_parent src
+
+%build
+cd src
+%mvn_file :%{name}-api %{name}/api
+%mvn_file :%{name}-compat %{name}/compat
+%mvn_file :%{name}-core %{name}/core
+%mvn_file :%{name}-el %{name}/el
+%mvn_file :%{name}-freemarker %{name}/freemarker
+%mvn_file :%{name}-jsp %{name}/jsp
+%mvn_file :%{name}-mvel %{name}/mvel
+%mvn_file :%{name}-ognl %{name}/ognl
+%mvn_file :%{name}-portlet %{name}/portlet
+%mvn_file :%{name}-servlet %{name}/servlet
+%mvn_file :%{name}-template %{name}/template
+%mvn_file :%{name}-velocity %{name}/velocity
+%mvn_build -f
+
+%install
+(
+cd src
+%mvn_install
+)
+
+%files -f src/.mfiles
+%dir %{_javadir}/%{name}
+%license LICENSE.txt NOTICE.txt
+
+%files javadoc -f src/.mfiles-javadoc
+%license LICENSE.txt NOTICE.txt
+
+%changelog
+* Mon Aug 17 2020 maminjie - 2.2.2-1
+- package init
diff --git a/tiles.yaml b/tiles.yaml
new file mode 100644
index 0000000..659bd8e
--- /dev/null
+++ b/tiles.yaml
@@ -0,0 +1,4 @@
+version_control: github
+src_repo: apache/tiles
+tag_prefix: "tiles-"
+seperator: "."