17.2.8. Change Configuration Depending on the Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê424
17.2.9. Discover Built-in Options for External Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê425
17.3. Embedded Web Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê425
17.3.1. Use Another Web Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê425
17.3.2. Disabling the Web Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê428
17.3.3. Change the HTTP Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê428
17.3.4. Use a Random Unassigned HTTP Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê428
17.3.5. Discover the HTTP Port at Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê428
17.3.6. Enable HTTP Response Compression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê429
17.3.7. Configure SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê430
17.3.8. Configure HTTP/2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê430
HTTP/2 with Tomcat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê430
HTTP/2 with Jetty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê431
HTTP/2 with Reactor Netty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê431
HTTP/2 with Undertow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê431
17.3.9. Configure the Web Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê431
17.3.10. Add a Servlet, Filter, or Listener to an Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê433
Add a Servlet, Filter, or Listener by Using a Spring Bean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê433
Add Servlets, Filters, and Listeners by Using Classpath Scanning . . . . . . . . . . . . . . . . . . . . . . . Ê434
17.3.11. Configure Access Logging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê434
17.3.12. Running Behind a Front-end Proxy Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê435
Customize Tomcat’s Proxy Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê436
17.3.13. Enable Multiple Connectors with Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê437
17.3.14. Use Tomcat’s LegacyCookieProcessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê439
17.3.15. Enable Tomcat’s MBean Registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê439
17.3.16. Enable Multiple Listeners with Undertow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê440
17.3.17. Create WebSocket Endpoints Using @ServerEndpoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê440
17.4. Spring MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê441
17.4.1. Write a JSON REST Service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê441
17.4.2. Write an XML REST Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê442
17.4.3. Customize the Jackson ObjectMapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê442
17.4.4. Customize the @ResponseBody Rendering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê444
17.4.5. Handling Multipart File Uploads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê444
17.4.6. Switch Off the Spring MVC DispatcherServlet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê445
17.4.7. Switch off the Default MVC Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê445
17.4.8. Customize ViewResolvers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê445
17.5. Jersey. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê447
17.5.1. Secure Jersey endpoints with Spring Security. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê447
17.5.2. Use Jersey Alongside Another Web Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê447
17.6. HTTP Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê448
17.6.1. Configure RestTemplate to Use a Proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê448