Я думал, что смогу написать в своем резюме знание фреймворка Spring, пока не столкнулся с этим. . .
Я думал, что смогу написать в своем резюме знание фреймворка Spring, пока не столкнулся с этим. . .

Ставьте лайк и читайте еще раз, Java продвинута более чем наполовину

Все знают весну MVCдаRod Johnsonда开发的,Но мало кто знаетSpring Теоретическая основа MVC зародилась в 1978 году. Старик, предложивший модель MVC в 2008 году, — Трюгве. Mikkjel Heyerdahl Reenskaug,Норвежский ученый-компьютерщик,Университет ОслоПочетный профессор。

Идеи архитектуры MVC Трюгве Реенскауга использовались при разработке раннего программного обеспечения с графическим пользовательским интерфейсом (GUI). Именно так он объяснил MVC.

MVC считается универсальным решением проблемы пользователей, управляющих большими и сложными наборами данных. Самое сложное — придумать хорошие названия для различных архитектурных компонентов. Модель-Представление-Редактор — первый. После долгих обсуждений, особенно с Адель Голдберг, мы наконец приняли термин Модель-Представление-Контроллер.

Вы можете посмотреть Трюгве ниже. ReenskaugверноMVCархитектурное мышлениепонимание и знакомство

Привет всем, я брат Нэн.

Лидер в развитии Java. Сегодняшнее руководство — Spring MVC. Следуйте за Братом Нэном, и давайте вместе продвигать Java.

Эта статья включена в мое «Продвинутое руководство по Java» с открытым исходным кодом, руководство по изучению Java, которое поможет друзьям освоить Java и пройти собеседование. Я уверен, что это поможет вам не запутаться на пути к развитию Java. Брат Нэн надеется получить ваши отзывы ⭐ Star ⭐Поддержка,这да我创作的最大动力。GitHubадрес:https://github.com/hdgaadd/JavaProGuide

1. Обзор Spring MVC

1.1 Как понять Spring MVC

Все знают весну MVC очень мощный инструмент. У брата Нана есть вопрос ко всем. MVCПочему это появляется?一项技术的出现必定да为了解决旧技术考虑不全所积累的软件熵。《Как практиковаться в качестве программиста》существоватьэнтропия программного обеспечения一节серединаверно熵的解释很有冲击力,Вот что сказал автор,Никого вообще не трогают.

Хотя разработка программного обеспечения не подчиняется большинству законов физики, мы не можем избежать удара от возрастающей энтропии. Энтропия — это физический термин, определяющий степень «беспорядка» в системе. К сожалению, законы термодинамики диктуют, что энтропия во Вселенной имеет тенденцию максимизироваться. Когда в программном обеспечении возрастает беспорядок, программисты говорят: «Программное обеспечение гниет». Некоторые могли бы назвать это более оптимистичным термином «технический долг» с подтекстом, что они когда-нибудь его вернут — или, боюсь, уже не вернут.

Весна не появляется MVCДо,老一代的开发者会существоватьServletНапишите бизнес-логику и управляющий код на,даже принадлежатьзадняя часть的业务逻辑也会耦合существовать了jSPстраница。существовать当时互联网不流行,Эпоха, когда бизнес был относительно простым,Это не будет большой проблемой, если вы напишете это так,Но с течением времени и бурным развитием Интернета,,Сложность бизнеса также резко возросла,Именно так начинают работу новые стажеры-программисты. Отсутствие единой и четкой архитектурной модели.,Это может привести к снижению масштабируемости и удобства сопровождения приложения.

Давайте сначала не будем говорить о весне MVC,ПучокMVCдемонтировать。MVC(Model View Контроллер) на самом деле представляет собой идею архитектуры программного обеспечения. Эта идея разделяет приложение на три модуля: модель для написания бизнес-логики, представление для представления данных и контроллер для координации первых двух.

Когда мы, Java-программисты, впервые сталкиваемся с корпоративными платформами,Сначала мы обычно используем SSM для тренировки. Если это структура SSM,действовать какModel的да编写业务逻辑Javaдобрый,действовать какView的даJSPстраница,идействовать какController的则даServlet。в общем,MVC четко разделяет обязанности каждого модуля.,Вещи, за которые вы не несете ответственности, не могут пересекать черту.,Очевидно, что это выглядит намного лучше в обслуживании.

Давным-давно первым проектом брата Нана был танковый бой. В отличие от сегодняшнего корпоративного бизнеса, который рассматривает объект Java как абстракцию требований, мой танковый бой в то время рассматривал объект Java как носитель танка. Какова история вашего первого практического проекта по Java?

2. Технические моменты Spring MVC

2.1 Рабочий процесс Spring MVC

Spring Рабочий процесс MVCс участиемПять основных компонентов,Давайте сначала просмотрим его: DispatcherServlet, HandleMapping, Controller, ModelAndView, ViewResolver.

На первом этапе, когда пользователь запускает браузер, запрос отправляется интерфейсному контроллеру DispatcherServlet.,DispatcherServletЭто эквивалентно вышесказанномуMVCархитектурныйC,Spring源码верноDispatcherServletинтерпретируется какОбработчик HTTP-запросов/центральный диспетчер для контроллеров。С центральным планировщиком,Следующий шаг — совместная отладка других компонентов.

Язык кода:java
копировать
// Диспетчер Сервлетдобрый
package org.springframework.web.servlet;
public class DispatcherServlet extends FrameworkServlet { }

На втором этапе DispatcherServlet вызывает сопоставитель процессора HandleMapping, чтобы найти соответствующий контроллер бизнес-контроллера в соответствии с URL-адресом, запрошенным пользователем.

Язык кода:java
копировать
// Отображение обработчиков
package org.springframework.web.reactive;
public interface HandlerMapping { }

