This error generally occurs when there is a mixture of jar files and tld files from different versions of Struts. Make sure that all of these artifacts come from the same Struts download.
Also note that in Struts 1.3, the TLD files are included in the jar files, and should not be included separately. In your JSPs, you should use their namespace, not their physical location to reference them. Example:
I had this problem. Resolve: make sure that you added all required .jar-s to project.
* itext (optional, for pdf/rtf export)
He was referring to the technique used to resolve the reference to the TLDs.
"By Location" would be where the URI refers to a specific location such as "WEB-INF/lib" where the TLDs can be found; the container then need only verify the TLD exists in that location.
"By namespace" means the the URI refers to an arbitrary string value (in this case "http://struts.apache.org/tags-logic") that the TLD specifies internally; the container then has to search jars in the classpath for TLDs that define the same string as their URI. Note that this does not mean that the tag code or container ever tries to visit "http://struts.apache.org/tags-logic" - it's just used as a unique identifier, and could just as easily have been "HamSandwich" if that's what the tag developer chose.
A benefit of "By Namespace" is that you can move your tag libraries around and not have to go back and change all your taglib directives.