- PVSM.RU - https://www.pvsm.ru -
Не смог нигде найти ссылку на самые основы веба для тех кто никогда не заглядывал за браузер, но уже начал учить Java и Spring.
Например у нас есть два компьютера (обычных или виртуальных) один из которых (клиент) хочет получить от другого (сервер) какую-то информацию (да туже самую веб-страницу).
— Сервер, дай мне веб страницу, — говорит клиент примерно следующим URL [1] запросом:
http://server.name:8080/folderName/pageName
В запросе, первым делом указывается протокол — http (для простоты осознания, это что-то вроде языка и правил общения между двумя программами), затем имя сервера — server.name (относительно уникальный идентификатор из нескольких слов разделенных точками: ru.wikipedia.org, habr.com), потом порт — 8080 (который читающий эту статью, вероятно никогда не указывал, но тогда он выбирался по умолчанию: 80), потом путь и имя страницы — folderName/pageName (прямо как в древе папок на вашем ПК /Windows/explorer.exe)
Тут появляется небольшая тонкость: было бы очень затратно обращаться к серверам по имени, поэтому в реальности обращение происходит по адресу, например 178.248.237.68, а для того чтобы его узнать этот адрес используются DNS сервера [2], которые работают примерно, как телефонный справочник (если очень условно) и сообщают адрес по имени. Далее этот адрес условно можно использовать вместо имени, но на самом деле нет и вот почему:
На стороне Сервера (если это интернет) обычно работает не один сайт, а несколько и вас встречает не собственно сам сайт, а например NGINX [3], который в зависимости от имени сайта отводит вас к нужному уже внутри Сервера.
Так или иначе главное тут вот что: мы (Клиент) послали запрос (Request) к Серверу он над ним подумал и вернул ответ (Responce).
И небольшое примечание. Мы ведь собираемся разрабатывать веб приложение на локальной машине и нам нужно как-то получить к нему доступ. Для начала, как и с любым сайтом хватит просто браузера. Как и у любого компьютера в сети у нас есть имя и адрес, но как и в реальной жизни не обязательно обращаться к себе по полному имени, достаточно сказать условное Я и в случае сети это localhost, те чтобы обратится к корневому ресурсу на вашем локальном веб-сервере нужно перейти по ссылке http://localhost:8080/ (специально не рабочая ссылка, чтобы не тыкали своими ручонками сервер-то никто не поднимал).
В простейшем случае (вашем) на стороне Сервера (который ПК) нас встречает ваше приложение, те встретит когда вы ее напишете и поднимите. Так как сама по себе она жить не может, то она запущена на чем-то маленьком (контейнер сервлетов, например Tomcat [4]) или большом (сервер приложений, например WebSphere [5]). И то и другое это какой-то контейнер с большим или меньшим количеством функций в котором существует ваше приложение. Для начала нам хватит томката который включен в спринг бут.
Как развернуть самое элементарное приложение я рассказывать не буду, тк подобных инструкций в сети как у дурака фантиков [6].
Полезнее будет рассказать хотя бы самые основы о том как устроен Спринг внутри (для тех кому в книжках и статьях много букв [7]):
Поднимаясь в конейнере или сервере приложений Спринг создает DispatcherServlet [8], который пожирает все запросы и выполняет функцию маршрутизатора.
Самое важноt что есть в Спринге (его сердце, можно сказать) это IoC контейнер, в котором он хранит и которым САМ выстраивает зависимости между компонентами (частями вашей программы).
В процессе нахождения ему попадаются компоненты помеченные аннотацией Controller [9] или @RestController (тоже что и обычный, но все методы автоматически помечены @ResponceBody), которые он привязывает к диспетчер сервлету, чтобы тот знал какой запрос куда направлять.
Внутри контроллеров находятся методы помеченные аннотацией @RequestMapping (@GetMapping, @PostMapping, @PutMapping, @DeleteMapping такие же @RequestMapping, но с заранее указанным методом [10] запроса). Отмечу, что если просто вбить адрес в строку браузера, то вы получите Get запрос.
Немного примеров:
|
Запрос любым методом
вернёт «Hello World!» |
|
Запрос Get методом
http://localhost:8080/index.html [12] вернёт «Goodbye World!» |
|
Запрос Post методом
http://localhost:8080/folder/index.html [13] вернёт «hi World!» |
|
Запрос Post методом
http://localhost:8080/folder1/folder2/index.html [14] вернёт «hola World!» |
Но все это будут унылые статичные тесты, которые никому не пригодятся. Запросам не хватает параметров, и у нас есть 3 способа их получить: @RequestParam, @PathVariable и @RequestBody. Рассмотрим первые два (если вы читаете эту статью, то вам пока незачем использовать третье).
@RestController
public class HelloController {
@RequestMapping("/")
public String index(@RequestParam String name) {
return "Hello " + name;
}
}
Запрос http://localhost:8080/?name=Alex [15] вернёт «Hello Alex»
@RestController
public class HelloController {
@RequestMapping("/abracadabra/{name}/bums")
public String index(@PathVariable String name) {
return "Hello " + name;
}
}
Запрос http://localhost:8080/abracadabra/Alex/bums [16] вернёт «Hello Alex»
@RestController
public class HelloController {
@RequestMapping("/{foo}/{name}")
public String index(@PathVariable String name, @RequestParam String baz, @RequestParam String hell, @PathVariable String foo) {
return name + " " + baz + " " + hell + " " + foo;
}
}
Запрос http://localhost:8080/geese/steal?hell=love&baz=kill [17] тоже что-то вернет
Совсем на прощанье:
@RestController
public class HelloController {
@RequestMapping("/{foo}/{name}")
public String index(@PathVariable String name, @PathVariable String foo) {
List list = new ArrayList();
list.add(foo);
list.add(name);
return list;
}
}
Запрос http://localhost:8080/geese/steal [18] вернет [“geese”, “steal”] потому что JSON [19] сериализация, а коллекции при ней идут по правилам массивов.
Автор: незнакомец
Источник [20]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/286661
Ссылки в тексте:
[1] URL: https://ru.wikipedia.org/wiki/URL
[2] DNS сервера: https://ru.wikipedia.org/wiki/DNS
[3] NGINX: https://ru.wikipedia.org/wiki/Nginx
[4] Tomcat: https://ru.wikipedia.org/wiki/Apache_Tomcat
[5] WebSphere: https://ru.wikipedia.org/wiki/WebSphere
[6] подобных инструкций в сети как у дурака фантиков: https://spring.io/guides/gs/spring-boot/
[7] для тех кому в книжках и статьях много букв: http://spring-projects.ru/guides/lessons/lesson-2/
[8] DispatcherServlet: http://qaru.site/questions/45652/what-is-dispatcher-servlet-in-spring
[9] Controller: https://habr.com/users/controller/
[10] методом: https://habr.com/post/50147/
[11] http://localhost:8080/: http://localhost:8080/
[12] http://localhost:8080/index.html: http://localhost:8080/index.html
[13] http://localhost:8080/folder/index.html: http://localhost:8080/folder/index.html
[14] http://localhost:8080/folder1/folder2/index.html: http://localhost:8080/folder1/folder2/index.html
[15] http://localhost:8080/?name=Alex: http://localhost:8080/?name=Alex
[16] http://localhost:8080/abracadabra/Alex/bums: http://localhost:8080/abracadabra/Alex/bums
[17] http://localhost:8080/geese/steal?hell=love&baz=kill: http://localhost:8080/geese/steal?hell=love&baz=kill
[18] http://localhost:8080/geese/steal: http://localhost:8080/geese/steal
[19] JSON: https://ru.wikipedia.org/wiki/JSON
[20] Источник: http://habrahabr.ru/sandbox/122637/
Нажмите здесь для печати.