The Container searches for tag files in four locations. A tag file MUST have a TLD if it’s deployed in a JAR, but if it’s put directly into the web app (in “WEB-INF/tags” or a sub-directory), it does not need a TLD.
Directly inside WEB-INF/tags
Inside a sub-directory of WEB-INF/tags
Inside the META-INF/tags directory inside a JAR file that’s inside WEB-INF/lib
Inside a sub-directory of META-INF/tags inside a JAR file that’s inside WEB-INF/lib
IF the tag file is deployed in a JAR, there MUST be a TLD for the tag file.