8
votes

I'd like to specify a Servlet URL pattern to match a URL that ends with a slash ("/") and only a slash.

I understand that the pattern

    /example/path/*

will match a URL of

    http://example.com/example/path/

and that this appears to work. However, that same pattern would also match URLs of

    http://example.com/example/path/a/
    http://example.com/example/path/b/
    http://example.com/example/path/c/

I'm merely looking for a URL pattern that will match http://example.com/example/path/ only without also matching http://example.com/example/path/a/ and so on.

Clarification: a URL pattern ending with a slash is not allowed.

2
Have you tried without the trailing star ? Eg /example/mP.
Yes, I've already tried this. NetBeans tells me a URL pattern ending with a slash is not allowed.Jon Cram

2 Answers

8
votes

It's quite possible that you can't do this by mapping in web.xml.

What you can do is to map servlet to /mypath/* and then check part after /mypath/ via request.getPathInto(). If it is "/", run your code. If it isn't, return 404 error.

1
votes

In NetBeans, if I go to the Servlets tab on the web.xml file, the IDE would complain with, "Error: URL patterns cannot end with slash (/)". From the URL spec, it reads,

httpurl        = "http://" hostport [ "/" hpath [ "?" search ]]
hpath          = hsegment *[ "/" hsegment ]

So yes, an URI with an ending slash is invalid.