From ea75fadc9670d12ee4c6523a7d3d03ec1c5ead54 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Sun, 16 Feb 2014 18:36:45 +0100
Subject: [PATCH 01/80] WW-3887 Extracts dedicated interface (with default
implementation) to handle errors
---
.../org/apache/struts2/StrutsConstants.java | 2 +
.../DefaultDispatcherErrorHandler.java | 110 ++++++++++++++++
.../apache/struts2/dispatcher/Dispatcher.java | 121 +++++-------------
.../dispatcher/DispatcherErrorHandler.java | 29 +++++
core/src/main/resources/struts-default.xml | 4 +
5 files changed, 179 insertions(+), 87 deletions(-)
create mode 100644 core/src/main/java/org/apache/struts2/dispatcher/DefaultDispatcherErrorHandler.java
create mode 100644 core/src/main/java/org/apache/struts2/dispatcher/DispatcherErrorHandler.java
diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java b/core/src/main/java/org/apache/struts2/StrutsConstants.java
index 1cb4ab578..3423ec8bd 100644
--- a/core/src/main/java/org/apache/struts2/StrutsConstants.java
+++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java
@@ -279,4 +279,6 @@ public final class StrutsConstants {
public static final String DEFAULT_TEMPLATE_TYPE_CONFIG_KEY = "struts.ui.templateSuffix";
+ /** Allows override default DispatcherErrorHandler **/
+ public static final String STRUTS_DISPATCHER_ERROR_HANDLER = "struts.dispatcher.errorHandler";
}
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/DefaultDispatcherErrorHandler.java b/core/src/main/java/org/apache/struts2/dispatcher/DefaultDispatcherErrorHandler.java
new file mode 100644
index 000000000..b09c890a1
--- /dev/null
+++ b/core/src/main/java/org/apache/struts2/dispatcher/DefaultDispatcherErrorHandler.java
@@ -0,0 +1,110 @@
+package org.apache.struts2.dispatcher;
+
+import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.util.location.Location;
+import com.opensymphony.xwork2.util.location.LocationUtils;
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
+import freemarker.template.Template;
+import org.apache.struts2.StrutsConstants;
+import org.apache.struts2.StrutsException;
+import org.apache.struts2.views.freemarker.FreemarkerManager;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class DefaultDispatcherErrorHandler implements DispatcherErrorHandler {
+
+ private static final Logger LOG = LoggerFactory.getLogger(DefaultDispatcherErrorHandler.class);
+
+ private FreemarkerManager freemarkerManager;
+ private boolean devMode;
+ private Template template;
+
+ @Inject
+ public void setFreemarkerManager(FreemarkerManager freemarkerManager) {
+ this.freemarkerManager = freemarkerManager;
+ }
+
+ @Inject(StrutsConstants.STRUTS_DEVMODE)
+ public void setDevMode(String devMode) {
+ this.devMode = "true".equalsIgnoreCase(devMode);
+ }
+
+ public void init(ServletContext ctx) {
+ try {
+ freemarker.template.Configuration config = freemarkerManager.getConfiguration(ctx);
+ template = config.getTemplate("/org/apache/struts2/dispatcher/error.ftl");
+ } catch (IOException e) {
+ throw new StrutsException(e);
+ }
+ }
+
+ public void handleError(HttpServletRequest request, HttpServletResponse response, int code, Exception e) {
+ Boolean devModeOverride = FilterDispatcher.getDevModeOverride();
+ if (devModeOverride != null ? devModeOverride : devMode) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Exception occurred during processing request: #0", e, e.getMessage());
+ }
+ try {
+
+ List chain = new ArrayList();
+ Throwable cur = e;
+ chain.add(cur);
+ while ((cur = cur.getCause()) != null) {
+ chain.add(cur);
+ }
+
+ HashMap data = new HashMap();
+ data.put("exception", e);
+ data.put("unknown", Location.UNKNOWN);
+ data.put("chain", chain);
+ data.put("locator", new Dispatcher.Locator());
+
+ Writer writer = new StringWriter();
+ template.process(data, writer);
+
+ response.setContentType("text/html");
+ response.getWriter().write(writer.toString());
+ response.getWriter().close();
+ } catch (Exception exp) {
+ try {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Cannot show problem report!", exp);
+ }
+ response.sendError(code, "Unable to show problem report:\n" + exp + "\n\n" + LocationUtils.getLocation(exp));
+ } catch (IOException ex) {
+ // we're already sending an error, not much else we can do if more stuff breaks
+ }
+ }
+ } else {
+ try {
+ // WW-1977: Only put errors in the request when code is a 500 error
+ if (code == HttpServletResponse.SC_INTERNAL_SERVER_ERROR) {
+ // WW-4103: Only logs error when application error occurred, not Struts error
+ if (LOG.isErrorEnabled()) {
+ LOG.error("Exception occurred during processing request: #0", e, e.getMessage());
+ }
+ // send a http error response to use the servlet defined error handler
+ // make the exception availible to the web.xml defined error page
+ request.setAttribute("javax.servlet.error.exception", e);
+
+ // for compatibility
+ request.setAttribute("javax.servlet.jsp.jspException", e);
+ }
+
+ // send the error response
+ response.sendError(code, e.getMessage());
+ } catch (IOException e1) {
+ // we're already sending an error, not much else we can do if more stuff breaks
+ }
+ }
+ }
+}
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
index 9c490ac32..36d858d6a 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
@@ -21,20 +21,8 @@
package org.apache.struts2.dispatcher;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.ActionProxyFactory;
-import com.opensymphony.xwork2.FileManager;
-import com.opensymphony.xwork2.FileManagerFactory;
-import com.opensymphony.xwork2.LocaleProvider;
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.Result;
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.config.ConfigurationManager;
-import com.opensymphony.xwork2.config.ConfigurationProvider;
-import com.opensymphony.xwork2.config.FileManagerFactoryProvider;
-import com.opensymphony.xwork2.config.FileManagerProvider;
+import com.opensymphony.xwork2.*;
+import com.opensymphony.xwork2.config.*;
import com.opensymphony.xwork2.config.entities.InterceptorMapping;
import com.opensymphony.xwork2.config.entities.InterceptorStackConfig;
import com.opensymphony.xwork2.config.entities.PackageConfig;
@@ -53,7 +41,6 @@ import com.opensymphony.xwork2.util.location.LocationUtils;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
import com.opensymphony.xwork2.util.profiling.UtilTimerStack;
-import freemarker.template.Template;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsConstants;
import org.apache.struts2.StrutsException;
@@ -68,7 +55,6 @@ import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import org.apache.struts2.util.AttributeMap;
import org.apache.struts2.util.ObjectFactoryDestroyable;
import org.apache.struts2.util.fs.JBossFileManager;
-import org.apache.struts2.views.freemarker.FreemarkerManager;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
@@ -76,16 +62,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
/**
@@ -168,6 +145,11 @@ public class Dispatcher {
*/
private boolean handleException;
+ /**
+ * Interface used to handle internal errors or missing resources
+ */
+ private DispatcherErrorHandler errorHandler;
+
/**
* Provide the dispatcher instance for the current thread.
*
@@ -280,6 +262,11 @@ public class Dispatcher {
this.handleException = Boolean.parseBoolean(handleException);
}
+ @Inject
+ public void setDispatcherErrorHandler(DispatcherErrorHandler errorHandler) {
+ this.errorHandler = errorHandler;
+ }
+
/**
* Releases all instances bound to this dispatcher instance.
*/
@@ -492,6 +479,10 @@ public class Dispatcher {
l.dispatcherInitialized(this);
}
}
+ //if (servletContext != null) {
+ errorHandler.init(servletContext);
+ //}
+
} catch (Exception ex) {
if (LOG.isErrorEnabled())
LOG.error("Dispatcher initialization failed", ex);
@@ -847,70 +838,26 @@ public class Dispatcher {
* @param code the HttpServletResponse error code (see {@link javax.servlet.http.HttpServletResponse} for possible error codes).
* @param e the Exception that is reported.
* @param ctx the ServletContext object.
+ *
+ * @deprecated remove in version 3.0 - use version without ServletContext parameter
*/
+ @Deprecated
public void sendError(HttpServletRequest request, HttpServletResponse response, ServletContext ctx, int code, Exception e) {
- Boolean devModeOverride = FilterDispatcher.getDevModeOverride();
- if (devModeOverride != null ? devModeOverride : devMode) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Exception occurred during processing request: #0", e, e.getMessage());
- }
- try {
- FreemarkerManager mgr = getContainer().getInstance(FreemarkerManager.class);
+ sendError(request, response, code, e);
+ }
- freemarker.template.Configuration config = mgr.getConfiguration(ctx);
- Template template = config.getTemplate("/org/apache/struts2/dispatcher/error.ftl");
-
- List chain = new ArrayList();
- Throwable cur = e;
- chain.add(cur);
- while ((cur = cur.getCause()) != null) {
- chain.add(cur);
- }
-
- HashMap data = new HashMap();
- data.put("exception", e);
- data.put("unknown", Location.UNKNOWN);
- data.put("chain", chain);
- data.put("locator", new Locator());
-
- Writer writer = new StringWriter();
- template.process(data, writer);
-
- response.setContentType("text/html");
- response.getWriter().write(writer.toString());
- response.getWriter().close();
- } catch (Exception exp) {
- try {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Cannot show problem report!", exp);
- }
- response.sendError(code, "Unable to show problem report:\n" + exp + "\n\n" + LocationUtils.getLocation(exp));
- } catch (IOException ex) {
- // we're already sending an error, not much else we can do if more stuff breaks
- }
- }
- } else {
- try {
- // WW-1977: Only put errors in the request when code is a 500 error
- if (code == HttpServletResponse.SC_INTERNAL_SERVER_ERROR) {
- // WW-4103: Only logs error when application error occurred, not Struts error
- if (LOG.isErrorEnabled()) {
- LOG.error("Exception occurred during processing request: #0", e, e.getMessage());
- }
- // send a http error response to use the servlet defined error handler
- // make the exception availible to the web.xml defined error page
- request.setAttribute("javax.servlet.error.exception", e);
-
- // for compatibility
- request.setAttribute("javax.servlet.jsp.jspException", e);
- }
-
- // send the error response
- response.sendError(code, e.getMessage());
- } catch (IOException e1) {
- // we're already sending an error, not much else we can do if more stuff breaks
- }
- }
+ /**
+ * Send an HTTP error response code.
+ *
+ * @param request the HttpServletRequest object.
+ * @param response the HttpServletResponse object.
+ * @param code the HttpServletResponse error code (see {@link javax.servlet.http.HttpServletResponse} for possible error codes).
+ * @param e the Exception that is reported.
+ *
+ * @since 2.3.17
+ */
+ public void sendError(HttpServletRequest request, HttpServletResponse response, int code, Exception e) {
+ errorHandler.handleError(request, response, code, e);
}
/**
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/DispatcherErrorHandler.java b/core/src/main/java/org/apache/struts2/dispatcher/DispatcherErrorHandler.java
new file mode 100644
index 000000000..fe8f6ecc7
--- /dev/null
+++ b/core/src/main/java/org/apache/struts2/dispatcher/DispatcherErrorHandler.java
@@ -0,0 +1,29 @@
+package org.apache.struts2.dispatcher;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Implementation of this interface is used to handle internal errors or missing resources.
+ * Basically it sends back HTTP error codes or error page depends on requirements.
+ */
+public interface DispatcherErrorHandler {
+
+ /**
+ * Init instance after creating {@link org.apache.struts2.dispatcher.Dispatcher}
+ * @param ctx current {@link javax.servlet.ServletContext}
+ */
+ public void init(ServletContext ctx);
+
+ /**
+ * Handle passed error code or exception
+ *
+ * @param request current {@link javax.servlet.http.HttpServletRequest}
+ * @param response current {@link javax.servlet.http.HttpServletResponse}
+ * @param code HTTP Error Code, see {@link javax.servlet.http.HttpServletResponse} for possible error codes
+ * @param e Exception to report
+ */
+ public void handleError(HttpServletRequest request, HttpServletResponse response, int code, Exception e);
+
+}
diff --git a/core/src/main/resources/struts-default.xml b/core/src/main/resources/struts-default.xml
index 635b241cb..c65963af8 100644
--- a/core/src/main/resources/struts-default.xml
+++ b/core/src/main/resources/struts-default.xml
@@ -132,6 +132,10 @@
+
+
+
+
From e98cd4005ac790311ab9be566bdcc4f2c34cc690 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Sun, 16 Feb 2014 18:37:17 +0100
Subject: [PATCH 02/80] WW-3887 Updates unit tests to match the new error
handling mechanism
---
.../config/DefaultBeanSelectionProvider.java | 3 +++
.../dispatcher/FilterDispatcherTest.java | 5 +++++
.../CodebehindUnknownHandlerTest.java | 2 ++
.../struts2/views/jsp/PortletUrlTagTest.java | 22 +++++++------------
4 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java b/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java
index c4d89032d..b6b5b4590 100644
--- a/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java
+++ b/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java
@@ -60,6 +60,7 @@ import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
import com.opensymphony.xwork2.validator.ActionValidatorManager;
import org.apache.struts2.StrutsConstants;
import org.apache.struts2.components.UrlRenderer;
+import org.apache.struts2.dispatcher.DispatcherErrorHandler;
import org.apache.struts2.dispatcher.StaticContentLoader;
import org.apache.struts2.dispatcher.mapper.ActionMapper;
import org.apache.struts2.dispatcher.multipart.MultiPartRequest;
@@ -380,6 +381,8 @@ public class DefaultBeanSelectionProvider extends AbstractBeanSelectionProvider
alias(TextParser.class, StrutsConstants.STRUTS_EXPRESSION_PARSER, builder, props);
+ alias(DispatcherErrorHandler.class, StrutsConstants.STRUTS_DISPATCHER_ERROR_HANDLER, builder, props);
+
switchDevMode(props);
// Convert Struts properties into XWork properties
diff --git a/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java b/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
index 0d2845604..3a6b761fe 100644
--- a/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
+++ b/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
@@ -125,6 +125,11 @@ public class FilterDispatcherTest extends StrutsInternalTestCase {
public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context, ActionMapping mapping) throws ServletException {
serviceRequest = true;
}
+
+ @Override
+ public void sendError(HttpServletRequest request, HttpServletResponse response, ServletContext ctx, int code, Exception e) {
+ // NO-OP
+ }
}
public static class InnerDispatcher extends Dispatcher {
diff --git a/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java b/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java
index dada8161d..e6cff7965 100644
--- a/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java
+++ b/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java
@@ -29,6 +29,7 @@ import com.opensymphony.xwork2.config.entities.ResultTypeConfig;
import com.opensymphony.xwork2.util.XWorkTestCaseHelper;
import org.apache.struts2.StrutsTestCase;
import org.apache.struts2.dispatcher.ServletDispatcherResult;
+import org.springframework.mock.web.MockServletContext;
import javax.servlet.ServletContext;
import java.net.MalformedURLException;
@@ -46,6 +47,7 @@ public class CodebehindUnknownHandlerTest extends StrutsTestCase {
configuration = configurationManager.getConfiguration();
container = configuration.getContainer();
actionProxyFactory = container.getInstance(ActionProxyFactory.class);
+ servletContext = new MockServletContext();
initDispatcher(Collections.singletonMap("actionPackages", "foo.bar"));
mockServletContext = new Mock(ServletContext.class);
handler = new CodebehindUnknownHandler("codebehind-default", configuration);
diff --git a/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java b/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java
index 5f34cfc81..8bdb3fbcb 100644
--- a/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java
+++ b/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java
@@ -35,21 +35,14 @@ import org.apache.struts2.portlet.util.PortletUrlHelper;
import org.jmock.Mock;
import org.jmock.cglib.MockObjectTestCase;
import org.jmock.core.Constraint;
+import org.springframework.mock.web.MockServletContext;
-import javax.portlet.PortletContext;
-import javax.portlet.PortletMode;
-import javax.portlet.PortletURL;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-import javax.portlet.WindowState;
+import javax.portlet.*;
+import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
+import java.util.*;
import static org.apache.struts2.StrutsStatics.STRUTS_PORTLET_CONTEXT;
@@ -92,7 +85,8 @@ public class PortletUrlTagTest extends MockObjectTestCase {
public void setUp() throws Exception {
super.setUp();
- dispatcher = new Dispatcher(null, new HashMap());
+ ServletContext servletContext = new MockServletContext();
+ dispatcher = new Dispatcher(servletContext, new HashMap());
dispatcher.init();
Dispatcher.setInstance(dispatcher);
@@ -100,7 +94,7 @@ public class PortletUrlTagTest extends MockObjectTestCase {
stack.getContext().put(ActionContext.CONTAINER, dispatcher.getContainer());
ActionContext context = new ActionContext(stack.getContext());
ActionContext.setContext(context);
-
+
mockActionInvocation = mock(ActionInvocation.class);
mockActionProxy = mock(ActionProxy.class);
mockHttpReq = mock(HttpServletRequest.class);
@@ -111,7 +105,7 @@ public class PortletUrlTagTest extends MockObjectTestCase {
mockPortletUrl = mock(PortletURL.class);
mockJspWriter = new MockJspWriter();
mockCtx = mock(PortletContext.class);
-
+
mockActionProxy.stubs().method("getNamespace").will(returnValue("/view"));
mockActionInvocation.stubs().method("getProxy").will(returnValue(
mockActionProxy.proxy()));
From 51629304b3e7447a0b5669a85e16a6d43bff94a9 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Sun, 16 Feb 2014 19:17:48 +0100
Subject: [PATCH 03/80] Sets proper output directory for reports
---
.../java/com/opensymphony/xwork2/TestNGXWorkTestCaseTest.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/xwork-core/src/test/java/com/opensymphony/xwork2/TestNGXWorkTestCaseTest.java b/xwork-core/src/test/java/com/opensymphony/xwork2/TestNGXWorkTestCaseTest.java
index 7ab7dc221..d13ac13b2 100644
--- a/xwork-core/src/test/java/com/opensymphony/xwork2/TestNGXWorkTestCaseTest.java
+++ b/xwork-core/src/test/java/com/opensymphony/xwork2/TestNGXWorkTestCaseTest.java
@@ -27,6 +27,7 @@ public class TestNGXWorkTestCaseTest extends TestCase {
TestListenerAdapter tla = new TestListenerAdapter();
TestNG testng = new TestNG();
testng.setTestClasses(new Class[] { RunTest.class });
+ testng.setOutputDirectory("target/surefire-reports");
testng.addListener(tla);
try {
testng.run();
From ef733aa9ee0afc7199b630d67e8e057be6341e86 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Sun, 16 Feb 2014 20:08:30 +0100
Subject: [PATCH 04/80] WW-3887 Uses new version of Dispatcher#sendError
---
.../main/java/org/apache/struts2/dispatcher/Dispatcher.java | 4 ++--
.../java/org/apache/struts2/dispatcher/FilterDispatcher.java | 2 +-
.../org/apache/struts2/dispatcher/ng/PrepareOperations.java | 2 +-
.../org/apache/struts2/dispatcher/FilterDispatcherTest.java | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
index 36d858d6a..57a3dab39 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
@@ -555,10 +555,10 @@ public class Dispatcher {
}
} catch (ConfigurationException e) {
logConfigurationException(request, e);
- sendError(request, response, context, HttpServletResponse.SC_NOT_FOUND, e);
+ sendError(request, response, HttpServletResponse.SC_NOT_FOUND, e);
} catch (Exception e) {
if (handleException || devMode) {
- sendError(request, response, context, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e);
+ sendError(request, response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e);
} else {
throw new ServletException(e);
}
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
index 6f38026ef..970311ce5 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
@@ -409,7 +409,7 @@ public class FilterDispatcher implements StrutsStatics, Filter {
mapping = actionMapper.getMapping(request, dispatcher.getConfigurationManager());
} catch (Exception ex) {
log.error("error getting ActionMapping", ex);
- dispatcher.sendError(request, response, servletContext, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex);
+ dispatcher.sendError(request, response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex);
return;
}
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ng/PrepareOperations.java b/core/src/main/java/org/apache/struts2/dispatcher/ng/PrepareOperations.java
index 93e105510..a26a8b2d5 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/ng/PrepareOperations.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/ng/PrepareOperations.java
@@ -163,7 +163,7 @@ public class PrepareOperations {
request.setAttribute(STRUTS_ACTION_MAPPING_KEY, mapping);
}
} catch (Exception ex) {
- dispatcher.sendError(request, response, servletContext, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex);
+ dispatcher.sendError(request, response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex);
}
}
diff --git a/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java b/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
index 3a6b761fe..2c2d747ba 100644
--- a/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
+++ b/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
@@ -127,7 +127,7 @@ public class FilterDispatcherTest extends StrutsInternalTestCase {
}
@Override
- public void sendError(HttpServletRequest request, HttpServletResponse response, ServletContext ctx, int code, Exception e) {
+ public void sendError(HttpServletRequest request, HttpServletResponse response, int code, Exception e) {
// NO-OP
}
}
From 701f0a06d0f9ffb50ad9927e949d90e7f578a087 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Sun, 16 Feb 2014 20:15:37 +0100
Subject: [PATCH 05/80] WW-3887 Extracts methods
---
.../DefaultDispatcherErrorHandler.java | 112 ++++++++++--------
1 file changed, 63 insertions(+), 49 deletions(-)
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/DefaultDispatcherErrorHandler.java b/core/src/main/java/org/apache/struts2/dispatcher/DefaultDispatcherErrorHandler.java
index b09c890a1..c093402f1 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/DefaultDispatcherErrorHandler.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/DefaultDispatcherErrorHandler.java
@@ -20,6 +20,10 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+/**
+ * Default implementation of {@link org.apache.struts2.dispatcher.DispatcherErrorHandler}
+ * which sends Error Report in devMode or {@link javax.servlet.http.HttpServletResponse#sendError} otherwise.
+ */
public class DefaultDispatcherErrorHandler implements DispatcherErrorHandler {
private static final Logger LOG = LoggerFactory.getLogger(DefaultDispatcherErrorHandler.class);
@@ -50,61 +54,71 @@ public class DefaultDispatcherErrorHandler implements DispatcherErrorHandler {
public void handleError(HttpServletRequest request, HttpServletResponse response, int code, Exception e) {
Boolean devModeOverride = FilterDispatcher.getDevModeOverride();
if (devModeOverride != null ? devModeOverride : devMode) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Exception occurred during processing request: #0", e, e.getMessage());
- }
- try {
-
- List chain = new ArrayList();
- Throwable cur = e;
- chain.add(cur);
- while ((cur = cur.getCause()) != null) {
- chain.add(cur);
- }
-
- HashMap data = new HashMap();
- data.put("exception", e);
- data.put("unknown", Location.UNKNOWN);
- data.put("chain", chain);
- data.put("locator", new Dispatcher.Locator());
-
- Writer writer = new StringWriter();
- template.process(data, writer);
-
- response.setContentType("text/html");
- response.getWriter().write(writer.toString());
- response.getWriter().close();
- } catch (Exception exp) {
- try {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Cannot show problem report!", exp);
- }
- response.sendError(code, "Unable to show problem report:\n" + exp + "\n\n" + LocationUtils.getLocation(exp));
- } catch (IOException ex) {
- // we're already sending an error, not much else we can do if more stuff breaks
- }
- }
+ handleErrorInDevMode(response, code, e);
} else {
- try {
- // WW-1977: Only put errors in the request when code is a 500 error
- if (code == HttpServletResponse.SC_INTERNAL_SERVER_ERROR) {
- // WW-4103: Only logs error when application error occurred, not Struts error
- if (LOG.isErrorEnabled()) {
- LOG.error("Exception occurred during processing request: #0", e, e.getMessage());
- }
- // send a http error response to use the servlet defined error handler
- // make the exception availible to the web.xml defined error page
- request.setAttribute("javax.servlet.error.exception", e);
+ sendErrorResponse(request, response, code, e);
+ }
+ }
- // for compatibility
- request.setAttribute("javax.servlet.jsp.jspException", e);
+ protected void sendErrorResponse(HttpServletRequest request, HttpServletResponse response, int code, Exception e) {
+ try {
+ // WW-1977: Only put errors in the request when code is a 500 error
+ if (code == HttpServletResponse.SC_INTERNAL_SERVER_ERROR) {
+ // WW-4103: Only logs error when application error occurred, not Struts error
+ if (LOG.isErrorEnabled()) {
+ LOG.error("Exception occurred during processing request: #0", e, e.getMessage());
}
+ // send a http error response to use the servlet defined error handler
+ // make the exception available to the web.xml defined error page
+ request.setAttribute("javax.servlet.error.exception", e);
- // send the error response
- response.sendError(code, e.getMessage());
- } catch (IOException e1) {
+ // for compatibility
+ request.setAttribute("javax.servlet.jsp.jspException", e);
+ }
+
+ // send the error response
+ response.sendError(code, e.getMessage());
+ } catch (IOException e1) {
+ // we're already sending an error, not much else we can do if more stuff breaks
+ }
+ }
+
+ protected void handleErrorInDevMode(HttpServletResponse response, int code, Exception e) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Exception occurred during processing request: #0", e, e.getMessage());
+ }
+ try {
+ List chain = new ArrayList();
+ Throwable cur = e;
+ chain.add(cur);
+ while ((cur = cur.getCause()) != null) {
+ chain.add(cur);
+ }
+
+ Writer writer = new StringWriter();
+ template.process(createReportData(e, chain), writer);
+
+ response.setContentType("text/html");
+ response.getWriter().write(writer.toString());
+ response.getWriter().close();
+ } catch (Exception exp) {
+ try {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Cannot show problem report!", exp);
+ }
+ response.sendError(code, "Unable to show problem report:\n" + exp + "\n\n" + LocationUtils.getLocation(exp));
+ } catch (IOException ex) {
// we're already sending an error, not much else we can do if more stuff breaks
}
}
}
+
+ protected HashMap createReportData(Exception e, List chain) {
+ HashMap data = new HashMap();
+ data.put("exception", e);
+ data.put("unknown", Location.UNKNOWN);
+ data.put("chain", chain);
+ data.put("locator", new Dispatcher.Locator());
+ return data;
+ }
}
From 17a9a9d56b4c13ac5b328ae41b75e6e7531359d3 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Sun, 16 Feb 2014 20:21:07 +0100
Subject: [PATCH 06/80] WW-3887 Updates @see reference
---
.../src/main/java/org/apache/struts2/dispatcher/Dispatcher.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
index 57a3dab39..032df3617 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
@@ -70,7 +70,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
* of the primary dispatcher holds an instance of this dispatcher to be shared for
* all requests.
*
- * @see org.apache.struts2.dispatcher.FilterDispatcher
+ * @see org.apache.struts2.dispatcher.ng.InitOperations
*/
public class Dispatcher {
From 01d401ea1498671458ac59ef1e7f84961a5cdcc9 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Mon, 17 Feb 2014 09:29:40 +0100
Subject: [PATCH 07/80] Removes duplicated ServletContext passed via parameters
---
.../apache/struts2/dispatcher/Dispatcher.java | 77 +++++++++++++++----
1 file changed, 61 insertions(+), 16 deletions(-)
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
index 032df3617..863c94b1f 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
@@ -494,6 +494,16 @@ public class Dispatcher {
return new ConfigurationManager(name);
}
+ /**
+ * @deprecated use version without ServletContext param
+ */
+ @Deprecated
+ public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context,
+ ActionMapping mapping) throws ServletException {
+
+ serviceAction(request, response, mapping);
+ }
+
/**
* Load Action class for mapping and invoke the appropriate Action method, or go directly to the Result.
*
@@ -509,12 +519,13 @@ public class Dispatcher {
* @param mapping the action mapping object
* @throws ServletException when an unknown error occurs (not a 404, but typically something that
* would end up as a 5xx by the servlet container)
- * @param context Our ServletContext object
+ *
+ * @since 2.3.17
*/
- public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context,
- ActionMapping mapping) throws ServletException {
+ public void serviceAction(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping)
+ throws ServletException {
- Map extraContext = createContextMap(request, response, mapping, context);
+ Map extraContext = createContextMap(request, response, mapping);
// If there was a previous value stack, then create a new copy and pass it in to be used by the new Action
ValueStack stack = (ValueStack) request.getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);
@@ -586,17 +597,28 @@ public class Dispatcher {
}
}
+ /**
+ * @deprecated use version without servletContext param
+ */
+ @Deprecated
+ public Map createContextMap(HttpServletRequest request, HttpServletResponse response,
+ ActionMapping mapping, ServletContext context) {
+
+ return createContextMap(request, response, mapping);
+ }
+
/**
* Create a context map containing all the wrapped request objects
*
* @param request The servlet request
* @param response The servlet response
* @param mapping The action mapping
- * @param context The servlet context
* @return A map of context objects
+ *
+ * @since 2.3.17
*/
public Map createContextMap(HttpServletRequest request, HttpServletResponse response,
- ActionMapping mapping, ServletContext context) {
+ ActionMapping mapping) {
// request map wrapping the http request objects
Map requestMap = new RequestMap(request);
@@ -608,9 +630,9 @@ public class Dispatcher {
Map session = new SessionMap(request);
// application map wrapping the ServletContext
- Map application = new ApplicationMap(context);
+ Map application = new ApplicationMap(servletContext);
- Map extraContext = createContextMap(requestMap, params, session, application, request, response, context);
+ Map extraContext = createContextMap(requestMap, params, session, application, request, response);
if (mapping != null) {
extraContext.put(ServletActionContext.ACTION_MAPPING, mapping);
@@ -618,6 +640,21 @@ public class Dispatcher {
return extraContext;
}
+ /**
+ * @deprecated use version without ServletContext param
+ */
+ @Deprecated
+ public HashMap createContextMap(Map requestMap,
+ Map parameterMap,
+ Map sessionMap,
+ Map applicationMap,
+ HttpServletRequest request,
+ HttpServletResponse response,
+ ServletContext servletContext) {
+
+ return createContextMap(requestMap, parameterMap, sessionMap, applicationMap, request, response);
+ }
+
/**
* Merge all application and servlet attributes into a single HashMap to represent the entire
* Action context.
@@ -628,16 +665,16 @@ public class Dispatcher {
* @param applicationMap a Map of all servlet context attributes.
* @param request the HttpServletRequest object.
* @param response the HttpServletResponse object.
- * @param servletContext the ServletContextmapping object.
* @return a HashMap representing the Action context.
+ *
+ * @since 2.3.17
*/
public HashMap createContextMap(Map requestMap,
Map parameterMap,
Map sessionMap,
Map applicationMap,
HttpServletRequest request,
- HttpServletResponse response,
- ServletContext servletContext) {
+ HttpServletResponse response) {
HashMap extraContext = new HashMap();
extraContext.put(ActionContext.PARAMETERS, new HashMap(parameterMap));
extraContext.put(ActionContext.SESSION, sessionMap);
@@ -672,9 +709,8 @@ public class Dispatcher {
* Return the path to save uploaded files to (this is configurable).
*
* @return the path to save uploaded files to
- * @param servletContext Our ServletContext
*/
- private String getSaveDir(ServletContext servletContext) {
+ private String getSaveDir() {
String saveDir = multipartSaveDir.trim();
if (saveDir.equals("")) {
@@ -762,6 +798,14 @@ public class Dispatcher {
}
}
+ /**
+ * @deprecated use version without ServletContext param
+ */
+ @Deprecated
+ public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException {
+ return wrapRequest(request);
+ }
+
/**
* Wrap and return the given request or return the original request object.
*
@@ -771,12 +815,13 @@ public class Dispatcher {
* flexible - look first to that object before overriding this method to handle multipart data.
*
* @param request the HttpServletRequest object.
- * @param servletContext Our ServletContext object
* @return a wrapped request or original request.
* @see org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper
* @throws java.io.IOException on any error.
+ *
+ * @since 2.3.17
*/
- public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException {
+ public HttpServletRequest wrapRequest(HttpServletRequest request) throws IOException {
// don't wrap more than once
if (request instanceof StrutsRequestWrapper) {
return request;
@@ -786,7 +831,7 @@ public class Dispatcher {
if (content_type != null && content_type.contains("multipart/form-data")) {
MultiPartRequest mpr = getMultiPartRequest();
LocaleProvider provider = getContainer().getInstance(LocaleProvider.class);
- request = new MultiPartRequestWrapper(mpr, request, getSaveDir(servletContext), provider);
+ request = new MultiPartRequestWrapper(mpr, request, getSaveDir(), provider);
} else {
request = new StrutsRequestWrapper(request, disableRequestAttributeValueStackLookup);
}
From 8746fd1f1cc2d4998663687115f5d04629f5786d Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Mon, 17 Feb 2014 09:31:56 +0100
Subject: [PATCH 08/80] Deprecates constructors based on ServletContext and
introduces new one instead
---
.../struts2/dispatcher/ng/ExecuteOperations.java | 10 +++++++---
.../struts2/dispatcher/ng/PrepareOperations.java | 11 +++++++----
2 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ng/ExecuteOperations.java b/core/src/main/java/org/apache/struts2/dispatcher/ng/ExecuteOperations.java
index 7ca3d6a2f..0c94249ea 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/ng/ExecuteOperations.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/ng/ExecuteOperations.java
@@ -35,12 +35,16 @@ import java.io.IOException;
* Contains execution operations for filters
*/
public class ExecuteOperations {
- private ServletContext servletContext;
+
private Dispatcher dispatcher;
+ @Deprecated
public ExecuteOperations(ServletContext servletContext, Dispatcher dispatcher) {
this.dispatcher = dispatcher;
- this.servletContext = servletContext;
+ }
+
+ public ExecuteOperations(Dispatcher dispatcher) {
+ this.dispatcher = dispatcher;
}
/**
@@ -74,6 +78,6 @@ public class ExecuteOperations {
* @throws ServletException
*/
public void executeAction(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws ServletException {
- dispatcher.serviceAction(request, response, servletContext, mapping);
+ dispatcher.serviceAction(request, response, mapping);
}
}
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ng/PrepareOperations.java b/core/src/main/java/org/apache/struts2/dispatcher/ng/PrepareOperations.java
index a26a8b2d5..ccf21c7c1 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/ng/PrepareOperations.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/ng/PrepareOperations.java
@@ -47,15 +47,18 @@ public class PrepareOperations {
private static final Logger LOG = LoggerFactory.getLogger(PrepareOperations.class);
- private ServletContext servletContext;
private Dispatcher dispatcher;
private static final String STRUTS_ACTION_MAPPING_KEY = "struts.actionMapping";
public static final String CLEANUP_RECURSION_COUNTER = "__cleanup_recursion_counter";
private Logger log = LoggerFactory.getLogger(PrepareOperations.class);
+ @Deprecated
public PrepareOperations(ServletContext servletContext, Dispatcher dispatcher) {
this.dispatcher = dispatcher;
- this.servletContext = servletContext;
+ }
+
+ public PrepareOperations(Dispatcher dispatcher) {
+ this.dispatcher = dispatcher;
}
/**
@@ -75,7 +78,7 @@ public class PrepareOperations {
ctx = new ActionContext(new HashMap(oldContext.getContextMap()));
} else {
ValueStack stack = dispatcher.getContainer().getInstance(ValueStackFactory.class).createValueStack();
- stack.getContext().putAll(dispatcher.createContextMap(request, response, null, servletContext));
+ stack.getContext().putAll(dispatcher.createContextMap(request, response, null));
ctx = new ActionContext(stack.getContext());
}
request.setAttribute(CLEANUP_RECURSION_COUNTER, counter);
@@ -131,7 +134,7 @@ public class PrepareOperations {
try {
// Wrap request first, just in case it is multipart/form-data
// parameters might not be accessible through before encoding (ww-1278)
- request = dispatcher.wrapRequest(request, servletContext);
+ request = dispatcher.wrapRequest(request);
} catch (IOException e) {
throw new ServletException("Could not wrap servlet request with MultipartRequestWrapper!", e);
}
From ba0eda0c5469dabb4b48461a2a013397ee633302 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Mon, 17 Feb 2014 09:32:19 +0100
Subject: [PATCH 09/80] Uses new constructors of Prepare and Execution without
ServletContext
---
.../struts2/dispatcher/ng/filter/StrutsExecuteFilter.java | 4 ++--
.../dispatcher/ng/filter/StrutsPrepareAndExecuteFilter.java | 4 ++--
.../struts2/dispatcher/ng/filter/StrutsPrepareFilter.java | 2 +-
.../apache/struts2/dispatcher/ng/listener/StrutsListener.java | 2 +-
.../apache/struts2/dispatcher/ng/servlet/StrutsServlet.java | 4 ++--
5 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsExecuteFilter.java b/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsExecuteFilter.java
index bd522bbe8..7f8164f9d 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsExecuteFilter.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsExecuteFilter.java
@@ -57,8 +57,8 @@ public class StrutsExecuteFilter implements StrutsStatics, Filter {
Dispatcher dispatcher = init.findDispatcherOnThread();
init.initStaticContentLoader(new FilterHostConfig(filterConfig), dispatcher);
- prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher);
- execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);
+ prepare = new PrepareOperations(dispatcher);
+ execute = new ExecuteOperations(dispatcher);
}
}
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsPrepareAndExecuteFilter.java b/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsPrepareAndExecuteFilter.java
index 1c3d3b4ae..970d8e7c9 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsPrepareAndExecuteFilter.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsPrepareAndExecuteFilter.java
@@ -57,8 +57,8 @@ public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter {
dispatcher = init.initDispatcher(config);
init.initStaticContentLoader(config, dispatcher);
- prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher);
- execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);
+ prepare = new PrepareOperations(dispatcher);
+ execute = new ExecuteOperations(dispatcher);
this.excludedPatterns = init.buildExcludedPatternsList(dispatcher);
postInit(dispatcher, filterConfig);
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsPrepareFilter.java b/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsPrepareFilter.java
index ea0e51077..27ce17ea3 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsPrepareFilter.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsPrepareFilter.java
@@ -55,7 +55,7 @@ public class StrutsPrepareFilter implements StrutsStatics, Filter {
init.initLogging(config);
dispatcher = init.initDispatcher(config);
- prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher);
+ prepare = new PrepareOperations(dispatcher);
this.excludedPatterns = init.buildExcludedPatternsList(dispatcher);
postInit(dispatcher, filterConfig);
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ng/listener/StrutsListener.java b/core/src/main/java/org/apache/struts2/dispatcher/ng/listener/StrutsListener.java
index 113d026ee..92c49ac39 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/ng/listener/StrutsListener.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/ng/listener/StrutsListener.java
@@ -46,7 +46,7 @@ public class StrutsListener implements ServletContextListener {
dispatcher = init.initDispatcher(config);
init.initStaticContentLoader(config, dispatcher);
- prepare = new PrepareOperations(config.getServletContext(), dispatcher);
+ prepare = new PrepareOperations(dispatcher);
sce.getServletContext().setAttribute(StrutsStatics.SERVLET_DISPATCHER, dispatcher);
} finally {
if (dispatcher != null) {
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ng/servlet/StrutsServlet.java b/core/src/main/java/org/apache/struts2/dispatcher/ng/servlet/StrutsServlet.java
index 9ea669f94..19c8c73b3 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/ng/servlet/StrutsServlet.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/ng/servlet/StrutsServlet.java
@@ -54,8 +54,8 @@ public class StrutsServlet extends HttpServlet {
dispatcher = init.initDispatcher(config);
init.initStaticContentLoader(config, dispatcher);
- prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher);
- execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);
+ prepare = new PrepareOperations(dispatcher);
+ execute = new ExecuteOperations(dispatcher);
} finally {
if (dispatcher != null) {
dispatcher.cleanUpAfterInit();
From a2e97a9ca41aeb9b6c8be68744dccb0b8c67f81d Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Mon, 17 Feb 2014 09:32:42 +0100
Subject: [PATCH 10/80] Uses the new versions of methods without ServletContext
---
.../java/org/apache/struts2/dispatcher/FilterDispatcher.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
index 970311ce5..22fc05177 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
@@ -361,7 +361,7 @@ public class FilterDispatcher implements StrutsStatics, Filter {
try {
// Wrap request first, just in case it is multipart/form-data
// parameters might not be accessible through before encoding (ww-1278)
- request = dispatcher.wrapRequest(request, getServletContext());
+ request = dispatcher.wrapRequest(request);
} catch (IOException e) {
String message = "Could not wrap servlet request with MultipartRequestWrapper!";
log.error(message, e);
@@ -431,7 +431,7 @@ public class FilterDispatcher implements StrutsStatics, Filter {
return;
}
- dispatcher.serviceAction(request, response, servletContext, mapping);
+ dispatcher.serviceAction(request, response, mapping);
} finally {
dispatcher.cleanUpRequest(request);
From 4a4d04164a31dc5b905eca1f345c6d2a26472c30 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Mon, 17 Feb 2014 09:33:38 +0100
Subject: [PATCH 11/80] Uses the new versions of methods without ServletContext
---
.../struts2/components/ActionComponent.java | 41 ++++++++-----------
.../apache/struts2/views/jsp/TagUtils.java | 23 +++++------
2 files changed, 28 insertions(+), 36 deletions(-)
diff --git a/core/src/main/java/org/apache/struts2/components/ActionComponent.java b/core/src/main/java/org/apache/struts2/components/ActionComponent.java
index 5eb703563..f18445461 100644
--- a/core/src/main/java/org/apache/struts2/components/ActionComponent.java
+++ b/core/src/main/java/org/apache/struts2/components/ActionComponent.java
@@ -21,17 +21,15 @@
package org.apache.struts2.components;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.PageContext;
-
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.ActionProxy;
+import com.opensymphony.xwork2.ActionProxyFactory;
+import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.ValueStackFactory;
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsException;
import org.apache.struts2.StrutsStatics;
@@ -43,15 +41,14 @@ import org.apache.struts2.views.annotations.StrutsTag;
import org.apache.struts2.views.annotations.StrutsTagAttribute;
import org.apache.struts2.views.jsp.TagUtils;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionProxy;
-import com.opensymphony.xwork2.ActionProxyFactory;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.inject.Inject;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-import com.opensymphony.xwork2.util.logging.Logger;
-import com.opensymphony.xwork2.util.logging.LoggerFactory;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.PageContext;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
/**
*
@@ -188,7 +185,6 @@ public class ActionComponent extends ContextBean {
Map newParams = createParametersForContext();
ActionContext ctx = new ActionContext(stack.getContext());
- ServletContext servletContext = (ServletContext) ctx.get(ServletActionContext.SERVLET_CONTEXT);
PageContext pageContext = (PageContext) ctx.get(ServletActionContext.PAGE_CONTEXT);
Map session = ctx.getSession();
Map application = ctx.getApplication();
@@ -199,8 +195,7 @@ public class ActionComponent extends ContextBean {
session,
application,
req,
- res,
- servletContext);
+ res);
ValueStack newStack = valueStackFactory.createValueStack(stack);
extraContext.put(ActionContext.VALUE_STACK, newStack);
diff --git a/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java b/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java
index a4a2848d2..ab7abea1f 100644
--- a/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java
+++ b/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java
@@ -21,12 +21,11 @@
package org.apache.struts2.views.jsp;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.PageContext;
-
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.config.ConfigurationException;
+import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.ValueStackFactory;
import org.apache.struts2.RequestUtils;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.ApplicationMap;
@@ -37,11 +36,10 @@ import org.apache.struts2.dispatcher.mapper.ActionMapper;
import org.apache.struts2.dispatcher.mapper.ActionMapping;
import org.apache.struts2.util.AttributeMap;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.PageContext;
+import java.util.Map;
/**
@@ -67,8 +65,7 @@ public class TagUtils {
new SessionMap(req),
new ApplicationMap(pageContext.getServletContext()),
req,
- res,
- pageContext.getServletContext());
+ res);
extraContext.put(ServletActionContext.PAGE_CONTEXT, pageContext);
stack.getContext().putAll(extraContext);
req.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
From d4ddd74ebed3a68fab70ddb9bb86ce5efa9ea65b Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Mon, 17 Feb 2014 09:34:03 +0100
Subject: [PATCH 12/80] Updates tests to new version of methods without
ServletContext
---
.../dispatcher/FilterDispatcherTest.java | 4 +-
.../apache/struts2/dispatcher/FilterTest.java | 4 +-
.../freemarker/FreeMarkerResultTest.java | 204 +-------------
.../FreemarkerResultMockedTest.java | 262 ++++++++++++++++++
.../struts2/views/jsp/AbstractTagTest.java | 3 +-
.../apache/struts2/views/jsp/URLTagTest.java | 3 +-
6 files changed, 280 insertions(+), 200 deletions(-)
create mode 100644 core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerResultMockedTest.java
diff --git a/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java b/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
index 2c2d747ba..4449e40d4 100644
--- a/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
+++ b/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
@@ -122,7 +122,7 @@ public class FilterDispatcherTest extends StrutsInternalTestCase {
return request;
}
- public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context, ActionMapping mapping) throws ServletException {
+ public void serviceAction(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws ServletException {
serviceRequest = true;
}
@@ -152,7 +152,7 @@ public class FilterDispatcherTest extends StrutsInternalTestCase {
return request;
}
- public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context, ActionMapping mapping) throws ServletException {
+ public void serviceAction(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws ServletException {
serviceRequest = true;
// if we set the chracter encoding AFTER we do wrap request, we will get
// a failing test
diff --git a/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java b/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java
index 04b5c945d..12f9a64ab 100644
--- a/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java
+++ b/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java
@@ -313,10 +313,10 @@ public class FilterTest extends StrutsInternalTestCase {
}
@Override
- public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context, ActionMapping mapping) throws ServletException {
+ public void serviceAction(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws ServletException {
service = true;
}
-
+
@Override
public void cleanup() {
cleanUp = true;
diff --git a/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java b/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java
index 62ab0eef3..d72182655 100644
--- a/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java
+++ b/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java
@@ -43,12 +43,14 @@ import javax.servlet.ServletContext;
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.util.HashMap;
import static org.apache.struts2.views.jsp.AbstractUITagTest.normalize;
/**
* Test case for FreeMarkerResult.
- *
*/
public class FreeMarkerResultTest extends StrutsInternalTestCase {
@@ -62,54 +64,6 @@ public class FreeMarkerResultTest extends StrutsInternalTestCase {
private FreemarkerManager mgr;
private MockHttpServletRequest request;
- public void testActionThatThrowsExceptionTag() throws Exception {
- //get fm config to use it in mock servlet context
- FreemarkerManager freemarkerManager = container.getInstance(FreemarkerManager.class);
- Configuration freemarkerConfig = freemarkerManager.getConfiguration(ServletActionContext.getServletContext());
- freemarkerConfig.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
-
- ServletContext servletContext = EasyMock.createNiceMock(ServletContext.class);
- File file = new File(FreeMarkerResultTest.class.getResource("callActionFreeMarker2.ftl").toURI());
- EasyMock.expect(servletContext.getRealPath("/tutorial/org/apache/struts2/views/freemarker/callActionFreeMarker.ftl")).andReturn(file.getAbsolutePath());
- file = new File(FreeMarkerResultTest.class.getResource("nested.ftl").toURI());
- EasyMock.expect(servletContext.getRealPath("/tutorial/org/apache/struts2/views/freemarker/nested.ftl")).andReturn(file.getAbsolutePath());
- EasyMock.expect(servletContext.getAttribute(FreemarkerManager.CONFIG_SERVLET_CONTEXT_KEY)).andReturn(freemarkerConfig).anyTimes();
- EasyMock.replay(servletContext);
-
- freemarkerConfig.setServletContextForTemplateLoading(servletContext, null);
- ServletActionContext.setServletContext(servletContext);
-
-
- request.setRequestURI("/tutorial/test2.action");
- ActionMapping mapping = container.getInstance(ActionMapper.class).getMapping(request, configurationManager);
- dispatcher.serviceAction(request, response, servletContext, mapping);
- assertEquals("beforenestedafter", stringWriter.toString());
- }
-
- public void testActionThatSucceedsTag() throws Exception {
- //get fm config to use it in mock servlet context
- FreemarkerManager freemarkerManager = container.getInstance(FreemarkerManager.class);
- Configuration freemarkerConfig = freemarkerManager.getConfiguration(ServletActionContext.getServletContext());
- freemarkerConfig.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
-
- ServletContext servletContext = EasyMock.createNiceMock(ServletContext.class);
- File file = new File(FreeMarkerResultTest.class.getResource("callActionFreeMarker2.ftl").toURI());
- EasyMock.expect(servletContext.getRealPath("/tutorial/org/apache/struts2/views/freemarker/callActionFreeMarker2.ftl")).andReturn(file.getAbsolutePath());
- file = new File(FreeMarkerResultTest.class.getResource("nested.ftl").toURI());
- EasyMock.expect(servletContext.getRealPath("/tutorial/org/apache/struts2/views/freemarker/nested.ftl")).andReturn(file.getAbsolutePath());
- EasyMock.expect(servletContext.getAttribute(FreemarkerManager.CONFIG_SERVLET_CONTEXT_KEY)).andReturn(freemarkerConfig).anyTimes();
- EasyMock.replay(servletContext);
-
- freemarkerConfig.setServletContextForTemplateLoading(servletContext, null);
- ServletActionContext.setServletContext(servletContext);
-
-
- request.setRequestURI("/tutorial/test5.action");
- ActionMapping mapping = container.getInstance(ActionMapper.class).getMapping(request, configurationManager);
- dispatcher.serviceAction(request, response, servletContext, mapping);
- assertEquals("beforenestedafter", stringWriter.toString());
- }
-
public void testWriteIfCompleted() throws Exception {
FreemarkerResult result = new FreemarkerResult();
result.setLocation("someFreeMarkerFile.ftl");
@@ -138,21 +92,21 @@ public class FreeMarkerResultTest extends StrutsInternalTestCase {
}
public void testContentTypeIsNotOverwritten() throws Exception {
- servletContext.setRealPath(new File(FreeMarkerResultTest.class.getResource(
- "nested.ftl").toURI()).toURL().getFile());
+ servletContext.setRealPath(new File(FreeMarkerResultTest.class.getResource(
+ "nested.ftl").toURI()).toURL().getFile());
FreemarkerResult result = new FreemarkerResult();
result.setLocation("nested.ftl");
result.setFreemarkerManager(mgr);
-
- response.setContentType("contenttype");
+
+ response.setContentType("contenttype");
result.execute(invocation);
assertEquals("contenttype", response.getContentType());
}
public void testDefaultContentType() throws Exception {
- servletContext.setRealPath(new File(FreeMarkerResultTest.class.getResource(
- "nested.ftl").toURI()).toURL().getFile());
+ servletContext.setRealPath(new File(FreeMarkerResultTest.class.getResource(
+ "nested.ftl").toURI()).toURL().getFile());
FreemarkerResult result = new FreemarkerResult();
result.setLocation("nested.ftl");
@@ -164,8 +118,8 @@ public class FreeMarkerResultTest extends StrutsInternalTestCase {
}
public void testContentTypeFromTemplate() throws Exception {
- servletContext.setRealPath(new File(FreeMarkerResultTest.class.getResource(
- "something.ftl").toURI()).toURL().getFile());
+ servletContext.setRealPath(new File(FreeMarkerResultTest.class.getResource(
+ "something.ftl").toURI()).toURL().getFile());
FreemarkerResult result = new FreemarkerResult();
result.setLocation("something.ftl");
@@ -176,140 +130,6 @@ public class FreeMarkerResultTest extends StrutsInternalTestCase {
assertEquals("text/xml", response.getContentType());
}
- public void testDynamicAttributesSupport() throws Exception {
- //get fm config to use it in mock servlet context
- FreemarkerManager freemarkerManager = container.getInstance(FreemarkerManager.class);
- Configuration freemarkerConfig = freemarkerManager.getConfiguration(ServletActionContext.getServletContext());
- freemarkerConfig.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
-
- ServletContext servletContext = EasyMock.createNiceMock(ServletContext.class);
-
- File file = new File(FreeMarkerResultTest.class.getResource("dynaAttributes.ftl").toURI());
- EasyMock.expect(servletContext.getRealPath("/tutorial/org/apache/struts2/views/freemarker/dynaAttributes.ftl")).andReturn(file.getAbsolutePath());
-
- file = new File(ClassLoaderUtil.getResource("template/simple/text.ftl", getClass()).toURI());
- EasyMock.expect(servletContext.getRealPath("/template/simple/text.ftl")).andReturn(file.getAbsolutePath());
-
- file = new File(ClassLoaderUtil.getResource("template/simple/css.ftl", getClass()).toURI());
- EasyMock.expect(servletContext.getRealPath("/template/simple/css.ftl")).andReturn(file.getAbsolutePath());
- EasyMock.expect(servletContext.getRealPath("/template/~~~simple/css.ftl")).andReturn(file.getAbsolutePath());
-
- file = new File(ClassLoaderUtil.getResource("template/simple/scripting-events.ftl", getClass()).toURI());
- EasyMock.expect(servletContext.getRealPath("/template/simple/scripting-events.ftl")).andReturn(file.getAbsolutePath());
- EasyMock.expect(servletContext.getRealPath("/template/~~~simple/scripting-events.ftl")).andReturn(file.getAbsolutePath());
-
- file = new File(ClassLoaderUtil.getResource("template/simple/common-attributes.ftl", getClass()).toURI());
- EasyMock.expect(servletContext.getRealPath("/template/simple/common-attributes.ftl")).andReturn(file.getAbsolutePath());
- EasyMock.expect(servletContext.getRealPath("/template/~~~simple/common-attributes.ftl")).andReturn(file.getAbsolutePath());
-
- file = new File(ClassLoaderUtil.getResource("template/simple/dynamic-attributes.ftl", getClass()).toURI());
- EasyMock.expect(servletContext.getRealPath("/template/simple/dynamic-attributes.ftl")).andReturn(file.getAbsolutePath());
- EasyMock.expect(servletContext.getRealPath("/template/~~~simple/dynamic-attributes.ftl")).andReturn(file.getAbsolutePath());
-
- EasyMock.expect(servletContext.getAttribute(FreemarkerManager.CONFIG_SERVLET_CONTEXT_KEY)).andReturn(freemarkerConfig).anyTimes();
- EasyMock.replay(servletContext);
-
- freemarkerConfig.setServletContextForTemplateLoading(servletContext, null);
- ServletActionContext.setServletContext(servletContext);
-
-
- request.setRequestURI("/tutorial/test6.action");
- ActionMapping mapping = container.getInstance(ActionMapper.class).getMapping(request, configurationManager);
- dispatcher.serviceAction(request, response, servletContext, mapping);
-
- // TODO lukaszlenart: remove expectedJDK15 and if() after switching to Java 1.6
- String expectedJDK15 =
- ""
- + ""
- + "";
- String expectedJDK16 =
- ""
- + ""
- + ""
- + "";
-
- String result = stringWriter.toString();
-
- if (result.contains("foo=\"bar\" placeholder=\"input\"")) {
- assertEquals(expectedJDK15, result);
- } else {
- assertEquals(expectedJDK16, result);
- }
- }
-
- public void testManualListInTemplate() throws Exception {
- FreemarkerManager freemarkerManager = container.getInstance(FreemarkerManager.class);
- Configuration freemarkerConfig = freemarkerManager.getConfiguration(ServletActionContext.getServletContext());
- freemarkerConfig.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
-
- ServletContext servletContext = EasyMock.createNiceMock(ServletContext.class);
-
- File file = new File(FreeMarkerResultTest.class.getResource("manual-list.ftl").toURI());
- EasyMock.expect(servletContext.getRealPath("/tutorial/org/apache/struts2/views/freemarker/manual-list.ftl")).andReturn(file.getAbsolutePath());
-
- file = new File(ClassLoaderUtil.getResource("template/simple/radiomap.ftl", getClass()).toURI());
- EasyMock.expect(servletContext.getRealPath("/template/simple/radiomap.ftl")).andReturn(file.getAbsolutePath());
-
- file = new File(ClassLoaderUtil.getResource("template/simple/css.ftl", getClass()).toURI());
- EasyMock.expect(servletContext.getRealPath("/template/simple/css.ftl")).andReturn(file.getAbsolutePath());
- EasyMock.expect(servletContext.getRealPath("/template/~~~simple/css.ftl")).andReturn(file.getAbsolutePath());
-
- file = new File(ClassLoaderUtil.getResource("template/simple/scripting-events.ftl", getClass()).toURI());
- EasyMock.expect(servletContext.getRealPath("/template/simple/scripting-events.ftl")).andReturn(file.getAbsolutePath());
- EasyMock.expect(servletContext.getRealPath("/template/~~~simple/scripting-events.ftl")).andReturn(file.getAbsolutePath());
-
- file = new File(ClassLoaderUtil.getResource("template/simple/common-attributes.ftl", getClass()).toURI());
- EasyMock.expect(servletContext.getRealPath("/template/simple/common-attributes.ftl")).andReturn(file.getAbsolutePath());
- EasyMock.expect(servletContext.getRealPath("/template/~~~simple/common-attributes.ftl")).andReturn(file.getAbsolutePath());
-
- file = new File(ClassLoaderUtil.getResource("template/simple/dynamic-attributes.ftl", getClass()).toURI());
- EasyMock.expect(servletContext.getRealPath("/template/simple/dynamic-attributes.ftl")).andReturn(file.getAbsolutePath());
- EasyMock.expect(servletContext.getRealPath("/template/~~~simple/dynamic-attributes.ftl")).andReturn(file.getAbsolutePath());
-
- EasyMock.expect(servletContext.getAttribute(FreemarkerManager.CONFIG_SERVLET_CONTEXT_KEY)).andReturn(freemarkerConfig).anyTimes();
- EasyMock.replay(servletContext);
-
- freemarkerConfig.setServletContextForTemplateLoading(servletContext, null);
- ServletActionContext.setServletContext(servletContext);
-
-
- request.setRequestURI("/tutorial/test7.action");
- ActionMapping mapping = container.getInstance(ActionMapper.class).getMapping(request, configurationManager);
- dispatcher.serviceAction(request, response, servletContext, mapping);
- String expected = "\n"
- + "\n"
- + "\n"
- + "\n"
- + "\n";
- assertEquals(normalize(expected), normalize(stringWriter.toString()));
- }
-
- public void testDynamicAttributesInTheme() throws Exception {
- FreemarkerManager freemarkerManager = container.getInstance(FreemarkerManager.class);
- Configuration freemarkerConfig = freemarkerManager.getConfiguration(ServletActionContext.getServletContext());
- freemarkerConfig.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
-
- ServletContext servletContext = EasyMock.createNiceMock(ServletContext.class);
-
- File file = new File(FreeMarkerResultTest.class.getResource("customTextField.ftl").toURI());
- EasyMock.expect(servletContext.getRealPath("/tutorial/org/apache/struts2/views/freemarker/customTextField.ftl")).andReturn(file.getAbsolutePath());
-
- file = new File(ClassLoaderUtil.getResource("template/test/text.ftl", getClass()).toURI());
- EasyMock.expect(servletContext.getRealPath("/template/test/text.ftl")).andReturn(file.getAbsolutePath());
-
- EasyMock.expect(servletContext.getAttribute(FreemarkerManager.CONFIG_SERVLET_CONTEXT_KEY)).andReturn(freemarkerConfig).anyTimes();
- EasyMock.replay(servletContext);
-
- freemarkerConfig.setServletContextForTemplateLoading(servletContext, null);
- ServletActionContext.setServletContext(servletContext);
-
- request.setRequestURI("/tutorial/test8.action");
- ActionMapping mapping = container.getInstance(ActionMapper.class).getMapping(request, configurationManager);
- dispatcher.serviceAction(request, response, servletContext, mapping);
- String expected = "";
- assertEquals(expected, stringWriter.toString());
- }
-
protected void setUp() throws Exception {
super.setUp();
mgr = new FreemarkerManager();
@@ -345,7 +165,7 @@ public class FreeMarkerResultTest extends StrutsInternalTestCase {
invocation.setStack(stack);
invocation.setInvocationContext(context);
servletContext.setRealPath(new File(FreeMarkerResultTest.class.getResource(
- "someFreeMarkerFile.ftl").toURI()).toURL().getFile());
+ "someFreeMarkerFile.ftl").toURI()).toURL().getFile());
}
protected void tearDown() throws Exception {
diff --git a/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerResultMockedTest.java b/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerResultMockedTest.java
new file mode 100644
index 000000000..9a9584a22
--- /dev/null
+++ b/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerResultMockedTest.java
@@ -0,0 +1,262 @@
+package org.apache.struts2.views.freemarker;
+
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.mock.MockActionInvocation;
+import com.opensymphony.xwork2.util.ClassLoaderUtil;
+import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory;
+import freemarker.template.Configuration;
+import freemarker.template.TemplateExceptionHandler;
+import org.apache.struts2.ServletActionContext;
+import org.apache.struts2.StrutsInternalTestCase;
+import org.apache.struts2.StrutsStatics;
+import org.apache.struts2.dispatcher.mapper.ActionMapper;
+import org.apache.struts2.dispatcher.mapper.ActionMapping;
+import org.apache.struts2.views.jsp.StrutsMockHttpServletResponse;
+import org.easymock.EasyMock;
+import org.springframework.mock.web.MockHttpServletRequest;
+
+import javax.servlet.ServletContext;
+import java.io.File;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+
+import static org.apache.struts2.views.jsp.AbstractUITagTest.normalize;
+
+public class FreemarkerResultMockedTest extends StrutsInternalTestCase {
+
+ ValueStack stack;
+ MockActionInvocation invocation;
+ ActionContext context;
+ StrutsMockHttpServletResponse response;
+ PrintWriter writer;
+ StringWriter stringWriter;
+ ServletContext servletContext;
+ FreemarkerManager mgr;
+ MockHttpServletRequest request;
+
+ public void testActionThatThrowsExceptionTag() throws Exception {
+ //get fm config to use it in mock servlet context
+ FreemarkerManager freemarkerManager = container.getInstance(FreemarkerManager.class);
+ Configuration freemarkerConfig = freemarkerManager.getConfiguration(ServletActionContext.getServletContext());
+ freemarkerConfig.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
+
+ servletContext = EasyMock.createNiceMock(ServletContext.class);
+ File file = new File(FreeMarkerResultTest.class.getResource("callActionFreeMarker2.ftl").toURI());
+ EasyMock.expect(servletContext.getRealPath("/tutorial/org/apache/struts2/views/freemarker/callActionFreeMarker.ftl")).andReturn(file.getAbsolutePath());
+ file = new File(FreeMarkerResultTest.class.getResource("nested.ftl").toURI());
+ EasyMock.expect(servletContext.getRealPath("/tutorial/org/apache/struts2/views/freemarker/nested.ftl")).andReturn(file.getAbsolutePath());
+ EasyMock.expect(servletContext.getAttribute(FreemarkerManager.CONFIG_SERVLET_CONTEXT_KEY)).andReturn(freemarkerConfig).anyTimes();
+ EasyMock.replay(servletContext);
+
+ freemarkerConfig.setServletContextForTemplateLoading(servletContext, null);
+ ServletActionContext.setServletContext(servletContext);
+
+ init();
+
+ request.setRequestURI("/tutorial/test2.action");
+ ActionMapping mapping = container.getInstance(ActionMapper.class).getMapping(request, configurationManager);
+ dispatcher.serviceAction(request, response, mapping);
+ assertEquals("beforenestedafter", stringWriter.toString());
+ }
+
+ public void testActionThatSucceedsTag() throws Exception {
+ //get fm config to use it in mock servlet context
+ FreemarkerManager freemarkerManager = container.getInstance(FreemarkerManager.class);
+ Configuration freemarkerConfig = freemarkerManager.getConfiguration(ServletActionContext.getServletContext());
+ freemarkerConfig.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
+
+ servletContext = EasyMock.createNiceMock(ServletContext.class);
+ File file = new File(FreeMarkerResultTest.class.getResource("callActionFreeMarker2.ftl").toURI());
+ EasyMock.expect(servletContext.getRealPath("/tutorial/org/apache/struts2/views/freemarker/callActionFreeMarker2.ftl")).andReturn(file.getAbsolutePath());
+ file = new File(FreeMarkerResultTest.class.getResource("nested.ftl").toURI());
+ EasyMock.expect(servletContext.getRealPath("/tutorial/org/apache/struts2/views/freemarker/nested.ftl")).andReturn(file.getAbsolutePath());
+ EasyMock.expect(servletContext.getAttribute(FreemarkerManager.CONFIG_SERVLET_CONTEXT_KEY)).andReturn(freemarkerConfig).anyTimes();
+ EasyMock.replay(servletContext);
+
+ freemarkerConfig.setServletContextForTemplateLoading(servletContext, null);
+ ServletActionContext.setServletContext(servletContext);
+
+ init();
+
+ request.setRequestURI("/tutorial/test5.action");
+ ActionMapping mapping = container.getInstance(ActionMapper.class).getMapping(request, configurationManager);
+ dispatcher.serviceAction(request, response, mapping);
+ assertEquals("beforenestedafter", stringWriter.toString());
+ }
+
+ public void testDynamicAttributesSupport() throws Exception {
+ //get fm config to use it in mock servlet context
+ FreemarkerManager freemarkerManager = container.getInstance(FreemarkerManager.class);
+ Configuration freemarkerConfig = freemarkerManager.getConfiguration(ServletActionContext.getServletContext());
+ freemarkerConfig.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
+
+ servletContext = EasyMock.createNiceMock(ServletContext.class);
+
+ File file = new File(FreeMarkerResultTest.class.getResource("dynaAttributes.ftl").toURI());
+ EasyMock.expect(servletContext.getRealPath("/tutorial/org/apache/struts2/views/freemarker/dynaAttributes.ftl")).andReturn(file.getAbsolutePath());
+
+ file = new File(ClassLoaderUtil.getResource("template/simple/text.ftl", getClass()).toURI());
+ EasyMock.expect(servletContext.getRealPath("/template/simple/text.ftl")).andReturn(file.getAbsolutePath());
+
+ file = new File(ClassLoaderUtil.getResource("template/simple/css.ftl", getClass()).toURI());
+ EasyMock.expect(servletContext.getRealPath("/template/simple/css.ftl")).andReturn(file.getAbsolutePath());
+ EasyMock.expect(servletContext.getRealPath("/template/~~~simple/css.ftl")).andReturn(file.getAbsolutePath());
+
+ file = new File(ClassLoaderUtil.getResource("template/simple/scripting-events.ftl", getClass()).toURI());
+ EasyMock.expect(servletContext.getRealPath("/template/simple/scripting-events.ftl")).andReturn(file.getAbsolutePath());
+ EasyMock.expect(servletContext.getRealPath("/template/~~~simple/scripting-events.ftl")).andReturn(file.getAbsolutePath());
+
+ file = new File(ClassLoaderUtil.getResource("template/simple/common-attributes.ftl", getClass()).toURI());
+ EasyMock.expect(servletContext.getRealPath("/template/simple/common-attributes.ftl")).andReturn(file.getAbsolutePath());
+ EasyMock.expect(servletContext.getRealPath("/template/~~~simple/common-attributes.ftl")).andReturn(file.getAbsolutePath());
+
+ file = new File(ClassLoaderUtil.getResource("template/simple/dynamic-attributes.ftl", getClass()).toURI());
+ EasyMock.expect(servletContext.getRealPath("/template/simple/dynamic-attributes.ftl")).andReturn(file.getAbsolutePath());
+ EasyMock.expect(servletContext.getRealPath("/template/~~~simple/dynamic-attributes.ftl")).andReturn(file.getAbsolutePath());
+
+ EasyMock.expect(servletContext.getAttribute(FreemarkerManager.CONFIG_SERVLET_CONTEXT_KEY)).andReturn(freemarkerConfig).anyTimes();
+ EasyMock.replay(servletContext);
+
+ freemarkerConfig.setServletContextForTemplateLoading(servletContext, null);
+ ServletActionContext.setServletContext(servletContext);
+
+ init();
+
+ request.setRequestURI("/tutorial/test6.action");
+ ActionMapping mapping = container.getInstance(ActionMapper.class).getMapping(request, configurationManager);
+ dispatcher.serviceAction(request, response, mapping);
+
+ // TODO lukaszlenart: remove expectedJDK15 and if() after switching to Java 1.6
+ String expectedJDK15 =
+ ""
+ + ""
+ + "";
+ String expectedJDK16 =
+ ""
+ + ""
+ + ""
+ + "";
+
+ String result = stringWriter.toString();
+
+ if (result.contains("foo=\"bar\" placeholder=\"input\"")) {
+ assertEquals(expectedJDK15, result);
+ } else {
+ assertEquals(expectedJDK16, result);
+ }
+ }
+
+ public void testManualListInTemplate() throws Exception {
+ FreemarkerManager freemarkerManager = container.getInstance(FreemarkerManager.class);
+ Configuration freemarkerConfig = freemarkerManager.getConfiguration(ServletActionContext.getServletContext());
+ freemarkerConfig.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
+
+ servletContext = EasyMock.createNiceMock(ServletContext.class);
+
+ File file = new File(FreeMarkerResultTest.class.getResource("manual-list.ftl").toURI());
+ EasyMock.expect(servletContext.getRealPath("/tutorial/org/apache/struts2/views/freemarker/manual-list.ftl")).andReturn(file.getAbsolutePath());
+
+ file = new File(ClassLoaderUtil.getResource("template/simple/radiomap.ftl", getClass()).toURI());
+ EasyMock.expect(servletContext.getRealPath("/template/simple/radiomap.ftl")).andReturn(file.getAbsolutePath());
+
+ file = new File(ClassLoaderUtil.getResource("template/simple/css.ftl", getClass()).toURI());
+ EasyMock.expect(servletContext.getRealPath("/template/simple/css.ftl")).andReturn(file.getAbsolutePath());
+ EasyMock.expect(servletContext.getRealPath("/template/~~~simple/css.ftl")).andReturn(file.getAbsolutePath());
+
+ file = new File(ClassLoaderUtil.getResource("template/simple/scripting-events.ftl", getClass()).toURI());
+ EasyMock.expect(servletContext.getRealPath("/template/simple/scripting-events.ftl")).andReturn(file.getAbsolutePath());
+ EasyMock.expect(servletContext.getRealPath("/template/~~~simple/scripting-events.ftl")).andReturn(file.getAbsolutePath());
+
+ file = new File(ClassLoaderUtil.getResource("template/simple/common-attributes.ftl", getClass()).toURI());
+ EasyMock.expect(servletContext.getRealPath("/template/simple/common-attributes.ftl")).andReturn(file.getAbsolutePath());
+ EasyMock.expect(servletContext.getRealPath("/template/~~~simple/common-attributes.ftl")).andReturn(file.getAbsolutePath());
+
+ file = new File(ClassLoaderUtil.getResource("template/simple/dynamic-attributes.ftl", getClass()).toURI());
+ EasyMock.expect(servletContext.getRealPath("/template/simple/dynamic-attributes.ftl")).andReturn(file.getAbsolutePath());
+ EasyMock.expect(servletContext.getRealPath("/template/~~~simple/dynamic-attributes.ftl")).andReturn(file.getAbsolutePath());
+
+ EasyMock.expect(servletContext.getAttribute(FreemarkerManager.CONFIG_SERVLET_CONTEXT_KEY)).andReturn(freemarkerConfig).anyTimes();
+ EasyMock.replay(servletContext);
+
+ freemarkerConfig.setServletContextForTemplateLoading(servletContext, null);
+ ServletActionContext.setServletContext(servletContext);
+
+ init();
+
+ request.setRequestURI("/tutorial/test7.action");
+ ActionMapping mapping = container.getInstance(ActionMapper.class).getMapping(request, configurationManager);
+ dispatcher.serviceAction(request, response, mapping);
+ String expected = "\n"
+ + "\n"
+ + "\n"
+ + "\n"
+ + "\n";
+ assertEquals(normalize(expected), normalize(stringWriter.toString()));
+ }
+
+ public void testDynamicAttributesInTheme() throws Exception {
+ FreemarkerManager freemarkerManager = container.getInstance(FreemarkerManager.class);
+ Configuration freemarkerConfig = freemarkerManager.getConfiguration(ServletActionContext.getServletContext());
+ freemarkerConfig.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
+
+ servletContext = EasyMock.createNiceMock(ServletContext.class);
+
+ File file = new File(FreeMarkerResultTest.class.getResource("customTextField.ftl").toURI());
+ EasyMock.expect(servletContext.getRealPath("/tutorial/org/apache/struts2/views/freemarker/customTextField.ftl")).andReturn(file.getAbsolutePath());
+
+ file = new File(ClassLoaderUtil.getResource("template/test/text.ftl", getClass()).toURI());
+ EasyMock.expect(servletContext.getRealPath("/template/test/text.ftl")).andReturn(file.getAbsolutePath());
+
+ EasyMock.expect(servletContext.getAttribute(FreemarkerManager.CONFIG_SERVLET_CONTEXT_KEY)).andReturn(freemarkerConfig).anyTimes();
+ EasyMock.replay(servletContext);
+
+ freemarkerConfig.setServletContextForTemplateLoading(servletContext, null);
+ ServletActionContext.setServletContext(servletContext);
+
+ init();
+
+ request.setRequestURI("/tutorial/test8.action");
+ ActionMapping mapping = container.getInstance(ActionMapper.class).getMapping(request, configurationManager);
+ dispatcher.serviceAction(request, response, mapping);
+ String expected = "";
+ assertEquals(expected, stringWriter.toString());
+ }
+
+ private void init() throws MalformedURLException, URISyntaxException {
+ mgr = new FreemarkerManager();
+ mgr.setEncoding("UTF-8");
+
+ DefaultFileManagerFactory factory = new DefaultFileManagerFactory();
+ container.inject(factory);
+ mgr.setFileManagerFactory(factory);
+
+ FreemarkerThemeTemplateLoader themeLoader = new FreemarkerThemeTemplateLoader();
+ container.inject(themeLoader);
+ mgr.setThemeTemplateLoader(themeLoader);
+
+ stringWriter = new StringWriter();
+ writer = new PrintWriter(stringWriter);
+ response = new StrutsMockHttpServletResponse();
+ response.setWriter(writer);
+ request = new MockHttpServletRequest();
+ stack = ActionContext.getContext().getValueStack();
+
+ context = new ActionContext(stack.getContext());
+ context.put(StrutsStatics.HTTP_RESPONSE, response);
+ context.put(StrutsStatics.HTTP_REQUEST, request);
+ context.put(StrutsStatics.SERVLET_CONTEXT, servletContext);
+
+ ServletActionContext.setServletContext(servletContext);
+ ServletActionContext.setRequest(request);
+ ServletActionContext.setResponse(response);
+ servletContext.setAttribute(FreemarkerManager.CONFIG_SERVLET_CONTEXT_KEY, null);
+
+ invocation = new MockActionInvocation();
+ invocation.setStack(stack);
+ invocation.setInvocationContext(context);
+ }
+
+}
diff --git a/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java
index 98eadb6f1..36b04fa28 100644
--- a/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java
+++ b/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java
@@ -120,8 +120,7 @@ public abstract class AbstractTagTest extends StrutsInternalTestCase {
session,
new ApplicationMap(pageContext.getServletContext()),
request,
- response,
- pageContext.getServletContext());
+ response);
// let's not set the locale -- there is a test that checks if Dispatcher actually picks this up...
// ... but generally we want to just use no locale (let it stay system default)
extraContext.remove(ActionContext.LOCALE);
diff --git a/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java
index 1a970ee1b..50bf5767f 100644
--- a/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java
+++ b/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java
@@ -555,8 +555,7 @@ public class URLTagTest extends AbstractUITagTest {
session,
new ApplicationMap(pageContext.getServletContext()),
request,
- response,
- pageContext.getServletContext());
+ response);
// let's not set the locale -- there is a test that checks if Dispatcher actually picks this up...
// ... but generally we want to just use no locale (let it stay system default)
extraContext.remove(ActionContext.LOCALE);
From ddd27197f5155f6089e2d5e3b82363f44752c57d Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Mon, 17 Feb 2014 09:34:10 +0100
Subject: [PATCH 13/80] Updates tests to new version of methods without
ServletContext
---
.../org/apache/struts2/dojo/views/jsp/ui/AbstractTagTest.java | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/AbstractTagTest.java b/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/AbstractTagTest.java
index e20722f60..a3bf45301 100644
--- a/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/AbstractTagTest.java
+++ b/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/AbstractTagTest.java
@@ -119,8 +119,7 @@ public abstract class AbstractTagTest extends StrutsTestCase {
session,
new ApplicationMap(pageContext.getServletContext()),
request,
- response,
- pageContext.getServletContext());
+ response);
// let's not set the locale -- there is a test that checks if Dispatcher actually picks this up...
// ... but generally we want to just use no locale (let it stay system default)
extraContext.remove(ActionContext.LOCALE);
From 9ff04d17a5edfeb9805d1485b29eda8d0dfa3ce8 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Mon, 17 Feb 2014 09:34:47 +0100
Subject: [PATCH 14/80] Updates tests to new version of methods without
ServletContext
---
.../src/main/java/org/apache/struts2/StrutsJUnit4TestCase.java | 2 +-
.../junit/src/main/java/org/apache/struts2/StrutsTestCase.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/junit/src/main/java/org/apache/struts2/StrutsJUnit4TestCase.java b/plugins/junit/src/main/java/org/apache/struts2/StrutsJUnit4TestCase.java
index 02fd69b81..7bf18b7a3 100644
--- a/plugins/junit/src/main/java/org/apache/struts2/StrutsJUnit4TestCase.java
+++ b/plugins/junit/src/main/java/org/apache/struts2/StrutsJUnit4TestCase.java
@@ -137,7 +137,7 @@ public abstract class StrutsJUnit4TestCase extends XWorkJUnit4TestCase {
ActionMapping mapping = getActionMapping(request);
assertNotNull(mapping);
- Dispatcher.getInstance().serviceAction(request, response, servletContext, mapping);
+ Dispatcher.getInstance().serviceAction(request, response, mapping);
if (response.getStatus() != HttpServletResponse.SC_OK)
throw new ServletException("Error code [" + response.getStatus() + "], Error: ["
diff --git a/plugins/junit/src/main/java/org/apache/struts2/StrutsTestCase.java b/plugins/junit/src/main/java/org/apache/struts2/StrutsTestCase.java
index 3a145459c..de6f477ff 100644
--- a/plugins/junit/src/main/java/org/apache/struts2/StrutsTestCase.java
+++ b/plugins/junit/src/main/java/org/apache/struts2/StrutsTestCase.java
@@ -115,7 +115,7 @@ public abstract class StrutsTestCase extends XWorkTestCase {
ActionMapping mapping = getActionMapping(request);
assertNotNull(mapping);
- Dispatcher.getInstance().serviceAction(request, response, servletContext, mapping);
+ Dispatcher.getInstance().serviceAction(request, response, mapping);
if (response.getStatus() != HttpServletResponse.SC_OK) {
throw new ServletException("Error code [" + response.getStatus() + "], Error: [" + response.getErrorMessage() + "]");
From 4da2ec65c706e1029b827f2ca36242e05d99fb63 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Mon, 17 Feb 2014 09:35:20 +0100
Subject: [PATCH 15/80] Updates classes to use the new version of Dispatcher's
methods without ServletContext
---
.../org/apache/struts2/validators/DWRValidator.java | 12 +++---------
.../struts2/portlet/dispatcher/Jsr168Dispatcher.java | 7 ++++---
.../sitemesh/OldDecorator2NewStrutsDecorator.java | 2 +-
3 files changed, 8 insertions(+), 13 deletions(-)
diff --git a/plugins/dwr/src/main/java/org/apache/struts2/validators/DWRValidator.java b/plugins/dwr/src/main/java/org/apache/struts2/validators/DWRValidator.java
index 8c9a2eb36..9d6f75055 100644
--- a/plugins/dwr/src/main/java/org/apache/struts2/validators/DWRValidator.java
+++ b/plugins/dwr/src/main/java/org/apache/struts2/validators/DWRValidator.java
@@ -32,22 +32,16 @@ import org.apache.struts2.dispatcher.ApplicationMap;
import org.apache.struts2.dispatcher.Dispatcher;
import org.apache.struts2.dispatcher.RequestMap;
import org.apache.struts2.dispatcher.SessionMap;
-import org.apache.struts2.dispatcher.mapper.ActionMapper;
-import org.apache.struts2.dispatcher.mapper.ActionMapping;
import uk.ltd.getahead.dwr.WebContextFactory;
import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.ActionProxyFactory;
import com.opensymphony.xwork2.DefaultActionInvocation;
import com.opensymphony.xwork2.ValidationAware;
import com.opensymphony.xwork2.ValidationAwareSupport;
-import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.PackageConfig;
-import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
@@ -69,8 +63,9 @@ import com.opensymphony.xwork2.util.logging.LoggerFactory;
*
*/
public class DWRValidator {
+
private static final Logger LOG = LoggerFactory.getLogger(DWRValidator.class);
-
+
public ValidationAwareSupport doPost(String namespace, String actionName, Map params) throws Exception {
HttpServletRequest req = WebContextFactory.get().getHttpServletRequest();
ServletContext servletContext = WebContextFactory.get().getServletContext();
@@ -91,8 +86,7 @@ public class DWRValidator {
session,
application,
req,
- res,
- servletContext);
+ res);
try {
ActionProxyFactory actionProxyFactory = du.getContainer().getInstance(ActionProxyFactory.class);
diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
index 349d81955..99da30165 100644
--- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
+++ b/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
@@ -184,6 +184,7 @@ public class Jsr168Dispatcher extends GenericPortlet implements StrutsStatics {
private Dispatcher dispatcherUtils;
private ActionMapper actionMapper;
private Container container;
+ private ServletContext servletContext;
/**
* Initialize the portlet with the init parameters from portlet.xml
@@ -201,7 +202,8 @@ public class Jsr168Dispatcher extends GenericPortlet implements StrutsStatics {
params.put(name, value);
}
- dispatcherUtils = new Dispatcher(new PortletServletContext(cfg.getPortletContext()), params);
+ servletContext = new PortletServletContext(cfg.getPortletContext());
+ dispatcherUtils = new Dispatcher(servletContext, params);
dispatcherUtils.init();
// For testability
@@ -428,11 +430,10 @@ public class Jsr168Dispatcher extends GenericPortlet implements StrutsStatics {
String actionName = null;
String namespace;
try {
- ServletContext servletContext = new PortletServletContext(getPortletContext());
HttpServletRequest servletRequest = new PortletServletRequest(request, getPortletContext());
HttpServletResponse servletResponse = createPortletServletResponse(response);
if (phase.isAction()) {
- servletRequest = dispatcherUtils.wrapRequest(servletRequest, servletContext);
+ servletRequest = dispatcherUtils.wrapRequest(servletRequest);
if (servletRequest instanceof MultiPartRequestWrapper) {
// Multipart request. Request parameters are encoded in the multipart data,
// so we need to manually add them to the parameter map.
diff --git a/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/OldDecorator2NewStrutsDecorator.java b/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/OldDecorator2NewStrutsDecorator.java
index 740095e20..9b86adb39 100644
--- a/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/OldDecorator2NewStrutsDecorator.java
+++ b/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/OldDecorator2NewStrutsDecorator.java
@@ -97,7 +97,7 @@ public abstract class OldDecorator2NewStrutsDecorator extends BaseWebAppDecorato
if (ctx == null) {
// ok, one isn't associated with the request, so let's create one using the current Dispatcher
ValueStack vs = Dispatcher.getInstance().getContainer().getInstance(ValueStackFactory.class).createValueStack();
- vs.getContext().putAll(Dispatcher.getInstance().createContextMap(request, response, null, servletContext));
+ vs.getContext().putAll(Dispatcher.getInstance().createContextMap(request, response, null));
ctx = new ActionContext(vs.getContext());
if (ctx.getActionInvocation() == null) {
// put in a dummy ActionSupport so basic functionality still works
From 8be797fccdd97cb53206892fe34862f3e7cf77d6 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Tue, 18 Feb 2014 07:58:26 +0100
Subject: [PATCH 16/80] Removes commented out if statment
---
.../main/java/org/apache/struts2/dispatcher/Dispatcher.java | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
index 863c94b1f..d45f706f2 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
@@ -479,9 +479,7 @@ public class Dispatcher {
l.dispatcherInitialized(this);
}
}
- //if (servletContext != null) {
- errorHandler.init(servletContext);
- //}
+ errorHandler.init(servletContext);
} catch (Exception ex) {
if (LOG.isErrorEnabled())
From c7ca91446b33689913aaab7243f1d6fc2c520220 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Tue, 18 Feb 2014 08:52:39 +0100
Subject: [PATCH 17/80] Increases ServletContext visibility
---
.../java/org/apache/struts2/dispatcher/Dispatcher.java | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
index d45f706f2..2cdf260eb 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
@@ -186,11 +186,14 @@ public class Dispatcher {
dispatcherListeners.remove(listener);
}
- private ServletContext servletContext;
- private Map initParams;
-
private ValueStackFactory valueStackFactory;
+ /**
+ * Keeps current reference to external world and must be protected to support class inheritance
+ */
+ protected ServletContext servletContext;
+ protected Map initParams;
+
/**
* Create the Dispatcher instance for a given ServletContext and set of initialization parameters.
*
From ff2a4063c2cae132f0a1432d6b9f11d4e9ea6efd Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Wed, 19 Feb 2014 10:22:36 +0100
Subject: [PATCH 18/80] WW-4292 Solves problem with failing tests
---
.../org/apache/struts2/dispatcher/FilterDispatcherTest.java | 4 ++--
.../test/java/org/apache/struts2/dispatcher/FilterTest.java | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java b/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
index 4449e40d4..136c5c3df 100644
--- a/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
+++ b/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
@@ -117,7 +117,7 @@ public class FilterDispatcherTest extends StrutsInternalTestCase {
}
@Override
- public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException {
+ public HttpServletRequest wrapRequest(HttpServletRequest request) throws IOException {
wrappedRequest = true;
return request;
}
@@ -142,7 +142,7 @@ public class FilterDispatcherTest extends StrutsInternalTestCase {
}
@Override
- public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException {
+ public HttpServletRequest wrapRequest(HttpServletRequest request) throws IOException {
wrappedRequest = true;
// if we set the chracter encoding AFTER we do wrap request, we will get
// a failing test
diff --git a/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java b/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java
index 12f9a64ab..5d1647d37 100644
--- a/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java
+++ b/core/src/test/java/org/apache/struts2/dispatcher/FilterTest.java
@@ -307,7 +307,7 @@ public class FilterTest extends StrutsInternalTestCase {
}
@Override
- public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException {
+ public HttpServletRequest wrapRequest(HttpServletRequest request) throws IOException {
wrapRequest = true;
return request;
}
From 7d383d6d395cae318b505065df7dab9ce8c13fae Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Wed, 19 Feb 2014 16:28:54 +0100
Subject: [PATCH 19/80] WW-4286 Upgrades commons-fileupload to version 1.3.1
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 4444e90b7..d1177998a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -669,7 +669,7 @@
commons-fileupload
commons-fileupload
- 1.3
+ 1.3.1
commons-io
From 6b00db2d23acf93f83563715aa0deaeb0a245785 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Tue, 25 Feb 2014 10:56:53 +0100
Subject: [PATCH 20/80] Moves jsps under WEB-INF
---
.../src/main/resources/example.xml | 6 +-
.../{ => WEB-INF/jsp}/example/HelloWorld.jsp | 56 +++++++++----------
.../{ => WEB-INF/jsp}/example/Login.jsp | 30 +++++-----
.../webapp/{ => WEB-INF/jsp}/example/Menu.jsp | 4 +-
.../{ => WEB-INF/jsp}/example/Missing.jsp | 22 ++++----
.../{ => WEB-INF/jsp}/example/Register.jsp | 4 +-
.../{ => WEB-INF/jsp}/example/Welcome.jsp | 36 ++++++------
7 files changed, 79 insertions(+), 79 deletions(-)
rename apps/jboss-blank/src/main/webapp/{ => WEB-INF/jsp}/example/HelloWorld.jsp (95%)
rename apps/jboss-blank/src/main/webapp/{ => WEB-INF/jsp}/example/Login.jsp (95%)
rename apps/jboss-blank/src/main/webapp/{ => WEB-INF/jsp}/example/Menu.jsp (73%)
rename apps/jboss-blank/src/main/webapp/{ => WEB-INF/jsp}/example/Missing.jsp (95%)
rename apps/jboss-blank/src/main/webapp/{ => WEB-INF/jsp}/example/Register.jsp (73%)
rename apps/jboss-blank/src/main/webapp/{ => WEB-INF/jsp}/example/Welcome.jsp (95%)
diff --git a/apps/jboss-blank/src/main/resources/example.xml b/apps/jboss-blank/src/main/resources/example.xml
index e93d84e7b..d929de1c8 100644
--- a/apps/jboss-blank/src/main/resources/example.xml
+++ b/apps/jboss-blank/src/main/resources/example.xml
@@ -8,16 +8,16 @@
- /example/HelloWorld.jsp
+ /WEB-INF/jsp/example/HelloWorld.jsp
- /example/Login.jsp
+ /WEB-INF/jsp/example/Login.jsp
Menu
- /example/{1}.jsp
+ /WEB-INF/jsp/example/{1}.jsp
diff --git a/apps/jboss-blank/src/main/webapp/example/HelloWorld.jsp b/apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/HelloWorld.jsp
similarity index 95%
rename from apps/jboss-blank/src/main/webapp/example/HelloWorld.jsp
rename to apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/HelloWorld.jsp
index 5ca640283..938c76132 100644
--- a/apps/jboss-blank/src/main/webapp/example/HelloWorld.jsp
+++ b/apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/HelloWorld.jsp
@@ -1,28 +1,28 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-
-
-
-
-
-
-
-Languages
-
- -
-
- en
-
- English
-
- -
-
- es
-
- Espanol
-
-
-
-
-
+<%@ page contentType="text/html; charset=UTF-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+
+
+
+
+
+
+
+Languages
+
+ -
+
+ en
+
+ English
+
+ -
+
+ es
+
+ Espanol
+
+
+
+
+
diff --git a/apps/jboss-blank/src/main/webapp/example/Login.jsp b/apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Login.jsp
similarity index 95%
rename from apps/jboss-blank/src/main/webapp/example/Login.jsp
rename to apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Login.jsp
index 2b77ac2bf..6438080a3 100644
--- a/apps/jboss-blank/src/main/webapp/example/Login.jsp
+++ b/apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Login.jsp
@@ -1,15 +1,15 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-
- Sign On
-
-
-
-
-
-
-
-
-
-
+<%@ page contentType="text/html; charset=UTF-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+
+ Sign On
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/jboss-blank/src/main/webapp/example/Menu.jsp b/apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Menu.jsp
similarity index 73%
rename from apps/jboss-blank/src/main/webapp/example/Menu.jsp
rename to apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Menu.jsp
index 3fbc54be9..a74bd2c76 100644
--- a/apps/jboss-blank/src/main/webapp/example/Menu.jsp
+++ b/apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Menu.jsp
@@ -1,3 +1,3 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page contentType="text/html; charset=UTF-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
\ No newline at end of file
diff --git a/apps/jboss-blank/src/main/webapp/example/Missing.jsp b/apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Missing.jsp
similarity index 95%
rename from apps/jboss-blank/src/main/webapp/example/Missing.jsp
rename to apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Missing.jsp
index d2f002301..7c01ac9be 100644
--- a/apps/jboss-blank/src/main/webapp/example/Missing.jsp
+++ b/apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Missing.jsp
@@ -1,11 +1,11 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-Missing Feature
-
-
-
-
-
-
-
+<%@ page contentType="text/html; charset=UTF-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+Missing Feature
+
+
+
+
+
+
+
diff --git a/apps/jboss-blank/src/main/webapp/example/Register.jsp b/apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Register.jsp
similarity index 73%
rename from apps/jboss-blank/src/main/webapp/example/Register.jsp
rename to apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Register.jsp
index 3fbc54be9..a74bd2c76 100644
--- a/apps/jboss-blank/src/main/webapp/example/Register.jsp
+++ b/apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Register.jsp
@@ -1,3 +1,3 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
+<%@ page contentType="text/html; charset=UTF-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
\ No newline at end of file
diff --git a/apps/jboss-blank/src/main/webapp/example/Welcome.jsp b/apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Welcome.jsp
similarity index 95%
rename from apps/jboss-blank/src/main/webapp/example/Welcome.jsp
rename to apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Welcome.jsp
index 23ae4b862..64ffe9b10 100644
--- a/apps/jboss-blank/src/main/webapp/example/Welcome.jsp
+++ b/apps/jboss-blank/src/main/webapp/WEB-INF/jsp/example/Welcome.jsp
@@ -1,18 +1,18 @@
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-
- Welcome
- " rel="stylesheet"
- type="text/css"/>
-
-
-
-Commands
-
- - ">Sign On
- - ">Register
-
-
-
-
+<%@ page contentType="text/html; charset=UTF-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+
+ Welcome
+ " rel="stylesheet"
+ type="text/css"/>
+
+
+
+Commands
+
+ - ">Sign On
+ - ">Register
+
+
+
+
From 6f43464fcaab59e7345a3e394db4a969cf410d15 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Tue, 25 Feb 2014 10:57:21 +0100
Subject: [PATCH 21/80] Adds security constraints to block access to jsp files
---
.../src/main/webapp/WEB-INF/web.xml | 20 +++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/apps/jboss-blank/src/main/webapp/WEB-INF/web.xml b/apps/jboss-blank/src/main/webapp/WEB-INF/web.xml
index 490247991..88c6fc8e5 100644
--- a/apps/jboss-blank/src/main/webapp/WEB-INF/web.xml
+++ b/apps/jboss-blank/src/main/webapp/WEB-INF/web.xml
@@ -17,4 +17,24 @@
index.html
+
+
+ No direct JSP access
+
+ No-JSP
+ *.jsp
+
+
+ no-users
+
+
+ NONE
+
+
+
+
+ Don't assign users to this role
+ no-users
+
+
From 5d0cf8baca45594ca7b6b4e7160e03f59cb258de Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Tue, 25 Feb 2014 11:08:29 +0100
Subject: [PATCH 22/80] Reverts validation of properties via dedicated
SecurityJudge interface
---
.../xwork2/interceptor/ParametersInterceptor.java | 8 --------
.../opensymphony/xwork2/ognl/OgnlValueStack.java | 4 ----
.../opensymphony/xwork2/ognl/PropertiesJudge.java | 7 -------
.../xwork2/ognl/SecurityMemberAccess.java | 13 +------------
.../xwork2/util/MemberAccessValueStack.java | 4 ----
5 files changed, 1 insertion(+), 35 deletions(-)
delete mode 100644 xwork-core/src/main/java/com/opensymphony/xwork2/ognl/PropertiesJudge.java
diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java b/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java
index 9dfae951a..75911a8b8 100644
--- a/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java
+++ b/xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java
@@ -22,7 +22,6 @@ import com.opensymphony.xwork2.XWorkConstants;
import com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler;
import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
import com.opensymphony.xwork2.inject.Inject;
-import com.opensymphony.xwork2.ognl.PropertiesJudge;
import com.opensymphony.xwork2.util.ArrayUtils;
import com.opensymphony.xwork2.util.ClearableValueStack;
import com.opensymphony.xwork2.util.LocalizedTextUtil;
@@ -313,13 +312,6 @@ public class ParametersInterceptor extends MethodFilterInterceptor {
MemberAccessValueStack accessValueStack = (MemberAccessValueStack) newStack;
accessValueStack.setAcceptProperties(acceptParams);
accessValueStack.setExcludeProperties(excludeParams);
- if (action instanceof ParameterNameAware) {
- accessValueStack.setPropertiesJudge(new PropertiesJudge() {
- public boolean acceptProperty(String propertyName) {
- return ((ParameterNameAware) action).acceptableParameterName(propertyName);
- }
- });
- }
}
for (Map.Entry entry : acceptableParameters.entrySet()) {
diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStack.java b/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStack.java
index 138db581a..76f0d3fb9 100644
--- a/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStack.java
+++ b/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStack.java
@@ -465,10 +465,6 @@ public class OgnlValueStack implements Serializable, ValueStack, ClearableValueS
securityMemberAccess.setAcceptProperties(acceptedProperties);
}
- public void setPropertiesJudge(PropertiesJudge judge) {
- securityMemberAccess.setPropertiesJudge(judge);
- }
-
public void setExcludeProperties(Set excludeProperties) {
securityMemberAccess.setExcludeProperties(excludeProperties);
}
diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/PropertiesJudge.java b/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/PropertiesJudge.java
deleted file mode 100644
index ed27c0f42..000000000
--- a/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/PropertiesJudge.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.opensymphony.xwork2.ognl;
-
-public interface PropertiesJudge {
-
- boolean acceptProperty(String propertyName);
-
-}
diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java b/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java
index b6d3d3fbf..7bbcbda10 100644
--- a/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java
+++ b/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java
@@ -35,7 +35,6 @@ public class SecurityMemberAccess extends DefaultMemberAccess {
private final boolean allowStaticMethodAccess;
private Set excludeProperties = Collections.emptySet();
private Set acceptProperties = Collections.emptySet();
- private PropertiesJudge propertiesJudge;
public SecurityMemberAccess(boolean method) {
super(false);
@@ -76,14 +75,7 @@ public class SecurityMemberAccess extends DefaultMemberAccess {
}
protected boolean isAcceptableProperty(String name) {
- if ( name == null) {
- return true;
- }
-
- if ((!isExcluded(name)) && isAccepted(name) && (propertiesJudge == null || propertiesJudge.acceptProperty(name))) {
- return true;
- }
- return false;
+ return name == null || ((!isExcluded(name)) && isAccepted(name));
}
protected boolean isAccepted(String paramName) {
@@ -123,7 +115,4 @@ public class SecurityMemberAccess extends DefaultMemberAccess {
this.acceptProperties = acceptedProperties;
}
- public void setPropertiesJudge(PropertiesJudge judge) {
- this.propertiesJudge = judge;
- }
}
diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/util/MemberAccessValueStack.java b/xwork-core/src/main/java/com/opensymphony/xwork2/util/MemberAccessValueStack.java
index 210d67ff9..51f4e489c 100644
--- a/xwork-core/src/main/java/com/opensymphony/xwork2/util/MemberAccessValueStack.java
+++ b/xwork-core/src/main/java/com/opensymphony/xwork2/util/MemberAccessValueStack.java
@@ -1,7 +1,5 @@
package com.opensymphony.xwork2.util;
-import com.opensymphony.xwork2.ognl.PropertiesJudge;
-
import java.util.Set;
import java.util.regex.Pattern;
@@ -15,6 +13,4 @@ public interface MemberAccessValueStack {
void setAcceptProperties(Set acceptedProperties);
- void setPropertiesJudge(PropertiesJudge judge);
-
}
From 9c5177c961fb850b80089ef4113a17d361c23fa6 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Fri, 28 Feb 2014 10:11:46 +0100
Subject: [PATCH 23/80] WW-4266 Adds support for IBM JVM to reload resources
---
.../com/opensymphony/xwork2/util/LocalizedTextUtil.java | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java b/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
index 1f7742830..8256cfb0d 100644
--- a/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
+++ b/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
@@ -791,7 +791,14 @@ public class LocalizedTextUtil {
}
if (!reloaded) {
bundlesMap.clear();
- clearMap(ResourceBundle.class, null, "cacheList");
+ try {
+ clearMap(ResourceBundle.class, null, "cacheList");
+ } catch (NoSuchFieldException e) {
+ // happens in IBM JVM, that has a different ResourceBundle impl
+ // it has a 'cache' member
+ clearMap(ResourceBundle.class, null, "cache");
+ }
+
// now, for the true and utter hack, if we're running in tomcat, clear
// it's class loader resource cache as well.
clearTomcatCache();
From 95b309a9b93eebadb589a335947598d815add80b Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Sun, 2 Mar 2014 21:13:38 +0100
Subject: [PATCH 24/80] Adds security constraints to web.xml to block access to
pure JSP files
---
apps/blank/src/main/webapp/WEB-INF/web.xml | 5 +++++
.../jboss-blank/src/main/webapp/WEB-INF/web.xml | 3 ---
apps/mailreader/src/main/webapp/WEB-INF/web.xml | 17 +++++++++++++++++
apps/portlet/src/main/webapp/WEB-INF/web.xml | 17 +++++++++++++++++
.../src/main/webapp/WEB-INF/web.xml | 17 +++++++++++++++++
apps/showcase/src/main/webapp/WEB-INF/web.xml | 17 +++++++++++++++++
6 files changed, 73 insertions(+), 3 deletions(-)
diff --git a/apps/blank/src/main/webapp/WEB-INF/web.xml b/apps/blank/src/main/webapp/WEB-INF/web.xml
index e8c0f4654..f15252bb9 100644
--- a/apps/blank/src/main/webapp/WEB-INF/web.xml
+++ b/apps/blank/src/main/webapp/WEB-INF/web.xml
@@ -31,4 +31,9 @@
+
+ Don't assign users to this role
+ no-users
+
+
diff --git a/apps/jboss-blank/src/main/webapp/WEB-INF/web.xml b/apps/jboss-blank/src/main/webapp/WEB-INF/web.xml
index 88c6fc8e5..d1cf0209c 100644
--- a/apps/jboss-blank/src/main/webapp/WEB-INF/web.xml
+++ b/apps/jboss-blank/src/main/webapp/WEB-INF/web.xml
@@ -27,9 +27,6 @@
no-users
-
- NONE
-
diff --git a/apps/mailreader/src/main/webapp/WEB-INF/web.xml b/apps/mailreader/src/main/webapp/WEB-INF/web.xml
index 9b35ec3ef..b01d86447 100644
--- a/apps/mailreader/src/main/webapp/WEB-INF/web.xml
+++ b/apps/mailreader/src/main/webapp/WEB-INF/web.xml
@@ -27,4 +27,21 @@
index.html
+
+
+ No direct JSP access
+
+ No-JSP
+ *.jsp
+
+
+ no-users
+
+
+
+
+ Don't assign users to this role
+ no-users
+
+
diff --git a/apps/portlet/src/main/webapp/WEB-INF/web.xml b/apps/portlet/src/main/webapp/WEB-INF/web.xml
index f42441989..d4a3c79ff 100644
--- a/apps/portlet/src/main/webapp/WEB-INF/web.xml
+++ b/apps/portlet/src/main/webapp/WEB-INF/web.xml
@@ -28,4 +28,21 @@
+
+
+ No direct JSP access
+
+ No-JSP
+ *.jsp
+
+
+ no-users
+
+
+
+
+ Don't assign users to this role
+ no-users
+
+
diff --git a/apps/rest-showcase/src/main/webapp/WEB-INF/web.xml b/apps/rest-showcase/src/main/webapp/WEB-INF/web.xml
index d10c214cc..694c349c2 100644
--- a/apps/rest-showcase/src/main/webapp/WEB-INF/web.xml
+++ b/apps/rest-showcase/src/main/webapp/WEB-INF/web.xml
@@ -26,4 +26,21 @@
index.jsp
+
+
+ No direct JSP access
+
+ No-JSP
+ *.jsp
+
+
+ no-users
+
+
+
+
+ Don't assign users to this role
+ no-users
+
+
diff --git a/apps/showcase/src/main/webapp/WEB-INF/web.xml b/apps/showcase/src/main/webapp/WEB-INF/web.xml
index 62335a4af..f3b88e916 100644
--- a/apps/showcase/src/main/webapp/WEB-INF/web.xml
+++ b/apps/showcase/src/main/webapp/WEB-INF/web.xml
@@ -194,4 +194,21 @@
index.html
+
+
+ No direct JSP access
+
+ No-JSP
+ *.jsp
+
+
+ no-users
+
+
+
+
+ Don't assign users to this role
+ no-users
+
+
From d07e8044beef98222f0140adb0b4e2892b6bf166 Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Sun, 2 Mar 2014 21:17:30 +0100
Subject: [PATCH 25/80] Moves mailreader related JSPs under WEB-INF
---
apps/mailreader/src/main/java/mailreader-support.xml | 10 +++++-----
.../main/webapp/{ => WEB-INF/jsp}/ChangePassword.jsp | 0
.../src/main/webapp/{ => WEB-INF/jsp}/Error.jsp | 0
.../src/main/webapp/{ => WEB-INF/jsp}/Footer.jsp | 0
.../src/main/webapp/{ => WEB-INF/jsp}/Login.jsp | 0
.../src/main/webapp/{ => WEB-INF/jsp}/MainMenu.jsp | 0
.../src/main/webapp/{ => WEB-INF/jsp}/Registration.jsp | 0
.../src/main/webapp/{ => WEB-INF/jsp}/Subscription.jsp | 0
.../src/main/webapp/{ => WEB-INF/jsp}/Welcome.jsp | 0
9 files changed, 5 insertions(+), 5 deletions(-)
rename apps/mailreader/src/main/webapp/{ => WEB-INF/jsp}/ChangePassword.jsp (100%)
rename apps/mailreader/src/main/webapp/{ => WEB-INF/jsp}/Error.jsp (100%)
rename apps/mailreader/src/main/webapp/{ => WEB-INF/jsp}/Footer.jsp (100%)
rename apps/mailreader/src/main/webapp/{ => WEB-INF/jsp}/Login.jsp (100%)
rename apps/mailreader/src/main/webapp/{ => WEB-INF/jsp}/MainMenu.jsp (100%)
rename apps/mailreader/src/main/webapp/{ => WEB-INF/jsp}/Registration.jsp (100%)
rename apps/mailreader/src/main/webapp/{ => WEB-INF/jsp}/Subscription.jsp (100%)
rename apps/mailreader/src/main/webapp/{ => WEB-INF/jsp}/Welcome.jsp (100%)
diff --git a/apps/mailreader/src/main/java/mailreader-support.xml b/apps/mailreader/src/main/java/mailreader-support.xml
index a6995431e..2438cb4a7 100644
--- a/apps/mailreader/src/main/java/mailreader-support.xml
+++ b/apps/mailreader/src/main/java/mailreader-support.xml
@@ -12,7 +12,7 @@
- /Welcome.jsp
+ /WEB-INF/jsp/Welcome.jsp
@@ -21,7 +21,7 @@
- /Login.jsp
+ /WEB-INF/jsp/Login.jsp
Welcome
MainMenu
ChangePassword
@@ -32,7 +32,7 @@
- /Registration.jsp
+ /WEB-INF/jsp/Registration.jsp
MainMenu
@@ -41,7 +41,7 @@
- /Subscription.jsp
+ /WEB-INF/jsp/Subscription.jsp
Registration_input
@@ -56,7 +56,7 @@
- /{1}.jsp
+ /WEB-INF/jsp/{1}.jsp
diff --git a/apps/mailreader/src/main/webapp/ChangePassword.jsp b/apps/mailreader/src/main/webapp/WEB-INF/jsp/ChangePassword.jsp
similarity index 100%
rename from apps/mailreader/src/main/webapp/ChangePassword.jsp
rename to apps/mailreader/src/main/webapp/WEB-INF/jsp/ChangePassword.jsp
diff --git a/apps/mailreader/src/main/webapp/Error.jsp b/apps/mailreader/src/main/webapp/WEB-INF/jsp/Error.jsp
similarity index 100%
rename from apps/mailreader/src/main/webapp/Error.jsp
rename to apps/mailreader/src/main/webapp/WEB-INF/jsp/Error.jsp
diff --git a/apps/mailreader/src/main/webapp/Footer.jsp b/apps/mailreader/src/main/webapp/WEB-INF/jsp/Footer.jsp
similarity index 100%
rename from apps/mailreader/src/main/webapp/Footer.jsp
rename to apps/mailreader/src/main/webapp/WEB-INF/jsp/Footer.jsp
diff --git a/apps/mailreader/src/main/webapp/Login.jsp b/apps/mailreader/src/main/webapp/WEB-INF/jsp/Login.jsp
similarity index 100%
rename from apps/mailreader/src/main/webapp/Login.jsp
rename to apps/mailreader/src/main/webapp/WEB-INF/jsp/Login.jsp
diff --git a/apps/mailreader/src/main/webapp/MainMenu.jsp b/apps/mailreader/src/main/webapp/WEB-INF/jsp/MainMenu.jsp
similarity index 100%
rename from apps/mailreader/src/main/webapp/MainMenu.jsp
rename to apps/mailreader/src/main/webapp/WEB-INF/jsp/MainMenu.jsp
diff --git a/apps/mailreader/src/main/webapp/Registration.jsp b/apps/mailreader/src/main/webapp/WEB-INF/jsp/Registration.jsp
similarity index 100%
rename from apps/mailreader/src/main/webapp/Registration.jsp
rename to apps/mailreader/src/main/webapp/WEB-INF/jsp/Registration.jsp
diff --git a/apps/mailreader/src/main/webapp/Subscription.jsp b/apps/mailreader/src/main/webapp/WEB-INF/jsp/Subscription.jsp
similarity index 100%
rename from apps/mailreader/src/main/webapp/Subscription.jsp
rename to apps/mailreader/src/main/webapp/WEB-INF/jsp/Subscription.jsp
diff --git a/apps/mailreader/src/main/webapp/Welcome.jsp b/apps/mailreader/src/main/webapp/WEB-INF/jsp/Welcome.jsp
similarity index 100%
rename from apps/mailreader/src/main/webapp/Welcome.jsp
rename to apps/mailreader/src/main/webapp/WEB-INF/jsp/Welcome.jsp
From 65eb97514c635da87c60f2a7b0d6bbbdd79358ee Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Sun, 2 Mar 2014 22:02:49 +0100
Subject: [PATCH 26/80] Moves showcase related JSPs under WEB-INF
---
.../main/resources/struts-actionchaining.xml | 2 +-
.../src/main/resources/struts-ajax.xml | 42 +++++++-------
.../src/main/resources/struts-chat.xml | 28 ++++-----
.../src/main/resources/struts-conversion.xml | 40 ++++++-------
.../src/main/resources/struts-fileupload.xml | 14 ++---
.../src/main/resources/struts-freemarker.xml | 4 +-
.../src/main/resources/struts-hangman.xml | 18 +++---
.../src/main/resources/struts-integration.xml | 4 +-
.../src/main/resources/struts-interactive.xml | 2 +-
.../main/resources/struts-model-driven.xml | 4 +-
.../src/main/resources/struts-tags-non-ui.xml | 54 +++++++++---------
.../src/main/resources/struts-tags-ui.xml | 42 +++++++-------
.../src/main/resources/struts-tiles.xml | 2 +-
.../src/main/resources/struts-token.xml | 24 ++++----
.../src/main/resources/struts-validation.xml | 30 +++++-----
.../src/main/resources/struts-wait.xml | 12 ++--
apps/showcase/src/main/resources/struts.xml | 6 +-
.../actionchaining/actionChainingResult.jsp | 0
.../webapp/{ => WEB-INF}/ajax/AjaxResult.jsp | 0
.../webapp/{ => WEB-INF}/ajax/AjaxResult2.js | 0
.../webapp/{ => WEB-INF}/ajax/AjaxResult3.jsp | 0
.../ajax/autocompleter/index.jsp | 2 +-
.../webapp/{ => WEB-INF}/ajax/bind/index.jsp | 2 +-
.../{ => WEB-INF}/ajax/commonInclude.jsp | 0
.../main/webapp/{ => WEB-INF}/ajax/footer.jsp | 2 +-
.../main/webapp/{ => WEB-INF}/ajax/index.jsp | 0
.../webapp/{ => WEB-INF}/ajax/options.ftl | 0
.../{ => WEB-INF}/ajax/remotebutton/index.jsp | 2 +-
.../{ => WEB-INF}/ajax/remotediv/example1.jsp | 2 +-
.../ajax/remotediv/example10.jsp | 2 +-
.../{ => WEB-INF}/ajax/remotediv/example2.jsp | 2 +-
.../{ => WEB-INF}/ajax/remotediv/example3.jsp | 2 +-
.../{ => WEB-INF}/ajax/remotediv/example4.jsp | 2 +-
.../{ => WEB-INF}/ajax/remotediv/example5.jsp | 2 +-
.../{ => WEB-INF}/ajax/remotediv/example6.jsp | 2 +-
.../{ => WEB-INF}/ajax/remotediv/example7.jsp | 2 +-
.../{ => WEB-INF}/ajax/remotediv/example8.jsp | 2 +-
.../{ => WEB-INF}/ajax/remotediv/example9.jsp | 2 +-
.../{ => WEB-INF}/ajax/remotediv/index.jsp | 2 +-
.../{ => WEB-INF}/ajax/remoteforms/index.jsp | 0
.../{ => WEB-INF}/ajax/remotelink/index.jsp | 2 +-
.../ajax/tabbedpanel/example1.jsp | 2 +-
.../ajax/tabbedpanel/example2.jsp | 2 +-
.../ajax/tabbedpanel/example3.jsp | 2 +-
.../ajax/tabbedpanel/example4.jsp | 2 +-
.../ajax/tabbedpanel/example5.jsp | 2 +-
.../ajax/tabbedpanel/example5Ok.jsp | 0
.../ajax/tabbedpanel/example6.jsp | 2 +-
.../{ => WEB-INF}/ajax/tabbedpanel/index.jsp | 2 +-
.../ajax/tabbedpanel/nodecorate/panel1.ftl | 0
.../ajax/tabbedpanel/nodecorate/panel2.ftl | 0
.../tabbedpanel/nodecorate/panel2Submit.ftl | 0
.../ajax/tabbedpanel/nodecorate/panel3.ftl | 0
.../tabbedpanel/nodecorate/panel3Submit.ftl | 0
.../main/webapp/{ => WEB-INF}/ajax/testjs.jsp | 0
.../{ => WEB-INF}/ajax/tree/getCategory.jsp | 0
.../ajax/tree/partialChunkHeader.jsp | 0
.../webapp/{ => WEB-INF}/ajax/tree/toggle.jsp | 0
.../webapp/{ => WEB-INF}/ajax/tree/tree.jsp | 0
.../{ => WEB-INF}/ajax/widgets/index.jsp | 2 +-
.../webapp/{ => WEB-INF}/chat/chatLogin.ftl | 0
.../webapp/{ => WEB-INF}/chat/createRoom.ftl | 0
.../main/webapp/{ => WEB-INF}/chat/index.jsp | 0
.../chat/messagesAvailableInRoom.ftl | 0
.../{ => WEB-INF}/chat/roomSelection.ftl | 0
.../{ => WEB-INF}/chat/roomsAvailable.ftl | 0
.../chat/sendMessageToRoomResult.ftl | 0
.../webapp/{ => WEB-INF}/chat/showRoom.ftl | 0
.../{ => WEB-INF}/chat/usersAvailable.ftl | 0
.../chat/usersAvailableInRoom.ftl | 0
.../{ => WEB-INF}/conversion/Address.java.txt | 0
.../conversion/AddressAction.java.txt | 0
.../conversion/EnumTypeConverter.java.txt | 0
.../conversion/OperationsEnum.java.txt | 0
.../conversion/OperationsEnumAction.java.txt | 0
.../OperationsEnumActionConversion.txt | 0
.../{ => WEB-INF}/conversion/Person.java.txt | 0
.../conversion/PersonAction.java.txt | 0
.../conversion/enterAddressInfo.jsp | 0
.../conversion/enterOperations.jsp | 0
.../conversion/enterPersonInfo.jsp | 0
.../webapp/{ => WEB-INF}/conversion/index.jsp | 0
.../conversion/showAddressInfo.jsp | 0
.../conversion/showOperations.jsp | 0
.../conversion/showPersonInfo.jsp | 0
.../customTheme/ftlCustomTemplate.ftl | 0
.../customTheme/jspCustomTemplate.jsp | 0
.../src/main/webapp/{ => WEB-INF}/date.jsp | 0
.../{ => WEB-INF}/empmanager/editEmployee.jsp | 0
.../{ => WEB-INF}/empmanager/editSkill.jsp | 0
.../webapp/{ => WEB-INF}/empmanager/index.jsp | 0
.../empmanager/listEmployees.jsp | 0
.../{ => WEB-INF}/empmanager/listSkills.jsp | 0
.../{ => WEB-INF}/filedownload/index.jsp | 0
.../fileupload/multipleUploadUsingArray.jsp | 0
.../fileupload/multipleUploadUsingList.jsp | 0
.../fileupload/upload-success.jsp | 0
.../{ => WEB-INF}/fileupload/upload.jsp | 0
.../customFreemarkerManagerUsage.ftl | 0
.../webapp/{ => WEB-INF}/freemarker/index.jsp | 0
.../{ => WEB-INF}/freemarker/standardTags.ftl | 0
.../webapp/{ => WEB-INF}/hangman/blank.ftl | 0
.../{ => WEB-INF}/hangman/hangmanAjax.ftl | 0
.../{ => WEB-INF}/hangman/hangmanNonAjax.ftl | 0
.../hangman/updateCharacterAvailable.ftl | 0
.../{ => WEB-INF}/hangman/updateGuessLeft.ftl | 0
.../{ => WEB-INF}/hangman/updateScaffold.ftl | 0
.../hangman/updateVocabCharacters.ftl | 0
.../src/main/webapp/{ => WEB-INF}/help.jsp | 0
.../{ => WEB-INF}/integration/modelDriven.jsp | 0
.../integration/modelDrivenResult.jsp | 0
.../webapp/{ => WEB-INF}/interactive/demo.jsp | 0
.../interactive/example-action.jsp | 0
.../{ => WEB-INF}/interactive/index.jsp | 0
.../{ => WEB-INF}/interactive/jsp_0.jsp | 0
.../{ => WEB-INF}/interactive/jsp_1.jsp | 0
.../{ => WEB-INF}/interactive/jsp_2.jsp | 0
.../{ => WEB-INF}/interactive/jsp_3.jsp | 0
.../{ => WEB-INF}/interactive/jsp_4.jsp | 0
.../{ => WEB-INF}/interactive/ognl_0.jsp | 0
.../{ => WEB-INF}/interactive/ognl_1.jsp | 0
.../{ => WEB-INF}/interactive/ognl_2.jsp | 0
.../{ => WEB-INF}/interactive/ognl_3.jsp | 0
.../{ => WEB-INF}/interactive/ognl_4.jsp | 0
.../{ => WEB-INF}/interactive/ognl_5.jsp | 0
.../{ => WEB-INF}/interactive/ognl_6.jsp | 0
.../{ => WEB-INF}/interactive/ognl_7.jsp | 0
.../{ => WEB-INF}/interactive/ognl_8.jsp | 0
.../{ => WEB-INF}/jsf/employee/edit.jsp | 0
.../{ => WEB-INF}/jsf/employee/list.jsp | 0
.../main/webapp/{ => WEB-INF}/jsf/index.jsp | 0
.../{ => WEB-INF}/modelDriven/modelDriven.jsp | 0
.../modelDriven/modelDrivenResult.jsp | 0
.../{ => WEB-INF}/person/edit-person.jsp | 0
.../webapp/{ => WEB-INF}/person/index.jsp | 0
.../{ => WEB-INF}/person/list-people.ftl | 0
.../{ => WEB-INF}/person/new-person.ftl | 0
.../main/webapp/{ => WEB-INF}/showcase.jsp | 0
.../tags/non-ui/actionPrefix/actionPrefix.ftl | 0
.../actionPrefix/actionPrefixExample.ftl | 0
.../tags/non-ui/actionPrefix/methodPrefix.ftl | 0
.../tags/non-ui/actionPrefix/normalSubmit.ftl | 0
.../actionPrefix/redirectActionPrefix.ftl | 0
.../tags/non-ui/actionTag/includedPage.jsp | 0
.../tags/non-ui/actionTag/includedPage2.jsp | 0
.../tags/non-ui/actionTag/includedPage3.jsp | 0
.../non-ui/actionTag/showActionTagDemo.jsp | 0
.../webapp/{ => WEB-INF}/tags/non-ui/date.jsp | 0
.../{ => WEB-INF}/tags/non-ui/debug.jsp | 0
.../tags/non-ui/ifTag/testIf.ftl | 0
.../tags/non-ui/ifTag/testIf.jsp | 0
.../appendIteratorTagDemoResult.jsp | 0
.../iteratorGeneratorTagDemoResult.jsp | 0
.../mergeIteratorTagDemoResult.jsp | 0
.../iteratorTag/showAppendIteratorTagDemo.jsp | 0
.../showIteratorGeneratorTagDemo.jsp | 0
.../iteratorTag/showMergeIteratorTagDemo.jsp | 0
.../iteratorTag/subsetIteratorTagDemo.jsp | 0
.../subsetIteratorTagDemoResult.jsp | 0
.../tags/ui/actionTagExampleCalled.jsp | 2 +-
.../tags/ui/actionTagExampleCalling.jsp | 46 +++++++--------
.../tags/ui/componentTagExample.jsp | 0
.../tags/ui/datepicker/index.jsp | 0
.../tags/ui/dynamicTreeSelect.jsp | 0
.../webapp/{ => WEB-INF}/tags/ui/example.jsp | 0
.../webapp/{ => WEB-INF}/tags/ui/example.vm | 0
.../{ => WEB-INF}/tags/ui/exampleSubmited.jsp | 0
.../{ => WEB-INF}/tags/ui/exampleSubmited.vm | 0
.../tags/ui/images/backgroundImage.jpg | Bin
.../{ => WEB-INF}/tags/ui/images/leopard.jpg | Bin
.../tags/ui/lotsOfOptiontransferselect.jsp | 0
.../ui/lotsOfOptiontransferselectSubmit.jsp | 0
.../{ => WEB-INF}/tags/ui/moreSelects.jsp | 0
.../tags/ui/moreSelectsSubmit.jsp | 0
.../tags/ui/staticTreeSelect.jsp | 0
.../tags/ui/timepicker/index.jsp | 0
.../tags/ui/treeExampleAjaxDynamic.ftl | 0
.../tags/ui/treeExampleAjaxDynamic.jsp | 0
.../tags/ui/treeExampleDynamic.jsp | 0
.../tags/ui/treeExampleStatic.jsp | 0
.../template/xhtml/mytemplate.jsp | 0
.../main/webapp/{ => WEB-INF}/tiles/body.ftl | 0
.../main/webapp/{ => WEB-INF}/tiles/body.jsp | 0
.../webapp/{ => WEB-INF}/tiles/header.jsp | 0
.../webapp/{ => WEB-INF}/tiles/layout.ftl | 0
.../webapp/{ => WEB-INF}/tiles/layout.jsp | 0
.../webapp/{ => WEB-INF}/token/doublePost.jsp | 0
.../webapp/{ => WEB-INF}/token/example1.jsp | 0
.../webapp/{ => WEB-INF}/token/example2.jsp | 0
.../webapp/{ => WEB-INF}/token/example3.jsp | 0
.../webapp/{ => WEB-INF}/token/example4.ftl | 0
.../main/webapp/{ => WEB-INF}/token/index.jsp | 0
.../{ => WEB-INF}/token/transferDone.jsp | 0
.../clientSideValidationExample.jsp | 0
.../validation/fieldValidatorsExample.jsp | 0
.../{ => WEB-INF}/validation/footer.jsp | 0
.../webapp/{ => WEB-INF}/validation/index.jsp | 0
.../validation/nonFieldValidatorsExample.jsp | 0
.../{ => WEB-INF}/validation/quiz-ajax.jsp | 0
.../{ => WEB-INF}/validation/quiz-basic.jsp | 0
.../validation/quiz-client-css.jsp | 0
.../{ => WEB-INF}/validation/quiz-client.jsp | 0
.../{ => WEB-INF}/validation/quiz-success.jsp | 0
.../storeErrorsAcrossRequestCancel.jsp | 0
.../storeErrorsAcrossRequestExample.jsp | 0
.../validation/storeErrorsAcrossRequestOk.jsp | 0
.../successClientSideValidationExample.jsp | 0
.../successFieldValidatorsExample.jsp | 0
.../successNonFieldValidatorsExample.jsp | 0
.../successVisitorValidatorsExample.jsp | 0
.../validation/visitorValidatorsExample.jsp | 0
.../main/webapp/{ => WEB-INF}/viewSource.jsp | 0
.../webapp/{ => WEB-INF}/wait/complete.jsp | 0
.../webapp/{ => WEB-INF}/wait/example1.jsp | 0
.../webapp/{ => WEB-INF}/wait/example2.jsp | 0
.../webapp/{ => WEB-INF}/wait/example3.jsp | 0
.../main/webapp/{ => WEB-INF}/wait/index.jsp | 0
.../main/webapp/{ => WEB-INF}/wait/wait.jsp | 0
.../main/webapp/{ => WEB-INF}/xslt/index.jsp | 0
219 files changed, 212 insertions(+), 212 deletions(-)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/actionchaining/actionChainingResult.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/AjaxResult.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/AjaxResult2.js (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/AjaxResult3.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/autocompleter/index.jsp (98%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/bind/index.jsp (96%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/commonInclude.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/footer.jsp (67%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/options.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/remotebutton/index.jsp (96%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/remotediv/example1.jsp (88%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/remotediv/example10.jsp (91%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/remotediv/example2.jsp (91%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/remotediv/example3.jsp (90%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/remotediv/example4.jsp (91%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/remotediv/example5.jsp (90%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/remotediv/example6.jsp (89%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/remotediv/example7.jsp (89%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/remotediv/example8.jsp (95%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/remotediv/example9.jsp (96%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/remotediv/index.jsp (95%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/remoteforms/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/remotelink/index.jsp (98%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tabbedpanel/example1.jsp (98%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tabbedpanel/example2.jsp (90%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tabbedpanel/example3.jsp (96%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tabbedpanel/example4.jsp (96%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tabbedpanel/example5.jsp (93%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tabbedpanel/example5Ok.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tabbedpanel/example6.jsp (94%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tabbedpanel/index.jsp (94%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tabbedpanel/nodecorate/panel1.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tabbedpanel/nodecorate/panel2.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tabbedpanel/nodecorate/panel2Submit.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tabbedpanel/nodecorate/panel3.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tabbedpanel/nodecorate/panel3Submit.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/testjs.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tree/getCategory.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tree/partialChunkHeader.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tree/toggle.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/tree/tree.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/ajax/widgets/index.jsp (94%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/chat/chatLogin.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/chat/createRoom.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/chat/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/chat/messagesAvailableInRoom.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/chat/roomSelection.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/chat/roomsAvailable.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/chat/sendMessageToRoomResult.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/chat/showRoom.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/chat/usersAvailable.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/chat/usersAvailableInRoom.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/Address.java.txt (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/AddressAction.java.txt (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/EnumTypeConverter.java.txt (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/OperationsEnum.java.txt (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/OperationsEnumAction.java.txt (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/OperationsEnumActionConversion.txt (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/Person.java.txt (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/PersonAction.java.txt (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/enterAddressInfo.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/enterOperations.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/enterPersonInfo.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/showAddressInfo.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/showOperations.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/conversion/showPersonInfo.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/customTemplateDir/customTheme/ftlCustomTemplate.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/customTemplateDir/customTheme/jspCustomTemplate.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/date.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/empmanager/editEmployee.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/empmanager/editSkill.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/empmanager/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/empmanager/listEmployees.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/empmanager/listSkills.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/filedownload/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/fileupload/multipleUploadUsingArray.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/fileupload/multipleUploadUsingList.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/fileupload/upload-success.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/fileupload/upload.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/freemarker/customFreemarkerManagerUsage.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/freemarker/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/freemarker/standardTags.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/hangman/blank.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/hangman/hangmanAjax.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/hangman/hangmanNonAjax.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/hangman/updateCharacterAvailable.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/hangman/updateGuessLeft.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/hangman/updateScaffold.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/hangman/updateVocabCharacters.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/help.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/integration/modelDriven.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/integration/modelDrivenResult.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/demo.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/example-action.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/jsp_0.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/jsp_1.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/jsp_2.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/jsp_3.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/jsp_4.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/ognl_0.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/ognl_1.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/ognl_2.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/ognl_3.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/ognl_4.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/ognl_5.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/ognl_6.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/ognl_7.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/interactive/ognl_8.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/jsf/employee/edit.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/jsf/employee/list.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/jsf/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/modelDriven/modelDriven.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/modelDriven/modelDrivenResult.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/person/edit-person.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/person/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/person/list-people.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/person/new-person.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/showcase.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/actionPrefix/actionPrefix.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/actionPrefix/actionPrefixExample.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/actionPrefix/methodPrefix.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/actionPrefix/normalSubmit.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/actionPrefix/redirectActionPrefix.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/actionTag/includedPage.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/actionTag/includedPage2.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/actionTag/includedPage3.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/actionTag/showActionTagDemo.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/date.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/debug.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/ifTag/testIf.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/ifTag/testIf.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/iteratorTag/appendIteratorTagDemoResult.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/iteratorTag/iteratorGeneratorTagDemoResult.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/iteratorTag/mergeIteratorTagDemoResult.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/iteratorTag/showAppendIteratorTagDemo.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/iteratorTag/showIteratorGeneratorTagDemo.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/iteratorTag/showMergeIteratorTagDemo.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/iteratorTag/subsetIteratorTagDemo.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/non-ui/iteratorTag/subsetIteratorTagDemoResult.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/actionTagExampleCalled.jsp (55%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/actionTagExampleCalling.jsp (94%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/componentTagExample.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/datepicker/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/dynamicTreeSelect.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/example.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/example.vm (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/exampleSubmited.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/exampleSubmited.vm (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/images/backgroundImage.jpg (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/images/leopard.jpg (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/lotsOfOptiontransferselect.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/lotsOfOptiontransferselectSubmit.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/moreSelects.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/moreSelectsSubmit.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/staticTreeSelect.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/timepicker/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/treeExampleAjaxDynamic.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/treeExampleAjaxDynamic.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/treeExampleDynamic.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tags/ui/treeExampleStatic.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/template/xhtml/mytemplate.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tiles/body.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tiles/body.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tiles/header.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tiles/layout.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/tiles/layout.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/token/doublePost.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/token/example1.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/token/example2.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/token/example3.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/token/example4.ftl (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/token/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/token/transferDone.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/clientSideValidationExample.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/fieldValidatorsExample.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/footer.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/nonFieldValidatorsExample.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/quiz-ajax.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/quiz-basic.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/quiz-client-css.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/quiz-client.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/quiz-success.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/storeErrorsAcrossRequestCancel.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/storeErrorsAcrossRequestExample.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/storeErrorsAcrossRequestOk.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/successClientSideValidationExample.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/successFieldValidatorsExample.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/successNonFieldValidatorsExample.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/successVisitorValidatorsExample.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/validation/visitorValidatorsExample.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/viewSource.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/wait/complete.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/wait/example1.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/wait/example2.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/wait/example3.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/wait/index.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/wait/wait.jsp (100%)
rename apps/showcase/src/main/webapp/{ => WEB-INF}/xslt/index.jsp (100%)
diff --git a/apps/showcase/src/main/resources/struts-actionchaining.xml b/apps/showcase/src/main/resources/struts-actionchaining.xml
index bdefeb0a2..94d8b2857 100644
--- a/apps/showcase/src/main/resources/struts-actionchaining.xml
+++ b/apps/showcase/src/main/resources/struts-actionchaining.xml
@@ -12,7 +12,7 @@
actionChain3
- /actionchaining/actionChainingResult.jsp
+ /WEB-INF/actionchaining/actionChainingResult.jsp
diff --git a/apps/showcase/src/main/resources/struts-ajax.xml b/apps/showcase/src/main/resources/struts-ajax.xml
index 910112cf7..43d087686 100644
--- a/apps/showcase/src/main/resources/struts-ajax.xml
+++ b/apps/showcase/src/main/resources/struts-ajax.xml
@@ -6,27 +6,27 @@
- /ajax/AjaxResult.jsp
+ /WEB-INF/ajax/AjaxResult.jsp
- /ajax/AjaxResult2.js
+ /WEB-INF/ajax/AjaxResult2.js
- /ajax/AjaxResult3.jsp
+ /WEB-INF/ajax/AjaxResult3.jsp
- /ajax/remoteforms/test2.jsp
+ /WEB-INF/ajax/remoteforms/test2.jsp
- /ajax/remoteforms/test3.jsp
+ /WEB-INF/ajax/remoteforms/test3.jsp
- /ajax/testjs.jsp
+ /WEB-INF/ajax/testjs.jsp
@@ -34,54 +34,54 @@
- /ajax/tree/tree.jsp
+ /WEB-INF/ajax/tree/tree.jsp
- /ajax/tree/getCategory.jsp
+ /WEB-INF/ajax/tree/getCategory.jsp
- /ajax/tree/toggle.jsp
+ /WEB-INF/ajax/tree/toggle.jsp
- /ajax/tabbedpanel/example4.ftl
+ /WEB-INF/ajax/tabbedpanel/example4.ftl
- /ajax/tabbedpanel/example5.jsp
- /ajax/tabbedpanel/example5Ok.jsp
+ /WEB-INF/ajax/tabbedpanel/example5.jsp
+ /WEB-INF/ajax/tabbedpanel/example5Ok.jsp
- /ajax/tabbedpanel/nodecorate/panel1.ftl
+ /WEB-INF/ajax/tabbedpanel/nodecorate/panel1.ftl
- /ajax/tabbedpanel/nodecorate/panel2.ftl
+ /WEB-INF/ajax/tabbedpanel/nodecorate/panel2.ftl
- /ajax/tabbedpanel/nodecorate/panel3.ftl
+ /WEB-INF/ajax/tabbedpanel/nodecorate/panel3.ftl
- /ajax/tabbedpanel/nodecorate/panel2Submit.ftl
+ /WEB-INF/ajax/tabbedpanel/nodecorate/panel2Submit.ftl
- /ajax/tabbedpanel/nodecorate/panel3Submit.ftl
+ /WEB-INF/ajax/tabbedpanel/nodecorate/panel3Submit.ftl
- /ajax/options.ftl
+ /WEB-INF/ajax/options.ftl
- /validation/quiz-ajax.jsp
- /validation/quiz-success.jsp
+ /WEB-INF/validation/quiz-ajax.jsp
+ /WEB-INF/validation/quiz-success.jsp
- /tags/ui/treeExampleAjaxDynamic.ftl
+ /WEB-INF/tags/ui/treeExampleAjaxDynamic.ftl
diff --git a/apps/showcase/src/main/resources/struts-chat.xml b/apps/showcase/src/main/resources/struts-chat.xml
index 568b71a97..15ea15b1c 100644
--- a/apps/showcase/src/main/resources/struts-chat.xml
+++ b/apps/showcase/src/main/resources/struts-chat.xml
@@ -33,18 +33,18 @@
- /chat/chatLogin.ftl
+ /WEB-INF/chat/chatLogin.ftl
- /chat/roomSelection.ftl
+ /WEB-INF/chat/roomSelection.ftl
/chat/showRooms.action
- /chat/chatLogin.ftl
+ /WEB-INF/chat/chatLogin.ftl
@@ -54,12 +54,12 @@
- /chat/roomSelection.ftl
+ /WEB-INF/chat/roomSelection.ftl
- /chat/showRoom.ftl
+ /WEB-INF/chat/showRoom.ftl
@@ -100,35 +100,35 @@
- /chat/usersAvailable.ftl
+ /WEB-INF/chat/usersAvailable.ftl
- /chat/roomsAvailable.ftl
+ /WEB-INF/chat/roomsAvailable.ftl
- /chat/createRoom.ftl
- /chat/createRoom.ftl
+ /WEB-INF/chat/createRoom.ftl
+ /WEB-INF/chat/createRoom.ftl
- /chat/messagesAvailableInRoom.ftl
- /chat/messagesAvailableInRoom.ftl
+ /WEB-INF/chat/messagesAvailableInRoom.ftl
+ /WEB-INF/chat/messagesAvailableInRoom.ftl
- /chat/sendMessageToRoomResult.ftl
- /chat/sendMessageToRoomResult.ftl
+ /WEB-INF/chat/sendMessageToRoomResult.ftl
+ /WEB-INF/chat/sendMessageToRoomResult.ftl
- /chat/usersAvailableInRoom.ftl
+ /WEB-INF/chat/usersAvailableInRoom.ftl
diff --git a/apps/showcase/src/main/resources/struts-conversion.xml b/apps/showcase/src/main/resources/struts-conversion.xml
index ad0b1a975..27dd6875f 100644
--- a/apps/showcase/src/main/resources/struts-conversion.xml
+++ b/apps/showcase/src/main/resources/struts-conversion.xml
@@ -9,65 +9,65 @@
- enterPersonInfo.jsp
+ /WEB-INF/conversion/enterPersonInfo.jsp
- showPersonInfo.jsp
- enterPersonInfo.jsp
+ /WEB-INF/conversion/showPersonInfo.jsp
+ /WEB-INF/conversion/enterPersonInfo.jsp
- /conversion/enterPersonInfo.jsp
+ /WEB-INF/conversion/enterPersonInfo.jsp
- /conversion/PersonAction.java.txt
+ /WEB-INF/conversion/PersonAction.java.txt
- /conversion/Person.java.txt
+ /WEB-INF/conversion/Person.java.txt
- enterAddressInfo.jsp
+ /WEB-INF/conversion/enterAddressInfo.jsp
- showAddressInfo.jsp
- enterAddressInfo.jsp
+ /WEB-INF/conversion/showAddressInfo.jsp
+ /WEB-INF/conversion/enterAddressInfo.jsp
- /conversion/enterAddressInfo.jsp
+ /WEB-INF/conversion/enterAddressInfo.jsp
- /conversion/AddressAction.java.txt
+ /WEB-INF/conversion/AddressAction.java.txt
- /conversion/Address.java.txt
+ /WEB-INF/conversion/Address.java.txt
- enterOperations.jsp
+ /WEB-INF/conversion/enterOperations.jsp
- showOperations.jsp
- enterOperations.jsp
+ /WEB-INF/conversion/showOperations.jsp
+ /WEB-INF/conversion/enterOperations.jsp
- /conversion/enterOperations.jsp
+ /WEB-INF/conversion/enterOperations.jsp
- /conversion/OperationsEnum.java.txt
+ /WEB-INF/conversion/OperationsEnum.java.txt
- /conversion/OperationsEnumAction.java.txt
+ /WEB-INF/conversion/OperationsEnumAction.java.txt
- /conversion/EnumTypeConverter.java.txt
+ /WEB-INF/conversion/EnumTypeConverter.java.txt
- /conversion/OperationsEnumActionConversion.txt
+ /WEB-INF/conversion/OperationsEnumActionConversion.txt
diff --git a/apps/showcase/src/main/resources/struts-fileupload.xml b/apps/showcase/src/main/resources/struts-fileupload.xml
index 71071822e..5a81f614d 100644
--- a/apps/showcase/src/main/resources/struts-fileupload.xml
+++ b/apps/showcase/src/main/resources/struts-fileupload.xml
@@ -7,29 +7,29 @@
- upload.jsp
+ /WEB-INF/fileupload/upload.jsp
- upload.jsp
- upload-success.jsp
+ /WEB-INF/fileupload/upload.jsp
+ /WEB-INF/fileupload/upload-success.jsp
- multipleUploadUsingList.jsp
+ /WEB-INF/fileupload/multipleUploadUsingList.jsp
- multiple-success.jsp
+ /WEB-INF/fileupload/multiple-success.jsp
- multipleUploadUsingArray.jsp
+ /WEB-INF/fileupload/multipleUploadUsingArray.jsp
- multiple-success.jsp
+ /WEB-INF/fileupload/multiple-success.jsp
diff --git a/apps/showcase/src/main/resources/struts-freemarker.xml b/apps/showcase/src/main/resources/struts-freemarker.xml
index ae9334f13..8c70421cf 100644
--- a/apps/showcase/src/main/resources/struts-freemarker.xml
+++ b/apps/showcase/src/main/resources/struts-freemarker.xml
@@ -6,11 +6,11 @@
- /freemarker/customFreemarkerManagerUsage.ftl
+ /WEB-INF/freemarker/customFreemarkerManagerUsage.ftl
- /freemarker/standardTags.ftl
+ /WEB-INF/freemarker/standardTags.ftl
diff --git a/apps/showcase/src/main/resources/struts-hangman.xml b/apps/showcase/src/main/resources/struts-hangman.xml
index 6c61a3db9..69abdbf7a 100644
--- a/apps/showcase/src/main/resources/struts-hangman.xml
+++ b/apps/showcase/src/main/resources/struts-hangman.xml
@@ -6,19 +6,19 @@
- /hangman/hangmanAjax.ftl
+ /WEB-INF/hangman/hangmanAjax.ftl
- /hangman/hangmanNonAjax.ftl
+ /WEB-INF/hangman/hangmanNonAjax.ftl
/hangman/test.ftl
- /hangman/blank.ftl
+ /WEB-INF/hangman/blank.ftl
- /hangman/hangmanNonAjax.ftl
+ /WEB-INF/hangman/hangmanNonAjax.ftl
@@ -26,19 +26,19 @@
- /hangman/blank.ftl
+ /WEB-INF/hangman/blank.ftl
- /hangman/updateVocabCharacters.ftl
+ /WEB-INF/hangman/updateVocabCharacters.ftl
- /hangman/updateCharacterAvailable.ftl
+ /WEB-INF/hangman/updateCharacterAvailable.ftl
- /hangman/updateScaffold.ftl
+ /WEB-INF/hangman/updateScaffold.ftl
- /hangman/updateGuessLeft.ftl
+ /WEB-INF/hangman/updateGuessLeft.ftl
diff --git a/apps/showcase/src/main/resources/struts-integration.xml b/apps/showcase/src/main/resources/struts-integration.xml
index 71d2776a3..d251f7272 100644
--- a/apps/showcase/src/main/resources/struts-integration.xml
+++ b/apps/showcase/src/main/resources/struts-integration.xml
@@ -39,8 +39,8 @@
org.apache.struts2.showcase.integration.SaveGangsterAction
true
- modelDriven.jsp
- modelDrivenResult.jsp
+ /WEB-INF/integration/modelDriven.jsp
+ /WEB-INF/integration/modelDrivenResult.jsp
diff --git a/apps/showcase/src/main/resources/struts-interactive.xml b/apps/showcase/src/main/resources/struts-interactive.xml
index 4c1d801f6..424aabb0d 100644
--- a/apps/showcase/src/main/resources/struts-interactive.xml
+++ b/apps/showcase/src/main/resources/struts-interactive.xml
@@ -9,7 +9,7 @@
- /interactive/demo.jsp
+ /WEB-INF/interactive/demo.jsp
diff --git a/apps/showcase/src/main/resources/struts-model-driven.xml b/apps/showcase/src/main/resources/struts-model-driven.xml
index cc085d18e..dc9b839a3 100644
--- a/apps/showcase/src/main/resources/struts-model-driven.xml
+++ b/apps/showcase/src/main/resources/struts-model-driven.xml
@@ -7,12 +7,12 @@
- modelDriven.jsp
+ /WEB-INF/modelDriven/modelDriven.jsp
- modelDrivenResult.jsp
+ /WEB-INF/modelDriven/modelDrivenResult.jsp
diff --git a/apps/showcase/src/main/resources/struts-tags-non-ui.xml b/apps/showcase/src/main/resources/struts-tags-non-ui.xml
index 20c5a8dbb..c296fd202 100644
--- a/apps/showcase/src/main/resources/struts-tags-non-ui.xml
+++ b/apps/showcase/src/main/resources/struts-tags-non-ui.xml
@@ -11,19 +11,19 @@
- /tags/non-ui/actionTag/showActionTagDemo.jsp
+ /WEB-INF/tags/non-ui/actionTag/showActionTagDemo.jsp
- /tags/non-ui/actionTag/includedPage.jsp
+ /WEB-INF/tags/non-ui/actionTag/includedPage.jsp
- /tags/non-ui/actionTag/includedPage2.jsp
+ /WEB-INF/tags/non-ui/actionTag/includedPage2.jsp
- /tags/non-ui/actionTag/includedPage3.jsp
+ /WEB-INF/tags/non-ui/actionTag/includedPage3.jsp
- /tags/non-ui/actionTag/showActionTagDemo.jsp
+ /WEB-INF/tags/non-ui/actionTag/showActionTagDemo.jsp
@@ -33,11 +33,11 @@
- /tags/non-ui/iteratorTag/showIteratorGeneratorTagDemo.jsp
+ /WEB-INF/tags/non-ui/iteratorTag/showIteratorGeneratorTagDemo.jsp
- /tags/non-ui/iteratorTag/showIteratorGeneratorTagDemo.jsp
- /tags/non-ui/iteratorTag/iteratorGeneratorTagDemoResult.jsp
+ /WEB-INF/tags/non-ui/iteratorTag/showIteratorGeneratorTagDemo.jsp
+ /WEB-INF/tags/non-ui/iteratorTag/iteratorGeneratorTagDemoResult.jsp
@@ -47,11 +47,11 @@
- /tags/non-ui/iteratorTag/showAppendIteratorTagDemo.jsp
+ /WEB-INF/tags/non-ui/iteratorTag/showAppendIteratorTagDemo.jsp
- /tag/non-ui/iteratorTag/showAppendIteratorTagDemo.jsp
- /tags/non-ui/iteratorTag/appendIteratorTagDemoResult.jsp
+ /WEB-INF/tags/non-ui/iteratorTag/showAppendIteratorTagDemo.jsp
+ /WEB-INF/tags/non-ui/iteratorTag/appendIteratorTagDemoResult.jsp
@@ -61,11 +61,11 @@
- /tags/non-ui/iteratorTag/showMergeIteratorTagDemo.jsp
+ /WEB-INF/tags/non-ui/iteratorTag/showMergeIteratorTagDemo.jsp
- /tags/non-ui/iteratorTag/showMergeIteratorTagDemo.jsp
- /tags/non-ui/iteratorTag/mergeIteratorTagDemoResult.jsp
+ /WEB-INF/tags/non-ui/iteratorTag/showMergeIteratorTagDemo.jsp
+ /WEB-INF/tags/non-ui/iteratorTag/mergeIteratorTagDemoResult.jsp
@@ -74,11 +74,11 @@
- /tags/non-ui/iteratorTag/subsetIteratorTagDemo.jsp
+ /WEB-INF/tags/non-ui/iteratorTag/subsetIteratorTagDemo.jsp
- /tags/non-ui/iteratorTag/subsetIteratorTagDemo.jsp
- /tags/non-ui/iteratorTag/subsetIteratorTagDemoResult.jsp
+ /WEB-INF/tags/non-ui/iteratorTag/subsetIteratorTagDemo.jsp
+ /WEB-INF/tags/non-ui/iteratorTag/subsetIteratorTagDemoResult.jsp
@@ -87,28 +87,28 @@
- /tags/non-ui/actionPrefix/actionPrefixExample.ftl
+ /WEB-INF/tags/non-ui/actionPrefix/actionPrefixExample.ftl
- /tags/non-ui/actionPrefix/normalSubmit.ftl
+ /WEB-INF/tags/non-ui/actionPrefix/normalSubmit.ftl
- /tags/non-ui/actionPrefix/methodPrefix.ftl
+ /WEB-INF/tags/non-ui/actionPrefix/methodPrefix.ftl
- /tags/non-ui/actionPrefix/actionPrefix.ftl
+ /WEB-INF/tags/non-ui/actionPrefix/actionPrefix.ftl
- /tags/non-ui/actionPrefix/redirectPrefix.ftl
+ /WEB-INF/tags/non-ui/actionPrefix/redirectPrefix.ftl
- /tags/non-ui/actionPrefix/redirectActionPrefix.ftl
+ /WEB-INF/tags/non-ui/actionPrefix/redirectActionPrefix.ftl
redirectActionPrefix
- /tags/non-ui/actionPrefix/actionPrefixExample.ftl
+ /WEB-INF/tags/non-ui/actionPrefix/actionPrefixExample.ftl
@@ -117,10 +117,10 @@
- /tags/non-ui/ifTag/testIf.jsp
+ /WEB-INF/tags/non-ui/ifTag/testIf.jsp
- /tags/non-ui/ifTag/testIf.ftl
+ /WEB-INF/tags/non-ui/ifTag/testIf.ftl
@@ -129,7 +129,7 @@
- /tags/non-ui/debug.jsp
+ /WEB-INF/tags/non-ui/debug.jsp
diff --git a/apps/showcase/src/main/resources/struts-tags-ui.xml b/apps/showcase/src/main/resources/struts-tags-ui.xml
index 449958fc5..563fbc1fc 100644
--- a/apps/showcase/src/main/resources/struts-tags-ui.xml
+++ b/apps/showcase/src/main/resources/struts-tags-ui.xml
@@ -6,57 +6,57 @@
- example.jsp
- example.jsp
+ /WEB-INF/tags/ui/example.jsp
+ /WEB-INF/tags/ui/example.jsp
- exampleSubmited.jsp
- example.jsp
+ /WEB-INF/tags/ui/exampleSubmited.jsp
+ /WEB-INF/tags/ui/example.jsp
- example.vm
- example.vm
+ /WEB-INF/tags/ui/example.vm
+ /WEB-INF/tags/ui/example.vm
- exampleSubmited.vm
- example.vm
+ /WEB-INF/tags/ui/exampleSubmited.vm
+ /WEB-INF/tags/ui/example.vm
- lotsOfOptiontransferselect.jsp
+ /WEB-INF/tags/ui/lotsOfOptiontransferselect.jsp
- lotsOfOptiontransferselect.jsp
- lotsOfOptiontransferselectSubmit.jsp
+ /WEB-INF/tags/ui/lotsOfOptiontransferselect.jsp
+ /WEB-INF/tags/ui/lotsOfOptiontransferselectSubmit.jsp
- moreSelects.jsp
+ /WEB-INF/tags/ui/moreSelects.jsp
- moreSelects.jsp
- moreSelectsSubmit.jsp
+ /WEB-INF/tags/ui/moreSelects.jsp
+ /WEB-INF/tags/ui/moreSelectsSubmit.jsp
- /tags/ui/treeExampleDynamic.jsp
+ /WEB-INF/tags/ui/treeExampleDynamic.jsp
- /tags/ui/treeExampleAjaxDynamic.jsp
+ /WEB-INF/tags/ui/treeExampleAjaxDynamic.jsp
- /tags/ui/componentTagExample.jsp
+ /WEB-INF/tags/ui/componentTagExample.jsp
- /tags/ui/actionTagExampleCalled.jsp
- /tags/ui/actionTagExampleCalling.jsp
+ /WEB-INF/tags/ui/actionTagExampleCalled.jsp
+ /WEB-INF/tags/ui/actionTagExampleCalling.jsp
@@ -65,10 +65,10 @@
- /tags/ui/staticTreeSelect.jsp
+ /WEB-INF/tags/ui/staticTreeSelect.jsp
- /tags/ui/dynamicTreeSelect.jsp
+ /WEB-INF/tags/ui/dynamicTreeSelect.jsp
diff --git a/apps/showcase/src/main/resources/struts-tiles.xml b/apps/showcase/src/main/resources/struts-tiles.xml
index d749d77b2..9fbe0258b 100644
--- a/apps/showcase/src/main/resources/struts-tiles.xml
+++ b/apps/showcase/src/main/resources/struts-tiles.xml
@@ -21,7 +21,7 @@
- /tiles/layout.jsp
+ /WEB-INF/tiles/layout.jsp
/tiles/layout.jsp
diff --git a/apps/showcase/src/main/resources/struts-token.xml b/apps/showcase/src/main/resources/struts-token.xml
index 06f347730..d43435bd3 100644
--- a/apps/showcase/src/main/resources/struts-token.xml
+++ b/apps/showcase/src/main/resources/struts-token.xml
@@ -7,56 +7,56 @@
- example1.jsp
+ /WEB-INF/token/example1.jsp
- doublePost.jsp
- transferDone.jsp
+ /WEB-INF/token/doublePost.jsp
+ /WEB-INF/token/transferDone.jsp
- example2.jsp
+ /WEB-INF/token/example2.jsp
- doublePost.jsp
- transferDone.jsp
+ /WEB-INF/token/doublePost.jsp
+ /WEB-INF/token/transferDone.jsp
- example3.jsp
+ /WEB-INF/token/example3.jsp
- doublePost.jsp
- transferDone.jsp
+ /WEB-INF/token/doublePost.jsp
+ /WEB-INF/token/transferDone.jsp
- example4.ftl
+ /WEB-INF/token/example4.ftl
- doublePost.jsp
- transferDone.jsp
+ /WEB-INF/token/doublePost.jsp
+ /WEB-INF/token/transferDone.jsp
diff --git a/apps/showcase/src/main/resources/struts-validation.xml b/apps/showcase/src/main/resources/struts-validation.xml
index 5351b1ebc..778a2109b 100755
--- a/apps/showcase/src/main/resources/struts-validation.xml
+++ b/apps/showcase/src/main/resources/struts-validation.xml
@@ -40,12 +40,12 @@
- /validation/fieldValidatorsExample.jsp
+ /WEB-INF/validation/fieldValidatorsExample.jsp
- /validation/fieldValidatorsExample.jsp
- /validation/successFieldValidatorsExample.jsp
+ /WEB-INF/validation/fieldValidatorsExample.jsp
+ /WEB-INF/validation/successFieldValidatorsExample.jsp
@@ -55,12 +55,12 @@
- /validation/nonFieldValidatorsExample.jsp
+ /WEB-INF/validation/nonFieldValidatorsExample.jsp
- /validation/nonFieldValidatorsExample.jsp
- /validation/successNonFieldValidatorsExample.jsp
+ /WEB-INF/validation/nonFieldValidatorsExample.jsp
+ /WEB-INF/validation/successNonFieldValidatorsExample.jsp
@@ -70,12 +70,12 @@
- /validation/visitorValidatorsExample.jsp
+ /WEB-INF/validation/visitorValidatorsExample.jsp
- /validation/visitorValidatorsExample.jsp
- /validation/successVisitorValidatorsExample.jsp
+ /WEB-INF/validation/visitorValidatorsExample.jsp
+ /WEB-INF/validation/successVisitorValidatorsExample.jsp
@@ -85,12 +85,12 @@
- /validation/clientSideValidationExample.jsp
+ /WEB-INF/validation/clientSideValidationExample.jsp
- /validation/clientSideValidationExample.jsp
- /validation/successClientSideValidationExample.jsp
+ /WEB-INF/validation/clientSideValidationExample.jsp
+ /WEB-INF/validation/successClientSideValidationExample.jsp
@@ -109,16 +109,16 @@
RETRIEVE
- /validation/storeErrorsAcrossRequestExample.jsp
+ /WEB-INF/validation/storeErrorsAcrossRequestExample.jsp
RETRIEVE
- /validation/storeErrorsAcrossRequestOk.jsp
+ /WEB-INF/validation/storeErrorsAcrossRequestOk.jsp
- /validation/storeErrorsAcrossRequestCancel.jsp
+ /WEB-INF/validation/storeErrorsAcrossRequestCancel.jsp
diff --git a/apps/showcase/src/main/resources/struts-wait.xml b/apps/showcase/src/main/resources/struts-wait.xml
index 521c2c754..8ea291124 100644
--- a/apps/showcase/src/main/resources/struts-wait.xml
+++ b/apps/showcase/src/main/resources/struts-wait.xml
@@ -9,8 +9,8 @@
- wait.jsp
- complete.jsp
+ /WEB-INF/wait/wait.jsp
+ /WEB-INF/wait/complete.jsp
@@ -18,8 +18,8 @@
2000
- wait.jsp
- complete.jsp
+ /WEB-INF/wait/wait.jsp
+ /WEB-INF/wait/complete.jsp
@@ -28,8 +28,8 @@
3000
1000
- wait.jsp
- complete.jsp
+ /WEB-INF/wait/wait.jsp
+ /WEB-INF/wait/complete.jsp
diff --git a/apps/showcase/src/main/resources/struts.xml b/apps/showcase/src/main/resources/struts.xml
index 3c1ebf3a4..74c59c651 100644
--- a/apps/showcase/src/main/resources/struts.xml
+++ b/apps/showcase/src/main/resources/struts.xml
@@ -75,15 +75,15 @@
- showcase.jsp
+ ../webapp/WEB-INF/showcase.jsp
- viewSource.jsp
+ ../webapp/WEB-INF/viewSource.jsp
- /date.jsp
+ /WEB-INF/date.jsp
diff --git a/apps/showcase/src/main/webapp/actionchaining/actionChainingResult.jsp b/apps/showcase/src/main/webapp/WEB-INF/actionchaining/actionChainingResult.jsp
similarity index 100%
rename from apps/showcase/src/main/webapp/actionchaining/actionChainingResult.jsp
rename to apps/showcase/src/main/webapp/WEB-INF/actionchaining/actionChainingResult.jsp
diff --git a/apps/showcase/src/main/webapp/ajax/AjaxResult.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/AjaxResult.jsp
similarity index 100%
rename from apps/showcase/src/main/webapp/ajax/AjaxResult.jsp
rename to apps/showcase/src/main/webapp/WEB-INF/ajax/AjaxResult.jsp
diff --git a/apps/showcase/src/main/webapp/ajax/AjaxResult2.js b/apps/showcase/src/main/webapp/WEB-INF/ajax/AjaxResult2.js
similarity index 100%
rename from apps/showcase/src/main/webapp/ajax/AjaxResult2.js
rename to apps/showcase/src/main/webapp/WEB-INF/ajax/AjaxResult2.js
diff --git a/apps/showcase/src/main/webapp/ajax/AjaxResult3.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/AjaxResult3.jsp
similarity index 100%
rename from apps/showcase/src/main/webapp/ajax/AjaxResult3.jsp
rename to apps/showcase/src/main/webapp/WEB-INF/ajax/AjaxResult3.jsp
diff --git a/apps/showcase/src/main/webapp/ajax/autocompleter/index.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/autocompleter/index.jsp
similarity index 98%
rename from apps/showcase/src/main/webapp/ajax/autocompleter/index.jsp
rename to apps/showcase/src/main/webapp/WEB-INF/ajax/autocompleter/index.jsp
index 9079e7d3c..c67257fb1 100644
--- a/apps/showcase/src/main/webapp/ajax/autocompleter/index.jsp
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/autocompleter/index.jsp
@@ -6,7 +6,7 @@
Ajax Examples
-
+
diff --git a/apps/showcase/src/main/webapp/ajax/bind/index.jsp b/apps/showcase/src/main/webapp/WEB-INF/ajax/bind/index.jsp
similarity index 96%
rename from apps/showcase/src/main/webapp/ajax/bind/index.jsp
rename to apps/showcase/src/main/webapp/WEB-INF/ajax/bind/index.jsp
index 779e453af..046006cbb 100644
--- a/apps/showcase/src/main/webapp/ajax/bind/index.jsp
+++ b/apps/showcase/src/main/webapp/WEB-INF/ajax/bind/index.jsp
@@ -5,7 +5,7 @@
Bind Examples
-
+