| <!DOCTYPE html> |
| |
| |
| <!-- |
| | Generated by Apache Maven Doxia Site Renderer 2.0.0 from src/site/xdoc/docs/tomcat-http2-integration-guide.xml at 2026-05-18 |
| | Rendered using Apache Maven Fluido Skin 2.0.0-M11 |
| --> |
| <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> |
| <head> |
| <meta charset="UTF-8" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1" /> |
| <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" /> |
| <title>Apache Tomcat 11 + Axis2 HTTP/2 Integration Guide - Production-Ready Configuration – Apache Axis2</title> |
| <link rel="stylesheet" href="../css/apache-maven-fluido-2.0.0-M11.min.css" /> |
| <link rel="stylesheet" href="../css/site.css" /> |
| <link rel="stylesheet" href="../css/print.css" media="print" /> |
| <script src="../js/apache-maven-fluido-2.0.0-M11.min.js"></script> |
| </head> |
| <body> |
| <div class="container-fluid container-fluid-top"> |
| <header> |
| <div id="banner"> |
| <div class="pull-left"><div id="bannerLeft"><h1><a href="https://www.apache.org/"><img class="class java.lang.Object" src="https://www.apache.org/images/asf_logo_wide.png" /> Apache Axis2</a></h1></div></div> |
| <div class="pull-right"><div id="bannerRight"><h1><a href="https://axis.apache.org/axis2/java/core/"><img class="class java.lang.Object" src="https://axis.apache.org/axis2/java/core/images/axis.jpg" /></a></h1></div></div> |
| <div class="clear"><hr/></div> |
| </div> |
| |
| <div id="breadcrumbs"> |
| <ul class="breadcrumb"> |
| <li id="publishDate">Last Published: 2026-05-17<span class="divider">|</span> |
| </li> |
| <li id="projectVersion">Version: 2.0.1<span class="divider">|</span></li> |
| <li><a href="https://www.apache.org" class="externalLink">Apache</a><span class="divider">/</span></li> |
| <li><a href="../index.html">Axis2/Java</a><span class="divider">/</span></li> |
| <li class="active">Apache Tomcat 11 + Axis2 HTTP/2 Integration Guide - Production-Ready Configuration</li> |
| </ul> |
| </div> |
| </header> |
| <div class="row-fluid"> |
| <header id="leftColumn" class="span2"> |
| <nav class="well sidebar-nav"> |
| <ul class="nav nav-list"> |
| <li class="nav-header">Axis2/Java</li> |
| <li><a href="../index.html">Home</a></li> |
| <li><a href="../download.html">Downloads</a></li> |
| <li><a href="javascript:void(0)"><span class="icon-chevron-down"></span>Release Notes</a> |
| <ul class="nav nav-list"> |
| <li><a href="../release-notes/1.6.1.html">1.6.1</a></li> |
| <li><a href="../release-notes/1.6.2.html">1.6.2</a></li> |
| <li><a href="../release-notes/1.6.3.html">1.6.3</a></li> |
| <li><a href="../release-notes/1.6.4.html">1.6.4</a></li> |
| <li><a href="../release-notes/1.7.0.html">1.7.0</a></li> |
| <li><a href="../release-notes/1.7.1.html">1.7.1</a></li> |
| <li><a href="../release-notes/1.7.2.html">1.7.2</a></li> |
| <li><a href="../release-notes/1.7.3.html">1.7.3</a></li> |
| <li><a href="../release-notes/1.7.4.html">1.7.4</a></li> |
| <li><a href="../release-notes/1.7.5.html">1.7.5</a></li> |
| <li><a href="../release-notes/1.7.6.html">1.7.6</a></li> |
| <li><a href="../release-notes/1.7.7.html">1.7.7</a></li> |
| <li><a href="../release-notes/1.7.8.html">1.7.8</a></li> |
| <li><a href="../release-notes/1.7.9.html">1.7.9</a></li> |
| <li><a href="../release-notes/1.8.0.html">1.8.0</a></li> |
| <li><a href="../release-notes/1.8.1.html">1.8.1</a></li> |
| <li><a href="../release-notes/1.8.2.html">1.8.2</a></li> |
| <li><a href="../release-notes/2.0.0.html">2.0.0</a></li> |
| <li><a href="../release-notes/2.0.1.html">2.0.1</a></li> |
| </ul></li> |
| <li><a href="../modules/index.html">Modules</a></li> |
| <li><a href="../tools/index.html">Tools</a></li> |
| <li class="nav-header">Documentation</li> |
| <li><a href="../docs/toc.html">Table of Contents</a></li> |
| <li><a href="../docs/installationguide.html">Installation Guide</a></li> |
| <li><a href="../docs/quickstartguide.html">QuickStart Guide</a></li> |
| <li><a href="../docs/userguide.html">User Guide</a></li> |
| <li><a href="../docs/jaxws-guide.html">JAXWS Guide</a></li> |
| <li><a href="../docs/pojoguide.html">POJO Guide</a></li> |
| <li><a href="../docs/spring.html">Spring Guide</a></li> |
| <li><a href="../docs/webadminguide.html">Web Administrator's Guide</a></li> |
| <li><a href="../docs/migration.html">Migration Guide (from Axis1)</a></li> |
| <li class="nav-header">Resources</li> |
| <li><a href="../faq.html">FAQ</a></li> |
| <li><a href="https://github.com/apache/axis-axis2-java-core" class="externalLink">Source Code</a></li> |
| <li class="nav-header">Get Involved</li> |
| <li><a href="../overview.html">Overview</a></li> |
| <li><a href="../mail-lists.html">Mailing Lists</a></li> |
| <li><a href="../release-process.html">Release Process</a></li> |
| <li><a href="../guidelines.html">Developer Guidelines</a></li> |
| <li><a href="../siteHowTo.html">Build the Site</a></li> |
| <li class="nav-header">Project Information</li> |
| <li><a href="https://github.com/apache/axis-axis2-java-core/graphs/contributors" class="externalLink">Contributors</a></li> |
| <li><a href="https://issues.apache.org/jira/projects/AXIS2/issues" class="externalLink">Issues</a></li> |
| <li class="nav-header">Apache</li> |
| <li><a href="https://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink">License</a></li> |
| <li><a href="https://www.apache.org/foundation/sponsorship.html" class="externalLink">Sponsorship</a></li> |
| <li><a href="https://www.apache.org/foundation/thanks.html" class="externalLink">Thanks</a></li> |
| <li><a href="https://www.apache.org/security/" class="externalLink">Security</a></li> |
| </ul> |
| </nav> |
| <div class="well sidebar-nav"> |
| <div id="poweredBy"> |
| <div class="clear"></div> |
| <div class="clear"></div> |
| <a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" /></a> |
| </div> |
| </div> |
| </header> |
| <main id="bodyColumn" class="span10"> |
| |
| |
| |
| <section><a id="Apache_Tomcat_11_.2B_Axis2_HTTP.2F2_Integration_Guide"></a> |
| <h1>Apache Tomcat 11 + Axis2 HTTP/2 Integration Guide</h1> |
| |
| |
| <div style="background-color: #e8f5e8; border: 1px solid #4CAF50; padding: 15px; margin: 10px 0;"> |
| <section><section><section><a id="a.3F.3F_Apache_Tomcat_11_HTTP.2F2_-_Excellent_Support_with_Simplified_Configuration"></a> |
| <h4>🚀 Apache Tomcat 11 HTTP/2 - Excellent Support with Simplified Configuration</h4> |
| |
| </section></section></section><section><a id="Tomcat_11_HTTP.2F2_Configuration_.28Production-Optimized.29"></a> |
| <h2>Tomcat 11 HTTP/2 Configuration (Production-Optimized)</h2> |
| |
| <section><a id="a1._Complete_server.xml_HTTP.2F2_Configuration"></a> |
| <h3>1. Complete server.xml HTTP/2 Configuration</h3> |
| |
| |
| <pre> |
| <!-- Apache Tomcat 11 - HTTP/2 Optimized Configuration --> |
| <!-- Aligned with Axis2 Enhanced Moshi H2 Processing --> |
| |
| <Server port="8005" shutdown="SHUTDOWN"> |
| |
| <!-- Global Naming Resources --> |
| <GlobalNamingResources> |
| <Resource name="UserDatabase" auth="Container" |
| type="org.apache.catalina.UserDatabase" |
| description="User database that can be updated and saved" |
| factory="org.apache.catalina.users.MemoryUserDatabaseFactory" |
| pathname="conf/tomcat-users.xml" /> |
| </GlobalNamingResources> |
| |
| <!-- Thread Pool for HTTP/2 Optimization --> |
| <!-- Aligned with Axis2 Enhanced Moshi H2 async processing --> |
| <Service name="Catalina"> |
| |
| <!-- HTTP/2 Thread Pool Configuration --> |
| <Executor name="tomcatThreadPool" |
| namePrefix="catalina-exec-" |
| maxThreads="200" <!-- Matches HTTP/2 concurrent streams --> |
| minSpareThreads="20" |
| maxIdleTime="600000" <!-- 10 minutes --> |
| prestartminSpareThreads="true" /> |
| |
| <!-- HTTP Connector with HTTP/2 Upgrade --> |
| <Connector executor="tomcatThreadPool" |
| port="8080" |
| protocol="HTTP/1.1" |
| redirectPort="8443" |
| maxPostSize="104857600" <!-- 100MB for large JSON payloads --> |
| connectionTimeout="300000" <!-- 5 minutes for large payload processing --> |
| keepAliveTimeout="300000" <!-- Keep-alive for performance --> |
| maxKeepAliveRequests="1000" <!-- High keep-alive for HTTP/2 benefits --> |
| compression="on" <!-- JSON compression --> |
| compressionMinSize="2048" <!-- Compress >2KB JSON --> |
| noCompressionUserAgents="gozilla, traviata" |
| compressableMimeType="application/json,application/xml,text/html,text/xml,text/plain,application/javascript,text/css" /> |
| |
| <!-- HTTPS Connector with Native HTTP/2 Support --> |
| <!-- PRODUCTION-OPTIMIZED: Native HTTP/2 implementation --> |
| <Connector executor="tomcatThreadPool" |
| port="8443" |
| protocol="org.apache.coyote.http11.Http11AprProtocol" |
| maxPostSize="104857600" <!-- 100MB for large JSON --> |
| SSLEnabled="true" |
| scheme="https" |
| secure="true" |
| connectionTimeout="300000" <!-- 5 minutes --> |
| keepAliveTimeout="300000" <!-- Persistent connections --> |
| |
| <!-- HTTP/2 Configuration Parameters --> |
| <!-- ALIGNED: Buffer sizes match Enhanced Moshi H2 --> |
| upgradeAsyncTimeout="300000" <!-- HTTP/2 upgrade timeout --> |
| http2MaxConcurrentStreams="200" <!-- High concurrency --> |
| http2InitialWindowSize="2097152" <!-- 2MB: avoids flow-control round trips --> |
| http2MaxFrameSize="32768" <!-- 32KB - aligned with buffer management --> |
| http2MaxHeaderTableSize="8192" <!-- 8KB header table --> |
| http2MaxHeaderListSize="32768" <!-- 32KB header list --> |
| http2EnablePush="false" <!-- Disabled for web services --> |
| |
| <!-- SSL Configuration --> |
| SSLCertificateFile="/path/to/your/certificate.crt" |
| SSLCertificateKeyFile="/path/to/your/private.key" |
| SSLCertificateChainFile="/path/to/your/chain.crt" |
| SSLProtocol="TLSv1.2+TLSv1.3" <!-- Modern TLS for HTTP/2 --> |
| SSLCipherSuite="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384" |
| SSLHonorCipherOrder="true" |
| |
| <!-- JSON Processing Optimization --> |
| compression="on" |
| compressionMinSize="2048" |
| compressableMimeType="application/json,application/xml" /> |
| |
| <!-- Engine Configuration --> |
| <Engine name="Catalina" defaultHost="localhost"> |
| |
| <!-- Host Configuration with HTTP/2 Access Logging --> |
| <Host name="localhost" |
| appBase="webapps" |
| unpackWARs="true" |
| autoDeploy="true"> |
| |
| <!-- HTTP/2 + JSON Performance Access Log --> |
| <Valve className="org.apache.catalina.valves.AccessLogValve" |
| directory="logs" |
| prefix="axis2_http2_access_log" |
| suffix=".txt" |
| pattern="%h %l %u %t "%r" %s %b %D Protocol:%{org.apache.coyote.request.protocol}r JSON-Size:%{Content-Length}o Time:%T" |
| resolveHosts="false" /> |
| |
| <!-- JSON Compression for Axis2 Responses --> |
| <Context> |
| <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" /> |
| </Context> |
| |
| </Host> |
| </Engine> |
| </Service> |
| </Server> |
| </pre> |
| |
| </section><section><a id="a2._Key_Configuration_Highlights"></a> |
| <h3>2. Key Configuration Highlights</h3> |
| |
| |
| <table class="bodyTableBorder"> |
| |
| <tr class="a"> |
| <th>Parameter</th> |
| <th>Tomcat 11 Value</th> |
| <th>Optimization Purpose</th> |
| <th>WildFly Equivalent</th></tr> |
| |
| <tr class="b"> |
| <td><strong>http2MaxConcurrentStreams</strong></td> |
| <td>200</td> |
| <td>High multiplexing for large JSON APIs</td> |
| <td>http2-max-concurrent-streams="200"</td></tr> |
| |
| <tr class="a"> |
| <td><strong>http2InitialWindowSize</strong></td> |
| <td>2097152 (2MB)</td> |
| <td>Avoids flow-control round trips on large responses</td> |
| <td>http2-initial-window-size="2097152"</td></tr> |
| |
| <tr class="b"> |
| <td><strong>http2MaxFrameSize</strong></td> |
| <td>32768 (32KB)</td> |
| <td>Optimal for JSON streaming</td> |
| <td>http2-max-frame-size="32768"</td></tr> |
| |
| <tr class="a"> |
| <td><strong>maxPostSize</strong></td> |
| <td>104857600 (100MB)</td> |
| <td>Large JSON payload support</td> |
| <td>max-post-size="104857600"</td></tr> |
| |
| <tr class="b"> |
| <td><strong>connectionTimeout</strong></td> |
| <td>300000 (5min)</td> |
| <td>Large payload processing time</td> |
| <td>no-request-timeout="300000"</td></tr> |
| |
| <tr class="a"> |
| <td><strong>http2EnablePush</strong></td> |
| <td>false</td> |
| <td>Disabled for web services</td> |
| <td>http2-enable-push="false"</td></tr> |
| </table> |
| |
| </section></section><section><a id="Axis2_Integration_Configuration"></a> |
| <h2>Axis2 Integration Configuration</h2> |
| |
| <section><a id="a1._Enhanced_axis2.xml_for_Tomcat_HTTP.2F2"></a> |
| <h3>1. Enhanced axis2.xml for Tomcat HTTP/2</h3> |
| |
| |
| <pre> |
| <!-- axis2.xml - Tomcat 11 + HTTP/2 + Enhanced Moshi H2 Configuration --> |
| <axisconfig name="AxisJava2.0-Tomcat11-HTTP2-EnhancedMoshiH2"> |
| |
| <!-- JSON processing mode and Tomcat HTTP/2 tuning are configured in |
| Tomcat's server.xml (compression, keep-alive, buffer sizes, etc.), |
| not in axis2.xml. Use the standard JSON message builder below. --> |
| |
| <!-- Enhanced JSON Message Builder --> |
| <messageBuilder contentType="application/json" |
| class="org.apache.axis2.json.moshih2.EnhancedMoshiJsonBuilder"/> |
| |
| <!-- Enhanced JSON Message Formatter --> |
| <messageFormatter contentType="application/json" |
| class="org.apache.axis2.json.moshih2.EnhancedMoshiJsonFormatter"/> |
| |
| <!-- HTTP/1.1 Transport (Fallback) --> |
| <transportSender name="http" |
| class="org.apache.axis2.transport.http.impl.httpclient5.HTTPClient5TransportSender"> |
| <parameter name="PROTOCOL">HTTP/1.1</parameter> |
| </transportSender> |
| |
| <!-- HTTP/2 Transport (Coordinated with Tomcat 11) --> |
| <transportSender name="h2" |
| class="org.apache.axis2.transport.h2.impl.httpclient5.H2TransportSender"> |
| <parameter name="PROTOCOL">HTTP/2.0</parameter> |
| |
| <!-- Coordination with Tomcat 11 HTTP/2 --> |
| <parameter name="maxConcurrentStreams">200</parameter> <!-- Matches Tomcat --> |
| <parameter name="initialWindowSize">2097152</parameter> <!-- 2MB: avoids flow-control round trips --> |
| <parameter name="maxFrameSize">32768</parameter> <!-- 32KB - matches Tomcat --> |
| <parameter name="maxConnectionsTotal">50</parameter> |
| <parameter name="maxConnectionsPerRoute">10</parameter> |
| <parameter name="connectionTimeout">60000</parameter> <!-- 1 minute connection --> |
| <parameter name="responseTimeout">300000</parameter> <!-- 5min response timeout --> |
| |
| <!-- JSON streaming and compression are handled by the message formatter |
| and Tomcat's server.xml respectively — no additional transport |
| sender parameters are needed for Moshi or Tomcat integration. --> |
| </transportSender> |
| |
| </axisconfig> |
| </pre> |
| |
| </section></section><section><a id="Advanced_Configuration_Options"></a> |
| <h2>Advanced Configuration Options</h2> |
| |
| <section><a id="a1._SSL.2FTLS_Certificate_Setup"></a> |
| <h3>1. SSL/TLS Certificate Setup</h3> |
| |
| |
| <p><strong>Tomcat 11 simplifies SSL setup compared to WildFly</strong>:</p> |
| |
| <section><a id="Option_A.3A_APR.2FNative_SSL_.28Recommended_for_Production.29"></a> |
| <h4>Option A: APR/Native SSL (Recommended for Production)</h4> |
| |
| <pre> |
| # Install Tomcat Native Library (Ubuntu/Debian) |
| sudo apt-get install libtcnative-1 openssl-dev |
| |
| # Certificate configuration in server.xml |
| SSLCertificateFile="/etc/ssl/certs/your-domain.crt" |
| SSLCertificateKeyFile="/etc/ssl/private/your-domain.key" |
| SSLCertificateChainFile="/etc/ssl/certs/chain.crt" |
| </pre> |
| |
| </section><section><a id="Option_B.3A_Java_KeyStore_SSL"></a> |
| <h4>Option B: Java KeyStore SSL</h4> |
| |
| <pre> |
| # Generate keystore |
| keytool -genkeypair -keyalg RSA -keysize 2048 -keystore tomcat-keystore.jks \ |
| -alias tomcat -dname "CN=your-domain.com,OU=IT,O=YourOrg,C=US" |
| |
| # Server.xml configuration |
| <Connector port="8443" |
| protocol="org.apache.coyote.http11.Http11NioProtocol" |
| maxPostSize="104857600" |
| SSLEnabled="true" |
| keystoreFile="/path/to/tomcat-keystore.jks" |
| keystorePass="your-password" |
| keyAlias="tomcat" /> |
| </pre> |
| |
| </section></section><section><a id="a2._Memory_Optimization_for_HTTP.2F2_.2B_JSON_Processing"></a> |
| <h3>2. Memory Optimization for HTTP/2 + JSON Processing</h3> |
| |
| <section><a id="JVM_Memory_Settings_.28catalina.sh.29"></a> |
| <h4>JVM Memory Settings (catalina.sh)</h4> |
| |
| <pre> |
| # Memory-optimized JVM settings for HTTP/2 + Enhanced Moshi H2 |
| export CATALINA_OPTS="$CATALINA_OPTS -Xms2048m -Xmx4096m" |
| export CATALINA_OPTS="$CATALINA_OPTS -XX:+UseG1GC" |
| export CATALINA_OPTS="$CATALINA_OPTS -XX:MaxGCPauseMillis=200" |
| export CATALINA_OPTS="$CATALINA_OPTS -XX:G1HeapRegionSize=16m" |
| |
| # HTTP/2 Connection Pool Optimization |
| export CATALINA_OPTS="$CATALINA_OPTS -Djava.net.preferIPv6Addresses=false" |
| export CATALINA_OPTS="$CATALINA_OPTS -Dorg.apache.coyote.http2.Http2Protocol.maxConcurrentStreams=200" |
| |
| # Enhanced Moshi H2 Optimization |
| export CATALINA_OPTS="$CATALINA_OPTS -Daxis2.json.moshi.h2.enabled=true" |
| export CATALINA_OPTS="$CATALINA_OPTS -Daxis2.json.moshi.h2.async.threshold=1048576" |
| </pre> |
| |
| </section></section><section><a id="a3._Production_Monitoring_Configuration"></a> |
| <h3>3. Production Monitoring Configuration</h3> |
| |
| <section><a id="Enhanced_Access_Logging"></a> |
| <h4>Enhanced Access Logging</h4> |
| |
| <pre> |
| <!-- HTTP/2 + JSON Performance Monitoring --> |
| <Valve className="org.apache.catalina.valves.AccessLogValve" |
| directory="logs" |
| prefix="http2_performance" |
| suffix=".log" |
| pattern="%h %u %t "%r" %s %b %D Protocol:%{org.apache.coyote.request.protocol}r |
| Streams:%{http2.concurrent.streams}r |
| JSON-Size:%{Content-Length}o |
| Moshi-Processing:%{X-Moshi-H2-Processing-Time}o |
| Compression:%{Accept-Encoding}i" /> |
| </pre> |
| |
| </section></section></section><section><a id="Production_Deployment_Guide"></a> |
| <h2>Production Deployment Guide</h2> |
| |
| <section><a id="a1._Step-by-Step_Deployment"></a> |
| <h3>1. Step-by-Step Deployment</h3> |
| |
| <section><a id="Step_1.3A_Install_Tomcat_11"></a> |
| <h4>Step 1: Install Tomcat 11</h4> |
| |
| <pre> |
| # Download and extract Tomcat 11 |
| cd /opt |
| sudo wget https://downloads.apache.org/tomcat/tomcat-11/v11.0.x/bin/apache-tomcat-11.0.x.tar.gz |
| sudo tar -xzf apache-tomcat-11.0.x.tar.gz |
| sudo mv apache-tomcat-11.0.x tomcat11 |
| sudo chown -R tomcat:tomcat /opt/tomcat11 |
| </pre> |
| |
| </section><section><a id="Step_2.3A_Configure_HTTP.2F2_.28Replace_server.xml.29"></a> |
| <h4>Step 2: Configure HTTP/2 (Replace server.xml)</h4> |
| |
| <pre> |
| # Backup original configuration |
| sudo cp /opt/tomcat11/conf/server.xml /opt/tomcat11/conf/server.xml.backup |
| |
| # Apply HTTP/2 optimized configuration (use the server.xml above) |
| sudo nano /opt/tomcat11/conf/server.xml |
| </pre> |
| |
| </section><section><a id="Step_3.3A_Deploy_Axis2_with_Enhanced_Moshi_H2"></a> |
| <h4>Step 3: Deploy Axis2 with Enhanced Moshi H2</h4> |
| |
| <pre> |
| # Deploy your Axis2 WAR with Enhanced Moshi H2 |
| sudo cp your-axis2-app.war /opt/tomcat11/webapps/ |
| |
| # Configure axis2.xml with HTTP/2 settings (use configuration above) |
| # Update WEB-INF/conf/axis2.xml in your deployed WAR |
| </pre> |
| |
| </section><section><a id="Step_4.3A_Configure_SSL_Certificates"></a> |
| <h4>Step 4: Configure SSL Certificates</h4> |
| |
| <pre> |
| # Place certificates in secure location |
| sudo mkdir -p /etc/tomcat11/ssl |
| sudo cp your-domain.crt /etc/tomcat11/ssl/ |
| sudo cp your-domain.key /etc/tomcat11/ssl/ |
| sudo chown -R tomcat:tomcat /etc/tomcat11/ssl |
| sudo chmod 600 /etc/tomcat11/ssl/* |
| </pre> |
| |
| </section><section><a id="Step_5.3A_Start_and_Validate"></a> |
| <h4>Step 5: Start and Validate</h4> |
| |
| <pre> |
| # Start Tomcat |
| sudo systemctl start tomcat11 |
| |
| # Validate HTTP/2 is working |
| curl -k --http2 --location 'https://localhost:8443/your-app/services/YourService' \ |
| --header 'Content-Type: application/json' \ |
| --data '{"test": "HTTP/2 validation"}' \ |
| --trace-ascii trace.log |
| |
| # Check for HTTP/2 in trace.log |
| grep "HTTP/2" trace.log |
| </pre> |
| |
| </section></section><section><a id="a2._Performance_Validation"></a> |
| <h3>2. Performance Validation</h3> |
| |
| <section><a id="Validate_HTTP.2F2_Protocol_Negotiation"></a> |
| <h4>Validate HTTP/2 Protocol Negotiation</h4> |
| |
| <pre> |
| # Test HTTP/2 negotiation |
| openssl s_client -connect localhost:8443 -alpn h2 |
| |
| # Expected output should show: |
| # ALPN protocol: h2 |
| # Protocol: TLSv1.3 |
| </pre> |
| |
| </section><section><a id="Test_Large_JSON_Payload_Processing"></a> |
| <h4>Test Large JSON Payload Processing</h4> |
| |
| <pre> |
| # Test large payload with Enhanced Moshi H2 |
| curl -k --http2 -X POST 'https://localhost:8443/your-app/services/JsonService' \ |
| --header 'Content-Type: application/json' \ |
| --data @large-test-payload.json \ |
| --output response.json \ |
| --write-out "Time: %{time_total}s, Size: %{size_download} bytes, HTTP: %{http_version}\n" |
| |
| # Should show HTTP/2.0 and fast processing times |
| </pre> |
| |
| </section></section><section><a id="a3._Monitoring_and_Troubleshooting"></a> |
| <h3>3. Monitoring and Troubleshooting</h3> |
| |
| <section><a id="HTTP.2F2_Metrics_Monitoring"></a> |
| <h4>HTTP/2 Metrics Monitoring</h4> |
| |
| <pre> |
| # Monitor access logs for HTTP/2 performance |
| tail -f /opt/tomcat11/logs/http2_performance.log |
| |
| # Key metrics to watch: |
| # - Protocol: HTTP/2.0 |
| # - Concurrent streams usage |
| # - JSON processing times |
| # - Compression ratios |
| </pre> |
| |
| </section><section><a id="JVM_Performance_Monitoring"></a> |
| <h4>JVM Performance Monitoring</h4> |
| |
| <pre> |
| # Monitor JVM metrics |
| jstat -gc -t $(pgrep -f tomcat) 5s |
| |
| # Monitor HTTP/2 connections |
| netstat -an | grep :8443 | grep ESTABLISHED | wc -l |
| </pre> |
| |
| </div> |
| |
| </section></section></section> |
| </main> |
| </div> |
| </div> |
| <hr/> |
| <footer> |
| <div class="container-fluid"> |
| <div class="row-fluid"> |
| <p>© 2004–2026 |
| <a href="https://www.apache.org/">The Apache Software Foundation</a> |
| </p> |
| </div> |
| </div> |
| </footer> |
| </body> |
| </html> |