260 likes | 277 Views
Delve into Tomcat's inner workings, from Java EE components to Servlet Container interactions. Understand advanced Java class loading principles and explore web application class loading. Discover key containment structures and Tomcat-specific configurations.
E N D
Introductions • Two decades in software development • Software Engineering Solutions, Inc. www.swengsol.com • Technical Reviewer: Core JavaServer Faces 3rd Edition • “Top 1000” reviewer at Amazon.com.
Why another Tomcat book? • Current focus is on administrators • Tend to view Tomcat as a black box • Exactly HOW does it do what it does?
Pieces of the Puzzle • Java EE • HTML over HTTP • Servlet Container.
Uniform Resource Locators context path servlet path path info query string path parameters scheme host port http:// www.swengsol.com :80 /myWebApp ?id=x123 ;jsessionid=… /invoices/EditInvoice /adobe
Servlet Specification • WAR file format • Servlet • Filter • Listener • Session • web.xml
The Tomcat Servlet Container Nested Components Top Level Components Containers Connectors
Container Overview • A valve: • Extends Tomcat functionality • Is Tomcat-specific • Must be super-efficient Note the shading … Pipeline pattern Context helpers our “baby server”
Containment: Server and Service Protocol-specific processing Protocol-agnostic processing <Server port="8005" shutdown="SHUTDOWN"> <Service name="Catalina">
Containment: Connectors <Connector port="80" protocol="HTTP/1.1" … />
Containment: Catalina Engine <Engine name="Catalina" defaultHost="localhost” baseDir=“…”> … </Engine>
Containment: Virtual Host • Each FQHN resolves to a specific IP address • Needs dedicated IP addresses IP-based
Containment: Virtual Host • Multiple FQHNs resolve to a single IP address • Host: request header interrogated • Simple but requires help with SSL Name-based
Containment: Virtual Host Relative to CATALINA_BASE <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" … >
Containment: Context Vendor-agnostic Vendor-specific <Context path="/examples" ...> Relative to appBase Context Fragment locations: META-INF/context.xml CATALINA_HOME/conf/<EngineName>/<HostName>/<contextPath>.xml
Advanced Topics: Java Class Loading First Principles • Benefits • Late Binding (assembly of functionality) • Security (single choke point) • Customization (encrypt, generate, locate) • Variance across Time • Variance across Space • Isolation Zones
Advanced Topics: Java Class Loading First Principles • Rules • Consistency (always return same instance) • Delegation (security) • Visibility (Delegation hierarchy + CL inversion)
Advanced Topics: Java Class Loading First Principles • Available Options • Implicit class loading:MyClass myClass = new MyClass() • Explicit class loading:ClassLoader ldr = ClassLoader.getSystemClassLoader();Class cls = ldr.loadClass("MyClass");MyClass myClass = (MyClass) cls.newInstance();
Advanced Topics: Java Class Loading • Lets you override core JDK classes • JAVA_HOME/lib/endorsed • No parent • Native code in JVM • Core Java classes from rt.jar • JRE_HOME/jre/lib/ext(implicit CLASSPATH) • Classes on CLASSPATH • Truncated by Tomcat • CATALINA_HOME/lib • Visible to web apps and Tomcat code • Directory configured in [catalina.properties] • Visible only to Tomcat code • Directory configured in catalina.properties • Visible to all web apps • WEB-INF/classes and WEB-INF/lib • Delegates to parent for standard Java classes
Advanced Topics: Web Application Class Loading [1] [3] [2]
Thank You! • damodarchetty@gmail.com • www.swengsol.com • 651 270 8457for training/consulting opportunities.