Mathew
Just adding to what Raji has said, the JSP engine builds a taglib mapping from <taglib> mappings in the deployment descriptor, as well as <uri> mappings in any jar'd taglib descriptors. For taglib descriptors, the uri is specified in the <uri> tag, and the location is the physical location of the .tld file.
When the url is requested, and the engine fails to find a match in it's taglib map, then it tries to resolve the location based on the format of the requested url. If the requested url is absolute, however, then a compile-time error is thrown.
So...
The taglib uri can be anything you want, but if a match is not found, and the requested url was absolute, then an error is thrown.
Hope this helps, 'coz I've just read it back to myself and realised that I haven't added much value to what Raji has already said