Author: mrdon
Date: Sat Sep 23 23:49:04 2006
New Revision: 449367
URL: http://svn.apache.org/viewvc?view=rev&rev=449367
Log:
Modified the process of getting the configuration so that it would only look
for unmodified
files once per request, and not for static resources. The problem arose when I
modified
the ActionMapper to take into consideration when determining the action mapping
(allows
action names with slashes). The Configuration was being checked before it
determined if
the request was for a static file or not.
WW-493
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapper.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/NullActionMapper.java
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java?view=diff&rev=449367&r1=449366&r2=449367
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
Sat Sep 23 23:49:04 2006
@@ -20,6 +20,7 @@
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.StrutsException;
+import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
/**
@@ -29,6 +30,7 @@
private static final Log LOG =
LogFactory.getLog(StrutsXmlConfigurationProvider.class);
private File baseDir = null;
+ private String filename;
/**
* Constructs the configuration provider
@@ -47,7 +49,7 @@
*/
public StrutsXmlConfigurationProvider(String filename, boolean
errorIfMissing) {
super(filename, errorIfMissing);
-
+ this.filename = filename;
Map<String,String> dtdMappings = new
HashMap<String,String>(getDtdMappings());
dtdMappings.put("-//Apache Software Foundation//DTD Struts
Configuration 2.0//EN", "struts-2.0.dtd");
setDtdMappings(dtdMappings);
@@ -101,4 +103,21 @@
}
return url;
}
+
+ /**
+ * Overrides needs reload to ensure it is only checked once per request
+ */
+ @Override
+ public boolean needsReload() {
+ ActionContext ctx = ActionContext.getContext();
+ String key = "configurationReload-"+filename;
+ if (ctx.get(key) == null) {
+ ctx.put(key, Boolean.TRUE);
+ return super.needsReload();
+ }
+ return false;
+
+ }
+
+
}
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java?view=diff&rev=449367&r1=449366&r2=449367
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
Sat Sep 23 23:49:04 2006
@@ -220,7 +220,7 @@
ActionMapping mapping = null;
try {
mapper = ActionMapperFactory.getMapper();
- mapping = mapper.getMapping(request,
du.getConfigurationManager().getConfiguration());
+ mapping = mapper.getMapping(request, du.getConfigurationManager());
} catch (Exception ex) {
du.sendError(request, response, servletContext,
response.SC_INTERNAL_SERVER_ERROR, ex);
ActionContextCleanUp.cleanUp(req);
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java?view=diff&rev=449367&r1=449366&r2=449367
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java
Sat Sep 23 23:49:04 2006
@@ -105,7 +105,7 @@
if (isPathUrl(finalLocation)) {
if (!finalLocation.startsWith("/")) {
String namespace = ActionMapperFactory.getMapper().getMapping(
- request,
Dispatcher.getInstance().getConfigurationManager().getConfiguration()).getNamespace();
+ request,
Dispatcher.getInstance().getConfigurationManager()).getNamespace();
if ((namespace != null) && (namespace.length() > 0) &&
(!"/".equals(namespace))) {
finalLocation = namespace + "/" + finalLocation;
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapper.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapper.java?view=diff&rev=449367&r1=449366&r2=449367
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapper.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapper.java
Sat Sep 23 23:49:04 2006
@@ -19,7 +19,8 @@
import javax.servlet.http.HttpServletRequest;
-import com.opensymphony.xwork2.config.Configuration;
+import com.opensymphony.xwork2.config.ConfigurationManager;
+
/**
* <!-- START SNIPPET: javadoc -->
@@ -43,10 +44,10 @@
* Gets an action mapping for the current request
*
* @param request The servlet request
- * @param config The current configuration
+ * @param config The current configuration manager
* @return The appropriate action mapping
*/
- ActionMapping getMapping(HttpServletRequest request, Configuration config);
+ ActionMapping getMapping(HttpServletRequest request, ConfigurationManager
configManager);
/**
* Converts an ActionMapping into a URI string
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java?view=diff&rev=449367&r1=449366&r2=449367
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
Sat Sep 23 23:49:04 2006
@@ -31,6 +31,7 @@
import org.apache.struts2.util.PrefixTrie;
import com.opensymphony.xwork2.config.Configuration;
+import com.opensymphony.xwork2.config.ConfigurationManager;
import com.opensymphony.xwork2.config.entities.PackageConfig;
/**
@@ -204,11 +205,16 @@
/* (non-Javadoc)
* @see
org.apache.struts2.dispatcher.mapper.ActionMapper#getMapping(javax.servlet.http.HttpServletRequest)
*/
- public ActionMapping getMapping(HttpServletRequest request, Configuration
config) {
+ public ActionMapping getMapping(HttpServletRequest request,
ConfigurationManager configManager) {
ActionMapping mapping = new ActionMapping();
String uri = getUri(request);
- parseNameAndNamespace(uri, mapping, config);
+ uri = dropExtension(uri);
+ if (uri == null) {
+ return null;
+ }
+
+ parseNameAndNamespace(uri, mapping, configManager.getConfiguration());
handleSpecialParameters(request, mapping);
@@ -282,7 +288,7 @@
name = uri.substring(namespace.length() + 1);
}
mapping.setNamespace(namespace);
- mapping.setName(dropExtension(name));
+ mapping.setName(name);
}
/**
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java?view=diff&rev=449367&r1=449366&r2=449367
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/RestfulActionMapper.java
Sat Sep 23 23:49:04 2006
@@ -29,7 +29,8 @@
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.RequestUtils;
-import com.opensymphony.xwork2.config.Configuration;
+import com.opensymphony.xwork2.config.ConfigurationManager;
+
/**
* A custom action mapper using the following format:
@@ -60,7 +61,7 @@
/* (non-Javadoc)
* @see
org.apache.struts2.dispatcher.mapper.ActionMapper#getMapping(javax.servlet.http.HttpServletRequest)
*/
- public ActionMapping getMapping(HttpServletRequest request, Configuration
config) {
+ public ActionMapping getMapping(HttpServletRequest request,
ConfigurationManager configManager) {
String uri = RequestUtils.getServletPath(request);
int nextSlash = uri.indexOf('/', 1);
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java?view=diff&rev=449367&r1=449366&r2=449367
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/TagUtils.java
Sat Sep 23 23:49:04 2006
@@ -84,7 +84,7 @@
if (invocation == null) {
ActionMapper mapper = ActionMapperFactory.getMapper();
ActionMapping mapping = mapper.getMapping(request,
-
Dispatcher.getInstance().getConfigurationManager().getConfiguration());
+ Dispatcher.getInstance().getConfigurationManager());
if (mapping != null) {
return mapping.getNamespace();
Modified:
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java?view=diff&rev=449367&r1=449366&r2=449367
==============================================================================
---
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
(original)
+++
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java
Sat Sep 23 23:49:04 2006
@@ -41,7 +41,6 @@
import com.mockobjects.servlet.MockFilterChain;
import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationManager;
import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
@@ -258,7 +257,7 @@
public static class InnerActionMapper implements ActionMapper {
- public ActionMapping getMapping(HttpServletRequest request,
Configuration config) {
+ public ActionMapping getMapping(HttpServletRequest request,
ConfigurationManager config) {
return new ActionMapping();
}
@@ -268,7 +267,7 @@
}
public static class NullActionMapper implements ActionMapper {
- public ActionMapping getMapping(HttpServletRequest request,
Configuration config) {
+ public ActionMapping getMapping(HttpServletRequest request,
ConfigurationManager config) {
return null;
}
Modified:
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/NullActionMapper.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/NullActionMapper.java?view=diff&rev=449367&r1=449366&r2=449367
==============================================================================
---
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/NullActionMapper.java
(original)
+++
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/NullActionMapper.java
Sat Sep 23 23:49:04 2006
@@ -22,7 +22,8 @@
import org.apache.struts2.dispatcher.mapper.ActionMapper;
import org.apache.struts2.dispatcher.mapper.ActionMapping;
-import com.opensymphony.xwork2.config.Configuration;
+import com.opensymphony.xwork2.config.ConfigurationManager;
+
/**
* ActionMapper for testing FilterDispatcher (used in FilterDispaatcherTest)
@@ -37,7 +38,7 @@
_actionMapping = actionMappingToBeRetrned;
}
- public ActionMapping getMapping(HttpServletRequest request,
Configuration config) {
+ public ActionMapping getMapping(HttpServletRequest request,
ConfigurationManager config) {
return _actionMapping;
}
Modified:
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java?view=diff&rev=449367&r1=449366&r2=449367
==============================================================================
---
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
(original)
+++
struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
Sat Sep 23 23:49:04 2006
@@ -25,9 +25,11 @@
import org.apache.struts2.dispatcher.ServletRedirectResult;
import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest;
+import com.mockobjects.dynamic.Mock;
import com.mockobjects.servlet.MockHttpServletRequest;
import com.opensymphony.xwork2.Result;
import com.opensymphony.xwork2.config.Configuration;
+import com.opensymphony.xwork2.config.ConfigurationManager;
import com.opensymphony.xwork2.config.entities.PackageConfig;
import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
@@ -38,6 +40,7 @@
public class DefaultActionMapperTest extends StrutsTestCase {
private MockHttpServletRequest req;
+ private ConfigurationManager configManager;
private Configuration config;
protected void setUp() throws Exception {
@@ -51,6 +54,11 @@
PackageConfig pkg2 = new PackageConfig("my", "/my", false, null);
config.addPackageConfig("mvns", pkg);
config.addPackageConfig("my", pkg2);
+ configManager = new ConfigurationManager() {
+ public Configuration getConfiguration() {
+ return config;
+ }
+ };
}
public void testGetMapping() throws Exception {
@@ -61,7 +69,7 @@
req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
DefaultActionMapper mapper = new DefaultActionMapper();
- ActionMapping mapping = mapper.getMapping(req, config);
+ ActionMapping mapping = mapper.getMapping(req, configManager);
assertEquals("/my/namespace", mapping.getNamespace());
assertEquals("actionName", mapping.getName());
@@ -76,7 +84,7 @@
req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
DefaultActionMapper mapper = new DefaultActionMapper();
- ActionMapping mapping = mapper.getMapping(req, config);
+ ActionMapping mapping = mapper.getMapping(req, configManager);
assertEquals("/my/namespace", mapping.getNamespace());
assertEquals("actionName", mapping.getName());
@@ -91,7 +99,7 @@
req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
DefaultActionMapper mapper = new DefaultActionMapper();
- ActionMapping mapping = mapper.getMapping(req, config);
+ ActionMapping mapping = mapper.getMapping(req, configManager);
assertEquals("/my", mapping.getNamespace());
assertEquals("foo/actionName", mapping.getName());
@@ -106,7 +114,7 @@
req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
DefaultActionMapper mapper = new DefaultActionMapper();
- ActionMapping mapping = mapper.getMapping(req, config);
+ ActionMapping mapping = mapper.getMapping(req, configManager);
assertEquals("", mapping.getNamespace());
assertEquals("bo/foo/actionName", mapping.getName());
@@ -121,7 +129,7 @@
req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
DefaultActionMapper mapper = new DefaultActionMapper();
- ActionMapping mapping = mapper.getMapping(req, config);
+ ActionMapping mapping = mapper.getMapping(req, configManager);
assertEquals("/my/namespace/actionName.action",
mapper.getUriFromActionMapping(mapping));
}
@@ -133,7 +141,7 @@
req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
DefaultActionMapper mapper = new DefaultActionMapper();
- ActionMapping mapping = mapper.getMapping(req, config);
+ ActionMapping mapping = mapper.getMapping(req, configManager);
assertEquals("/my/namespace/actionName!add.action",
mapper.getUriFromActionMapping(mapping));
}
@@ -149,7 +157,7 @@
req.addExpectedGetAttributeName("javax.servlet.include.servlet_path");
DefaultActionMapper mapper = new DefaultActionMapper();
- ActionMapping mapping = mapper.getMapping(req, config);
+ ActionMapping mapping = mapper.getMapping(req, configManager);
assertEquals("/my/namespace", mapping.getNamespace());
assertEquals("actionName", mapping.getName());
@@ -208,7 +216,7 @@
request.setupGetServletPath("/someServletPath.action");
DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
- ActionMapping actionMapping = defaultActionMapper.getMapping(request,
config);
+ ActionMapping actionMapping = defaultActionMapper.getMapping(request,
configManager);
assertEquals(actionMapping.getName(), "myAction");
}
@@ -222,7 +230,7 @@
request.setParameterMap(parameterMap);
DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
- ActionMapping actionMapping = defaultActionMapper.getMapping(request,
config);
+ ActionMapping actionMapping = defaultActionMapper.getMapping(request,
configManager);
Result result = actionMapping.getResult();
assertNotNull(result);
@@ -240,7 +248,7 @@
request.setParameterMap(parameterMap);
DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
- ActionMapping actionMapping = defaultActionMapper.getMapping(request,
config);
+ ActionMapping actionMapping = defaultActionMapper.getMapping(request,
configManager);
Result result = actionMapping.getResult();
assertNotNull(result);