I'm using the UrlRewriteFilter library in order to avoid having to write my own url filter.
I'm pretty sure that I have things set up properly, because when I have this in my url rewrite xml:
^/urlIWantToMap
/WhereIWouldLikeItToGo
It seems to work fine (as in, hitting http://localhost:8080/urlIWantToMap sends me to the intended location). Note that I had to add the servlet mapping to my web.xml.
If I try this though...
^/urlIWantToMap
I get an http 404. I think it is the same kind of problem described here (even though I'm suspicious on the solution/resolution the author comes to):
I can see this happening if there were some kind of change to web filter behavior that would inhibit UrlRewriteFilter from calling into the servlet. Either that; or I'm making a blatant mistake I'm not seeing.
解决方案
Do you see something like this when the application server starts?
INFO: org.tuckey.web.filters.urlrewrite.Run ERROR: could not find method with the name doGet on mypackage.MyServletClass
Even if you don't, does a public method doGet exist without any parameters? In my case it was protected, and while http://localhost:8080/MyProject/rewrite-status told me everthing was fine, I still got a 404.
I had to create a wrapper method to make doGet public and configure urlrewrite.xml like this: