3

I need to map /Test to a servlet Test.java and also /anything/Test to the same servlet. I read that /*/Test won't work in web.xml as it doesn't accept regex.

Is there any alternate way of doing it using filters ? I can't use Tuckey URL filter due to some blockage issue. Also, I need that "anything" also in my servlet. I planned to process the url string for that if I am able to map.

For example

/ProjectName/Test Should open Test servlet

and also /ProjectName/xyz/Test Should also open Test servlet

Now xyz can be anything. And I also want to get xyz in my Test servlet. I planned to get xyz in by request.getRequestURI() and fetching it from the url.

Blakes Seven
  • 49,422
  • 14
  • 129
  • 135

1 Answers1

0

You would need a filter.

This one is a basic one that should work.

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain)
        throws IOException, ServletException {

    HttpServletRequest req = (HttpServletRequest) request;

    String url = req.getRequestURI();
    if (url.endsWith("test")) {
        request.getServletContext().getNamedDispatcher("TestServlet").forward(request, response);
    } else {
        chain.doFilter(request, response);
    }
}

Key points. I use getNamedDispatcher to get the named servlet you wish to use. It's probably best to not actually map this servlet to a pattern at all.

By using the getNamedDispatcher, it does not corrupt the request url within the destination servlet proper.

Will Hartung
  • 115,893
  • 19
  • 128
  • 203