Explore the designs of the Spring MVC and WebFlux frameworks, and apply similar designs and techniques to your own code. Along with detailed analysis of the code and functionality, this book includes numerous tips and tricks to help you get the most out of Spring MVC, WebFlux, and Java-based web application development in general using Spring. You’ll see how Spring MVC is a modern web application framework built upon the latest Spring Framework 5 and Spring Boot 2. Spring MVC is suitable for building reusable web controller modules that encapsulate rich page navigation rules. Pro Spring MVC with WebFlux takes great care in covering every inch of Spring MVC with WebFlux to give you the complete picture. Along with all the best-known features of these frameworks, you’ll discover some new hidden treasures. You’ll also learn how to correctly and safely extend the frameworks to create customized solutions. This book is for anyone who wishes to write robust, modern, and useful web applications with the Spring Framework. After reading and using this book, you'll become proficient with Spring MVC and be able to apply it to your own Java web applications and microservices. What You Will Learn Use Spring MVC with WebFlux to build Java-based web applications Employ the various Spring MVC architectures Work with controllers and routing functions Build microservices and web services using Spring MVC and REST Create reactive web applications using Spring WebFlux Secure Spring MVC and Spring WebFlux Deploy your Spring MVC application to the cloud Who This Book Is For Those with at least some prior experience with Java web application development. Some previous experience with Spring Boot or the Spring Framework is recommended. Table of Contents About the Authors About the Technical Reviewer Acknowledgments Chapter 1: Setting up a Local Development Environment Install the Java SDK Install Gradle Install Apache Tomcat Recommended IDE The Bookstore Project Building the Project Running the Projects Summary Chapter 2: Spring Framework Fundamentals The Spring Framework Dependency Injection ApplicationContexts Resource Loading Component Scanning Scopes Profiles Enabling Features Aspect-Oriented Programming Web Applications Spring Boot Summary Chapter 3: Web Application Architecture The MVC Pattern Application Layering Separation of Concerns Spring MVC Application Layers The Domain Layer The User Interface Layer The Web Layer The Service Layer The Data Access Layer More Roads to Rome Summary Chapter 4: Spring MVC Architecture DispatcherServlet Request Processing Workflow The Workflow Prepare a Request Determine the Handler Execution Chain Execute the Handler Execution Chain Handler Exceptions Render a View Finish the Processing The Request Processing Summary DispatcherServlet Bootstrapping DispatcherServlet Using web.xml Using web-fragment.xml Using ServletContainerInitializer Using WebApplicationInitializer Using Spring Boot Configuring DispatcherServlet DispatcherServlet Properties The Application Context Component Resolution DispatcherServlet’s Default Configuration The Spring Boot Defaults The Spring MVC Components HandlerMapping BeanNameUrlHandlerMapping SimpleUrlHandlerMapping RequestMappingHandlerMapping RouterFunctionMapping HandlerAdapter HttpRequestHandlerAdapter SimpleControllerHandlerAdapter SimpleServletHandlerAdapter HandlerFunctionAdapter RequestMappingHandlerAdapter MultipartResolver CommonsMultipartResolver StandardServletMultipartResolver LocaleResolver AcceptHeaderLocaleResolver CookieLocaleResolver FixedLocaleResolver SessionLocaleResolver ThemeResolver CookieThemeResolver FixedThemeResolver SessionThemeResolver HandlerExceptionResolver RequestToViewNameTranslator ViewResolver FlashMapManager Summary Chapter 5: Implementing Controllers Introducing Controllers Interface-based Controllers Annotation-based Controllers Configuring View Controllers Request-Handling Methods Supported Method Argument Types RedirectAttributes UriComponentsBuilder Supported Method Argument Annotations RequestParam RequestHeader RequestBody RequestPart ModelAttribute PathVariable CookieValue SessionAttribute RequestAttribtue Supported Method Return Values Writing Annotation-based Controllers A Simple Login Controller Book Search Page Book Detail Page Data Binding Customizing Data Binding Global Customization Per Controller Customization ModelAttributes Using ModelAttribute on Methods Using ModelAttribute on Method Arguments Using SessionAttributes Thymeleaf expressions Type Conversion Property Editors Converters Formatters Configuring Type Conversion Using Type Conversion Validating Model Attributes Implementing Our Validator Using JSR-303 Validation Internationalization Message Source LocaleResolver LocaleChangeInterceptor Summary Chapter 6: Implementing Controllers: Advanced Using Scoped Beans Adding Something to the Cart Implementing the Checkout Cross-cutting Concerns Interceptors Configuring Interceptors Explicitly Configuring a Handler Mapping with Interceptors Using BeanPostProcessor Using the InterceptorRegistry Implementing an Interceptor Implement WebRequestInterceptor Implementing a Handler Interceptor Exception Handling DefaultHandlerExceptionResolver ResponseStatusExceptionResolver SimpleMappingExceptionResolver ExceptionHandlerExceptionResolver Extending Spring @MVC Extending RequestMappingHandlerMapping Extending the RequestMappingHandlerAdapter HandlerMethodArgumentResolver HandlerMethodReturnValueHandler Implementing Your Own Using the RequestDataValueProcessor Summary Chapter 7: REST and AJAX REpresentational State Transfer (REST) Identifying Resources Working with Resources HiddenHttpMethodFilter Asynchronous JavaScript and XML (AJAX) Adding AJAX to Our Application AJAX Form Submit with HTML Result AJAX Form Submit with JSON Result Sending and Receiving JSON Combining AJAX and REST Progressive Enhancement Handling File Uploads Configuration Configuring Servlet API File Uploading Configuring Apache Commons File Uploading Request Handling Method for File Upload Writing a Request Handling Method with Multipart File Using MultipartHttpServletRequest to Handle File Uploads Using a Form Object to Handle Uploads Writing a Request Handling Method Using the Servlet API Exception Handling Summary Chapter 8: Resolving and Implementing Views View Resolvers and Views View Resolvers BeanNameViewResolver UrlBasedViewResolver InternalResourceViewResolver XsltViewResolver ContentNegotiatingViewResolver Implementing Your Own ViewResolver View Technologies JavaServer Pages Tiles Configuring Tiles Configuring and Creating Templates FreeMarker and Thymeleaf Configuring the Template Engine The Templating Language PDF Excel XML and JSON Summary Chapter 9: Introduction to Spring WebFlux HTTP Request Handling Building Reactive Applications Introduction to Reactive Programming Programming with Streams Reactive Streams Using Project Reactor Introduction to Spring WebFlux Spring WebFlux Configuration: Reactive Controllers Spring Boot WebFlux Application Spring WebFlux Configuration: Functional Endpoints Summary Chapter 10: Building Reactive Applications with Spring WebFlux From Spring Web MVC to Spring WebFlux Migrating the Data Access Layer Migrating the Service Layer Migrating the Web Layer Configuration of a Reactive Templating Engine Using Server-Sent Events (SSEs) Introducing WebClient and WebTestClient Internationalization Internationalization Support Using the Accept-Language Header Internationalization Support Using a Request Parameter and a Custom Implementation of LocaleContextResolver Internationalization Support Using a Request Parameter and a Custom Implementation WebFilter Validation, Type Conversion, and Error Handling Summary Chapter 11: Securing Spring WebFlux Applications Backpressure The WebSocket Protocol Using the WebSocket API with a Non-Reactive Application Using the WebSocket API with a Reactive Application Handling Backpressure The RSocket Protocol WebFlux Security Summary Chapter 12: Spring Security Security Basics Minimal Spring Web Security Using Spring Security Configuring Authentication Configuring Authorization Configure Login and Logout Securing Methods Securing Spring Boot Web Applications Summary Chapter 13: Spring Applications in the Cloud Application Architecture Introducing the Monolith Introducing Microservices Moving to the Cloud: Yea or Nay? Introducing Spring Cloud Redesigning for the Cloud Registration and Discovery Server Developing a Microservice Microservice Using a Database Microservice with a Web Console Sharing Classes Summary Index