Почему в книге Head First используется «/» при пересылке запроса из сервлета в JSP?

Читая Head First JSP и сервлеты, я узнал, что косая черта (/) используется для обозначения корня контейнера. Обратите внимание, как в этом примере из книги при использовании (/) нет myApp.

Но когда они пересылают запрос (и не используют response.sendRedirect), они указывают (/). Обратите внимание на ту часть, где пишут /result.jsp на этой картинке:

Я немного смущен прямо сейчас. У меня есть проект под названием myApp. А внутри у меня есть index.html, servlet.class и result.jsp.

В итоге в браузере я получаю http://localhost:8080/myApp/result.jsp . Но при чтении ссылки, которую я указал вверху, она должна быть http://localhost:8080/result.jsp . Потому что, как я уже сказал (как и ссылка), косая черта (/) представляет собой корень контейнера. А корень — это http://localhost:8080 , а не http://localhost:8080/myApp.

Что самое странное, так это то, что это работает в обе стороны - если я набираю result.jsp и /result.jsp. Может кто-нибудь, пожалуйста, очистите это, так как это убивает меня :)

Меня больше всего смущает то, как вообще работает /result.jsp, когда он должен привести нас к http://localhost:8080/result.jsp, а мой result.jsp технически находится внутри myApp, а не внутри контейнера.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно документации

Если путь начинается с «/», он интерпретируется как относительный к текущему корневому контексту.

Таким образом, путь относится к корню вашего контекста, а не ко всему вашему серверу приложений.

Почему они не могут быть согласованы с использованием одного и того же «отношения» в RequestDispatcher и sendRedirect? Таким образом, в sendRedirect / обозначает сервер приложений, а в RequestDispathcer — текущий корень контекста. Я правильно понял?

Stefan 24.12.2020 15:48

Кроме того, не могли бы вы сказать мне, что именно означает current context root? Можете ли вы добавить в свой ответ, пожалуйста? Это как проект - в данном случае myApp?

Stefan 24.12.2020 15:49

"Это похоже на проект[...]?" Я бы сказал, что это путь приложения, а не проекта. Насчет того, почему они так сделали, я думаю, вы должны спросить у них :) Но редирект может идти куда угодно на сервере (поэтому логично, что / — это корень сервера), а RequestDispatcher (это тоже есть в документации) не может ссылаться на вещи вне корня контекста.

Federico klez Culloca 24.12.2020 16:07

Я предполагаю, что он использует тот же принцип, что и <url-pattern> внутри XML? Поэтому, если я пишу /test.do, это должно относиться к корневому контексту, а не к серверу. Я прав? Так что / относится только к серверу, когда мы делаем перенаправление. Есть близкие? :)

Stefan 24.12.2020 16:16

Я думаю, что проще разделить концепцию. getRequestDispatcher обрабатывает вещи внутри вашего текущего корня контекста и имеет отношение к вашему приложению / тому, как работают сервлеты, перенаправления — это вещи HTTP. Поэтому они ведут себя по-разному, потому что работают с разными вещами.

Federico klez Culloca 24.12.2020 16:23

Другие вопросы по теме