Как реализовать загрузку страницы через контроллер в Spring MVC?

«Как реализовать загрузку страницы через контроллер в Spring MVC?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Spring MVC загрузка страницы реализуется через @Controller, который возвращает имя представления (view name). Spring затем разрешает это имя в конкретный шаблон (HTML, JSP и т.д.) с помощью настроенного ViewResolver.

Пример базового контроллера:

@Controller
public class HomeController {
    @GetMapping("/home")
    public String showHomePage(Model model) {
        // Добавление данных в модель для передачи в представление
        model.addAttribute("welcomeMessage", "Добро пожаловать!");
        model.addAttribute("serverTime", LocalDateTime.now());
        // Возвращает имя представления "home"
        return "home";
    }
}

Ключевые аспекты:

  • SSR (Server-Side Rendering): Контроллер подготавливает данные на сервере и отправляет клиенту готовый HTML.
  • View Resolution: Имя "home" преобразуется в путь к файлу (например, /templates/home.html) с помощью ThymeleafViewResolver, InternalResourceViewResolver и др.
  • Типы возвращаемых значений: Метод контроллера может возвращать:
    • String — имя представления.
    • ModelAndView — объект, содержащий и модель данных, и имя представления.
    • void (при использовании HttpServletResponse).
  • Комбинация с REST: Один контроллер может обрабатывать и HTML-страницы (через @Controller), и JSON API (через @ResponseBody или отдельный @RestController).

Актуальность: Такой подход (SSR) остается востребованным для SEO-критичных страниц, административных панелей или в гибридных архитектурах, где часть контента генерируется на сервере, а часть — на клиенте (SPA).