Ответ
В 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).
Ответ 18+ 🔞
А, ну это же классика, блядь! Весь этот ваш Spring MVC, который уже как старый дед, но всё ещё пиздец как нужен. Смотри, как тут всё просто и одновременно охуенно запутано для новичка.
Вот представь: у тебя есть контроллер. Не тот, который на пульте, а программный, ёпта. Помечаешь его @Controller – и всё, он теперь как швейцар у входа в клуб, решает, кому какую страницу показать.
Вот смотри, как это выглядит в коде, реальный пример:
@Controller
public class HomeController {
@GetMapping("/home")
public String showHomePage(Model model) {
// Кидаем в модель данные, как в сумку курьера
model.addAttribute("welcomeMessage", "Добро пожаловать!");
model.addAttribute("serverTime", LocalDateTime.now());
// Говорим: "неси эту сумку в файлик 'home'"
return "home";
}
}
Суть в чём, блядь? Ты возвращаешь просто строку "home". А дальше начинается магия, ёперный театр! На сцену выходит ViewResolver – этакий переводчик с языка программистов на язык файловой системы. Он берёт это "home", суёт в свои правила и выдаёт: «Ага, значит, тебе нужен файл /templates/home.html». Или .jsp. Кому как настроено.
А теперь ключевые моменты, чтобы не облажаться:
- SSR (Server-Side Rendering): Это когда сервер, этот трудяга-терминатор, сам всё готовит. Собирает данные, вставляет их в HTML-шаблон и выдаёт тебе готовую, сочную страницу. Не как эти модные SPA, где браузеру потом ебашить и ебашить.
- View Resolution: Самая важная хуйня! Без правильного
ViewResolverтвоё"home"так и останется грустной строкой в логах. Thymeleaf, JSP, FreeMarker – каждый со своим резолвером, как у каждого района свой гопник-авторитет. - Что можно вернуть? Да почти что угодно, блядь!
String– как в примере, просто имя вьюхи.ModelAndView– тяжёлая артиллерия. Тут ты и модель с данными передаёшь, и вид указываешь. Максимальный контроль, ебать!void– но это для особых извращенцев, которые любят сами руками черезHttpServletResponseвсё писать. Рисково, но можно.
- Гибридный режим – сила! Один и тот же контроллер может быть и для людей, и для машин. Для людей (
@Controller) – отдаёт красивые HTML-страницы. Для машин (добавил@ResponseBodyили заюзал@RestController) – плюёт JSON, как автомат. Универсальный солдат, хуле!
Актуальность? Да она, блядь, огонь! Все эти крики «SPA! SPA!» – это хорошо для админок внутри системы. А попробуй сделать интернет-магазин, который гуглу не виден! Вот тут наш старичок SSR и выходит на первый план. SEO-страницы, быстрые первые загрузки, гибридные схемы – везде его след. Так что не списывай со счетов, это не архаика, а фундаментальный инструмент, ядрёна вошь!