UrlRewriteFilter run element produces 404 but to e

2019-08-13 18:31发布

问题:

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:

    <rule>
      <from>^/urlIWantToMap</from>
      <to type="redirect">/WhereIWouldLikeItToGo</to>
    </rule>

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...

    <rule>
      <from>^/urlIWantToMap</from>
      <run class="mypackage.MyServletClass" method="doGet"/>
    </rule>

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):

http://greatwebguy.com/programming/java/urlrewritefilter-servlet-filter-problem-in-websphere-6105-and-greater/

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.

回答1:

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:

<run class="my.wrappers.WrapperServlet" method="doGet(HttpServletRequest, HttpServletResponse)" />