Mihalakakos, Demetri wrote:
Hi,

I have a question about the best way of doing something.

I'm writing an application where all requests would get routed to a Filter (mapping: 
"/*").  So when I get a requests like "/some/page/in/the/web/" (which does not 
actually live in the file system) I would forward to a Servlet or handle appropriately.  The 
problem is all web resources are being routed there as well (js, css, images), is it possible to 
have all files and folders that do exist on the file system get served normally and not through my 
Filter.  I know I can do a simple io check in the filter, but I was wondering if that's actually 
the best/only way (one of my concerns is optimization)

For example in PHP or Python I would put something like this in the vhost: 
(which is technically happening out side the application)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [L]

Also I prefer not use 'Apache httpd' with 'tomcat'


I don't know what the precise point of your filter is, but
I'll give you a slightly different answer than Pid's :

Essentially it goes "there is no such thing as a free lunch".

The "RewriteCond .. !-f" Apache directives you are using above, also mean that /something/ will have to go check if that file exists. Is is probably better to ask the server to do that if possible, rather than having your own code do it; that's just because the server code is likely to be more optimised and bug-free than yours.
But it will mean some disk accesses anyway.

Maybe a better method would consist in :
1) making sure that you use all possibilities of server and browser to insure that the browser will cache stuff like stylesheets, js and images. This way the browser will only really request them when needed. (Honestly, I do not know if that happens in Tomcat, or at what level it happens; but we can certainly revisit this subject with the luminaries on this forum).

2) try to organise the files on your site, in such a way that you can detect in your filter, by the URL alone, what is supposed to be static content and what not. For example, if all your javascript libraries were stored in directories whose path contains "/js/", then your filter would know right away what to let pass or not.

After writing the above, I realise that this is what the "default servlet" is supposedly for : catching all requests which do not explicitly match other servlet url-matching expressions. But the syntax used for this URL-matching, according to the Servlet Spec, may not be the easiest to manipulate for that.
So maybe your servlet filter would still have a role there.

And of course if the purpose of your filter is precisely to return a "smart" answer in the case a file does not exist, then that will not satisfy you.



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to