Add 'static' indicator near start of URL for static resources to allow fast 
detection by filters
------------------------------------------------------------------------------------------------

                 Key: WICKET-4343
                 URL: https://issues.apache.org/jira/browse/WICKET-4343
             Project: Wicket
          Issue Type: Improvement
          Components: wicket
    Affects Versions: 1.5.4
         Environment: Any
            Reporter: Chris Colman
            Priority: Minor


While it is possible to affect the 'prefix' of static package resource URLs 
this prefix appears near the end of the URL, after the namespace, resource 
identifier, full path name and class name. Adding a prefix towards the end of 
the URL that distinguishes static resources so that third party filters can 
detect them and avoid establishing a session means each filter needs to perform 
full scan of every URL it receives to test if the 'prefix' is present.

It's substantially quicker to test the first few chars of a URL string for a 
match with 'startsWith' than it is to iterate through to almost the end of each 
URL string to see if it 'contains' a substring. Any URL will fail to match on 
comparison of the first character if they don't have a 'w' (to match 
wicket/resource) at the beginning which makes startsWith a 'fast fail' test for 
most URLs it processes.

I think that's probably why the Servlet Spec chooses to do filter and servlet 
path matching via a 'starts with' strategy without support for wildcards except 
at the very end of a pattern.

Many of the URLs requested are very long and it would be preferable if wicket 
and third party filters could avoid string parsing of many thousands of super 
long URLs wherever they can - there's already enough of that going on without 
adding to the CPU's work load.

Looking at the code it would probably be easy to do in 
BasicResourceReferenceMapper.java.

Maybe to not disturb the number of segments used for resources it could be less 
invasive to change the start path of resources guaranteed to be 
stateless/static (not requiring a session to service requests for) it could 
simply replace the second segment provided by the getResourceIdentifier() so 
that the path ends up as

/wicket/static-resource 

if static and

/wicket/resource

if not static.

Perhaps getResourceHandler could take boolean static parameter.




--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to