By default, web modules do not share the same classloader instance as the other modules inside of an ear. Web modules get their own, private instance of the CompoundClassLoader, which will only load classes that exist within the web module. War files have their own private classloader, ensuring that none of the other modules can peek inside the war file for classes they might need.
The classloader instance used by the web module is a sibling of the instance used by the ear. As a result, a web module can see files inside other jars in an ear. However, other modules cannot see classes inside a war. Child classloaders can see classes on the classpath of the parent. A parent cannot see classes on the classpath of a child.
Are you familiar with the concept of class loaders in general - what they do, and where it makes sense to use a special one?
In servlet containers, each web app gets its own class loader. That ensures that class "X" in web app "A" is different from class "X" in web app "B". That means, amongst other things, that any static field of class "X" you set in web app "A" is not reflected in class "X" in web app "B".