Ставьте лайк и читайте еще раз, 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。
Все знают весну MVC очень мощный инструмент. У брата Нана есть вопрос ко всем. MVCПочему это появляется?一项技术的出现必定да为了解决旧技术考虑不全所积累的软件熵。《Как практиковаться в качестве программиста》существоватьэнтропия программного обеспечения
一节серединаверно熵的解释很有冲击力,Вот что сказал автор,Никого вообще не трогают.
Хотя разработка программного обеспечения не подчиняется большинству законов физики, мы не можем избежать удара от возрастающей энтропии. Энтропия — это физический термин, определяющий степень «беспорядка» в системе. К сожалению, законы термодинамики диктуют, что энтропия во Вселенной имеет тенденцию максимизироваться. Когда в программном обеспечении возрастает беспорядок, программисты говорят: «Программное обеспечение гниет». Некоторые могли бы назвать это более оптимистичным термином «технический долг» с подтекстом, что они когда-нибудь его вернут — или, боюсь, уже не вернут.
Весна не появляется MVCДо,老一代的开发者会существоватьServlet
Напишите бизнес-логику и управляющий код на,даже принадлежатьзадняя часть的业务逻辑也会耦合существовать了jSP
страница。существовать当时互联网不流行,Эпоха, когда бизнес был относительно простым,Это не будет большой проблемой, если вы напишете это так,Но с течением времени и бурным развитием Интернета,,Сложность бизнеса также резко возросла,Именно так начинают работу новые стажеры-программисты. Отсутствие единой и четкой архитектурной модели.,Это может привести к снижению масштабируемости и удобства сопровождения приложения.
Давайте сначала не будем говорить о весне MVC,ПучокMVCдемонтировать。MVC(Model View Контроллер) на самом деле представляет собой идею архитектуры программного обеспечения. Эта идея разделяет приложение на три модуля: модель для написания бизнес-логики, представление для представления данных и контроллер для координации первых двух.
Когда мы, Java-программисты, впервые сталкиваемся с корпоративными платформами,Сначала мы обычно используем SSM для тренировки. Если это структура SSM,действовать какModel
的да编写业务逻辑Javaдобрый,действовать какView
的даJSPстраница,идействовать какController
的则даServlet。в общем,MVC четко разделяет обязанности каждого модуля.,Вещи, за которые вы не несете ответственности, не могут пересекать черту.,Очевидно, что это выглядит намного лучше в обслуживании.
Давным-давно первым проектом брата Нана был танковый бой. В отличие от сегодняшнего корпоративного бизнеса, который рассматривает объект Java как абстракцию требований, мой танковый бой в то время рассматривал объект Java как носитель танка. Какова история вашего первого практического проекта по Java?
Spring Рабочий процесс MVCс участиемПять основных компонентов,Давайте сначала просмотрим его: DispatcherServlet, HandleMapping, Controller, ModelAndView, ViewResolver.
На первом этапе, когда пользователь запускает браузер, запрос отправляется интерфейсному контроллеру DispatcherServlet.,DispatcherServletЭто эквивалентно вышесказанномуMVCархитектурныйC,Spring源码верноDispatcherServletинтерпретируется какОбработчик HTTP-запросов/центральный диспетчер для контроллеров
。С центральным планировщиком,Следующий шаг — совместная отладка других компонентов.
// Диспетчер Сервлетдобрый
package org.springframework.web.servlet;
public class DispatcherServlet extends FrameworkServlet { }
На втором этапе DispatcherServlet вызывает сопоставитель процессора HandleMapping, чтобы найти соответствующий контроллер бизнес-контроллера в соответствии с URL-адресом, запрошенным пользователем.
// Отображение обработчиков
package org.springframework.web.reactive;
public interface HandlerMapping { }
Шаг 3,Адаптер обработчика запросов DispatcherServlet HandlerAdapter ExecutionController,получатьбизнес-результаты后返回一个模型视图верно象ModelAndViewдаватьDispatcherServlet。
// ModelAndViewдобрый
упаковка org.springframework.web.servlet;
public class ModelAndView {
// Адаптер обработчикадобрый
package org.springframework.web.servlet;
public interface HandlerAdapter { }
На четвертом шаге DispatcherServlet возвращает ModelAndView преобразователю представления ViewResolver и преобразует ModelAndView в объект представления View.
// Класс ViewResolver
package org.springframework.web.servlet;
public interface ViewResolver {
На последнем этапе View будет отвечать за рендеринг и возврат результатов в браузер.
Если вы использовали среду 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。
(1)@Controllerи@RestController
Чтобы объявить класс Java в качестве внутреннего интерфейса, мы обычно используем @Controller для изменения класса. Вы также можете использовать @RestController. Разница между ними заключается в том, что последний представляет собой комбинацию @Controller и @ResponseBody. Формат возвращаемых данных. серверным интерфейсом будет Это данные в формате ResponseBody.
Давайте посмотрим на пояснения к исходному коду обоих. Брат Нэн перевел комментарии с английского на китайский.
// Базовый Controller Интерфейс, представляющий компонент, который получает экземпляры HttpServletRequest и HttpServletResponse, как и HttpServlet, но может участвовать. MVC Рабочий процесс.
@FunctionalInterface
public interface Controller {
}
// Сама аннотация удобства аннотируется @Controller и @ResponseBody.
// Типы с этой аннотацией рассматриваются как контроллеры, где методы @RequestMapping по умолчанию принимают семантику @ResponseBody.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
}
(2)@RequestMapping
Цель этой аннотации — сопоставить запросы с методами контроллера.,Например, метод getPerson,Запрос одноклассников на интерфейсе/persons/{id}
Вы можете контролировать выполнение этого метода。
@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.
@PostMapping("/test")
public CommonResult publishCourse(@RequestParam String id) {
}
По запросуURLдобрый似于localhost:8080/test/6
,Используемая аннотация входного параметра — @PathVariable.
@PostMapping("/test/{id}")
public CommonResult publishCourse(@PathVariable String id) {
}
Добро пожаловать на подписку на общедоступную учетную запись Нан Ге: Java Advanced Compass. Я Брат Нэн, Нэн — это Нэн. Я нашла ваши интересные комментарии на Get➕Like➕Follow.
Творить непросто, поэтому вы можете ставить лайки, собирать и подписываться, чтобы поддержать его. Ваша поддержка — самая большая мотивация для моего творчества.❤️