You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mr...@apache.org on 2007/09/08 09:07:49 UTC

svn commit: r573790 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/dispatcher/mapper/ main/resources/org/apache/struts2/ test/java/org/apache/struts2/dispatcher/ test/java/org/apache/struts2/dispatcher/mapper/

Author: mrdon
Date: Sat Sep  8 00:07:48 2007
New Revision: 573790

URL: http://svn.apache.org/viewvc?rev=573790&view=rev
Log:
Make it possible to access actions without an extension
WW-2163

Modified:
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
    struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.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/dispatcher/mapper/DefaultActionMapper.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java?rev=573790&r1=573789&r2=573790&view=diff
==============================================================================
--- 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  8 00:07:48 2007
@@ -22,11 +22,14 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Scanner;
 import java.util.Set;
+import java.util.StringTokenizer;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -178,7 +181,7 @@
 
     protected PrefixTrie prefixTrie = null;
     
-    protected List extensions = new ArrayList() {{ add("action");}};
+    protected List<String> extensions = new ArrayList<String>() {{ add("action"); add("");}};
 
     protected  Container container;
 
@@ -270,7 +273,12 @@
     @Inject(StrutsConstants.STRUTS_ACTION_EXTENSION)
     public void setExtensions(String extensions) {
         if (!"".equals(extensions)) {
-            this.extensions = Arrays.asList(extensions.split(","));
+            List<String> list = new ArrayList<String>();
+            Scanner scanner = new Scanner(extensions).useDelimiter(",");
+            while (scanner.hasNext()) {
+                list.add(scanner.next());
+            }
+            this.extensions = Collections.unmodifiableList(list);
         } else {
             this.extensions = null;
         }
@@ -414,13 +422,18 @@
         if (extensions == null) {
             return name;
         }
-        Iterator it = extensions.iterator();
-        while (it.hasNext()) {
-            String extension = "." + (String) it.next();
-            if (name.endsWith(extension)) {
-                name = name.substring(0, name.length() - extension.length());
-                return name;
-            }
+        for (String ext : extensions) {
+            if ("".equals(ext)) {
+                if (name.indexOf('.') == -1) {
+                    return name;
+                }
+            } else {
+                String extension = "." + ext;
+                if (name.endsWith(extension)) {
+                    name = name.substring(0, name.length() - extension.length());
+                    return name;
+                }
+            } 
         }
         return null;
     }

Modified: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties?rev=573790&r1=573789&r2=573790&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties (original)
+++ struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties Sat Sep  8 00:07:48 2007
@@ -73,7 +73,9 @@
 
 ### Used by the DefaultActionMapper
 ### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
-struts.action.extension=action
+### The blank extension allows you to match directory listings as well as pure action names
+### without interfering with static resources.
+struts.action.extension=action,,
 
 ### Used by FilterDispatcher
 ### If true then Struts serves static content from inside its jar. 

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?rev=573790&r1=573789&r2=573790&view=diff
==============================================================================
--- 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  8 00:07:48 2007
@@ -132,8 +132,8 @@
                 return _dispatcher;
             }
         };
-        filter.setActionMapper(null);
         filter.init(filterConfig);
+        filter.setActionMapper(null);
         filter.doFilter(req, res, chain);
 
         assertFalse(_dispatcher.serviceRequest);

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?rev=573790&r1=573789&r2=573790&view=diff
==============================================================================
--- 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  8 00:07:48 2007
@@ -411,6 +411,17 @@
         assertTrue("Name not right: "+name, "foo.action".equals(name));
 
     }
+    
+    public void testDropExtensionWhenBlank() throws Exception {
+        DefaultActionMapper mapper = new DefaultActionMapper();
+        mapper.setExtensions("action,,");
+        String name = mapper.dropExtension("foo.action");
+        assertTrue("Name not right: "+name, "foo".equals(name));
+        name = mapper.dropExtension("foo");
+        assertTrue("Name not right: "+name, "foo".equals(name));
+        assertNull(mapper.dropExtension("foo.bar"));
+        assertNull(mapper.dropExtension("foo."));
+    }
 
     public void testGetUriFromActionMapper1() throws Exception {
         DefaultActionMapper mapper = new DefaultActionMapper();