Шаг 3,Адаптер обработчика запросов DispatcherServlet HandlerAdapter ExecutionController,получатьбизнес-результаты后返回一个模型视图верно象ModelAndViewдаватьDispatcherServlet。

Язык кода:java
копировать
// ModelAndViewдобрый
упаковка org.springframework.web.servlet;
public class ModelAndView {
Язык кода:java
копировать
// Адаптер обработчикадобрый
package org.springframework.web.servlet;
public interface HandlerAdapter { }

На четвертом шаге DispatcherServlet возвращает ModelAndView преобразователю представления ViewResolver и преобразует ModelAndView в объект представления View.

Язык кода:java
копировать
// Класс ViewResolver
package org.springframework.web.servlet;
public interface ViewResolver {

На последнем этапе View будет отвечать за рендеринг и возврат результатов в браузер.

2.2 Spring MVC с контейнером Tomcat

Если вы использовали среду Spring Web MVC, у вас создастся впечатление, что нам нужно установить отдельный сервер Tomcat на локальном компьютере, и платформа Spring сможет запустить наше веб-приложение. Будет ли это для вас хлопотно? Брат Нэн считает это очень хлопотным. .

Платформа SpringBoot не требует от нас отдельного развертывания сервера Tomcat.,大家甚至существоватьhttps://start.spring.io/После скачивания пакета с официального сайта,Вы можете запустить веб-программу, запустив ее локально.,Это удобно.

这да为什么?SpringBootЕсть встроенныйКонтейнер сервлетов,Сущность контейнера Tomcat, упомянутого выше Братом Нэном, также является Контейнером сервлетов., SpringBoot по умолчанию настраивает для нас Tomcat. Если вас не устраивает Tomcat, вы также можете использовать другой Контейнер. сервлетов,Такие как Джетти, Подводное течение.

Контейнер Tomcat для нашей Spring MVC выполняет много грязной работы, например, хлопотную работу с базовыми соединениями Socket. И весна, о которой я упоминал выше MVCПять основных компонентов本质上都да调用Servlet API,И сервлет Реализацию API для нас также завершает контейнер Tomcat.

Весной Web В рамках MVC, если вы хотите развернуть контейнер сервлетов отдельно, не забудьте обратить внимание на среду Spring и сервлет. Совместимость контейнеров。существоватьОфициальная документация Springсередина,Spring Framework 5.3.x Последней поддерживаемой спецификацией сервлетов была версия 4.0, начиная с Spring Framework 6.0 Для начала минимальная версия сервлета — Servlet. 5.0。

2.3 Общие аннотации для Spring MVC

(1)@Controllerи@RestController

Чтобы объявить класс Java в качестве внутреннего интерфейса, мы обычно используем @Controller для изменения класса. Вы также можете использовать @RestController. Разница между ними заключается в том, что последний представляет собой комбинацию @Controller и @ResponseBody. Формат возвращаемых данных. серверным интерфейсом будет Это данные в формате ResponseBody.

Давайте посмотрим на пояснения к исходному коду обоих. Брат Нэн перевел комментарии с английского на китайский.

Язык кода:java
копировать
// Базовый Controller Интерфейс, представляющий компонент, который получает экземпляры HttpServletRequest и HttpServletResponse, как и HttpServlet, но может участвовать. MVC Рабочий процесс.
@FunctionalInterface
public interface Controller {
}
Язык кода:java
копировать
// Сама аннотация удобства аннотируется @Controller и @ResponseBody.
// Типы с этой аннотацией рассматриваются как контроллеры, где методы @RequestMapping по умолчанию принимают семантику @ResponseBody.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
}

(2)@RequestMapping

Цель этой аннотации — сопоставить запросы с методами контроллера.,Например, метод getPerson,Запрос одноклассников на интерфейсе/persons/{id}Вы можете контролировать выполнение этого метода。

Язык кода:java
копировать
@RestController
@RequestMapping("/persons")
class PersonController {

	@GetMapping("/{id}")
	public Person getPerson(@PathVariable Long id) {
		// ...
	}

	@PostMapping
	@ResponseStatus(HttpStatus.CREATED)
	public void add(@RequestBody Person person) {
		// ...
	}
}

Методы HTTP имеют несколько типов запросов, а среда Spring также предоставляет пять аннотаций сопоставления.

  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping
  • @PatchMapping

(3)@RequestParamи、@PathVariable

Есть небольшая деталь, связанная с аннотациями Spring MVC. Когда мы пишем внутренний интерфейс с входными параметрами, многие студенты не уверены, какие аннотации, соответствующие входным параметрам, следует использовать.

Брат Нэн навел порядок,По запросуURLдобрый似于localhost:8080/test/?id=6,Используемая аннотация входного параметра — @RequestParam.

Язык кода:java
копировать
  @PostMapping("/test")
  public CommonResult publishCourse(@RequestParam String id) {
  }

По запросуURLдобрый似于localhost:8080/test/6,Используемая аннотация входного параметра — @PathVariable.

Язык кода:java
копировать
  @PostMapping("/test/{id}")
  public CommonResult publishCourse(@PathVariable String id) {
  }

Нажмите здесь, «JavaProGuide» — это руководство по собеседованию по изучению Java, охватывающее основные знания, необходимые Java-программистам, и ключевые моменты собеседования.

Добро пожаловать на подписку на общедоступную учетную запись Нан Ге: Java Advanced Compass. Я Брат Нэн, Нэн — это Нэн. Я нашла ваши интересные комментарии на Get➕Like➕Follow.

Творить непросто, поэтому вы можете ставить лайки, собирать и подписываться, чтобы поддержать его. Ваша поддержка — самая большая мотивация для моего творчества.❤️

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose