Spring MVC Tutorial
Core Spring MVC
Spring MVC - Annotation
Spring MVC - Form Handling
Spring MVC with JSTL
Spring MVC with REST API
Spring MVC with Database
In Spring MVC, it's common to have multiple view pages to render different content based on various scenarios. You may have multiple JSPs, Thymeleaf templates, or other view types in a single application. The ViewResolver
in Spring helps in determining which view should be rendered in response to a request.
Let's discuss how to configure and use multiple view pages in a Spring MVC application:
Here's a basic example using InternalResourceViewResolver
for JSP pages:
@Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; }
If you have another type of view, like Thymeleaf, you'd set up its resolver similarly.
Here's a simple controller that returns different view names based on certain conditions:
@Controller public class ViewController { @RequestMapping("/showView") public String showView(@RequestParam(name = "type", defaultValue = "default") String type) { if ("type1".equals(type)) { return "viewType1"; // Maps to "/WEB-INF/views/viewType1.jsp" } else if ("type2".equals(type)) { return "viewType2"; // Maps to "/WEB-INF/views/viewType2.jsp" } return "defaultView"; // Maps to "/WEB-INF/views/defaultView.jsp" } }
With the above setup, visiting /showView?type=type1
would render the viewType1.jsp
page, /showView?type=type2
would render the viewType2.jsp
page, and /showView
or any other type would render the defaultView.jsp
page.
Under /WEB-INF/views/
, you would have:
viewType1.jsp
viewType2.jsp
defaultView.jsp
Each of these JSPs would have its own content to display.
In scenarios where you want to support multiple view technologies (like JSP and Thymeleaf), you'd configure multiple view resolvers. However, you need to set the order of these resolvers, so Spring knows which one to consult first.
Here's a quick example:
@Bean public ViewResolver jspViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); resolver.setOrder(2); return resolver; } @Bean public ViewResolver thymeleafViewResolver() { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); // other configurations... resolver.setOrder(1); return resolver; }
In this configuration, Spring would first try to find a matching Thymeleaf template. If it doesn't find one, it would then look for a JSP page.
When working with multiple view resolvers, always ensure that view names across different view technologies are distinct to avoid ambiguity.
Spring MVC Multiple View Pages Example:
Description: This is a basic example showcasing the usage of multiple view pages in a Spring MVC application.
Code Snippet: (Controller)
// HomeController class @Controller public class HomeController { @RequestMapping("/home") public String home() { return "home"; } } // ProductController class @Controller public class ProductController { @RequestMapping("/products") public String products() { return "products"; } }
Using Multiple Views in Spring MVC:
Description: This example demonstrates how to use multiple views in a Spring MVC application to handle different parts of the user interface.
Code Snippet: (Controller)
// HomeController class @Controller public class HomeController { @RequestMapping("/home") public String home() { return "home"; } } // ProductController class @Controller public class ProductController { @RequestMapping("/products") public String products() { return "products"; } }
How to Configure Multiple View Pages in Spring MVC:
Description: This example shows how to configure multiple view pages in a Spring MVC application using view resolver beans.
Code Snippet: (Configuration)
// WebConfig class @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Bean public InternalResourceViewResolver jspViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/jsp/"); resolver.setSuffix(".jsp"); return resolver; } @Bean public ThymeleafViewResolver thymeleafViewResolver(SpringTemplateEngine templateEngine) { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setTemplateEngine(templateEngine); return resolver; } // Additional configuration for Thymeleaf }
Handling Multiple View Technologies in Spring MVC:
Description: This example illustrates handling multiple view technologies (JSP and Thymeleaf) in a Spring MVC application.
Code Snippet: (Configuration)
// WebConfig class @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Bean public InternalResourceViewResolver jspViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/jsp/"); resolver.setSuffix(".jsp"); return resolver; } @Bean public ThymeleafViewResolver thymeleafViewResolver(SpringTemplateEngine templateEngine) { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setTemplateEngine(templateEngine); return resolver; } // Additional configuration for Thymeleaf }
Working with JSP and Thymeleaf in Spring MVC:
Description: This example demonstrates working with both JSP and Thymeleaf as view technologies in a Spring MVC application.
Code Snippet: (Configuration)
// WebConfig class @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Bean public InternalResourceViewResolver jspViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/jsp/"); resolver.setSuffix(".jsp"); return resolver; } @Bean public ThymeleafViewResolver thymeleafViewResolver(SpringTemplateEngine templateEngine) { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setTemplateEngine(templateEngine); return resolver; } // Additional configuration for Thymeleaf }
Configuring View Resolvers for Multiple View Pages:
Description: This example showcases how to configure view resolvers for multiple view pages in a Spring MVC application.
Code Snippet: (Configuration)
// WebConfig class @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Bean public InternalResourceViewResolver jspViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/jsp/"); resolver.setSuffix(".jsp"); return resolver; } @Bean public ThymeleafViewResolver thymeleafViewResolver(SpringTemplateEngine templateEngine) { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setTemplateEngine(templateEngine); return resolver; } // Additional configuration for Thymeleaf }
Organizing URL Mappings for Multiple Views in Spring:
Description: This example showcases organizing URL mappings for multiple views in a Spring MVC application for a clean and structured architecture.
Code Snippet: (Controllers)
// HomeController class @Controller public class HomeController { @RequestMapping("/home") public String home() { return "home"; } } // ProductController class @Controller public class ProductController { @RequestMapping("/products") public String products() { return "products"; } }
View Resolution for Different Parts of Spring MVC Application:
Description: This example illustrates view resolution for different parts of a Spring MVC application using specific controllers.
Code Snippet: (Controllers)
// HomeController class @Controller public class HomeController { @RequestMapping("/home") public String home() { return "home"; } } // ProductController class @Controller public class ProductController { @RequestMapping("/products") public String products() { return "products"; } }
Switching Between Multiple View Pages Based on Conditions in Spring:
Description: This example demonstrates how to switch between multiple view pages based on conditions in a Spring MVC application.
Code Snippet: (Controller)
// HomeController class @Controller public class HomeController { @RequestMapping("/home") public String home(Model model) { if (/* Some condition */) { return "home"; } else { return "alternateHome"; } } }