Подтвердить что ты не робот

ServletContext.getRequestDispatcher() vs ServletRequest.getRequestDispatcher()

почему

getRequestDispatcher (путь строки) интерфейс ServletRequest не может выходить за пределы текущего сервлета контекст

, где

getRequestDispatcher (путь строки) ServletContext может использовать Метод getContext (String uripath) для получить RequestDispatcher для ресурсов в зарубежных контекстах.

и как

Пожалуйста, помогите

4b9b3361

Ответ 1

Если вы используете абсолютный путь, такой как ("/index.jsp"), нет никакой разницы.

Если вы используете относительный путь, вы должны использовать HttpServletRequest.getRequestDispatcher(). ServletContext.getRequestDispatcher() не позволяет этого.

Например, если вы получили свой запрос на http://example.com/myapp/subdir,

    RequestDispatcher dispatcher = 
        request.getRequestDispatcher("index.jsp");
    dispatcher.forward( request, response ); 

Переслать запрос на страницу http://example.com/myapp/subdir/index.jsp.

В любом случае вы не можете перенаправлять запрос на ресурс вне контекста.

Ответ 2

Метод запроса getRequestDispatcher() может использоваться для обращения к локальным сервлетам в пределах одного webapp.

Метод getRequestDispatcher() на основе контекста сервлета может использоваться для передачи сервлетов из других веб-приложений, развернутых на сервере SAME.

Ответ 3

request.getRequestDispatcher( "url" ) означает, что отправка относится к текущему HTTP-запросу. Предполагается, что это соединение двух сервлетов в одном и том же веб-приложении Пример

RequestDispatcher reqDispObj = request.getRequestDispatcher("/home.jsp");

getServletContext(). getRequestDispatcher ( "url" ) означает, что отправка относится к корню ServletContext.Means это для объединения двух веб-приложений на одном сервере/двух разных серверах.

Пример

RequestDispatcher reqDispObj = getServletContext().getRequestDispatcher("/ContextRoot/home.jsp");

Ответ 4

Я бы подумал, что ваш первый вопрос - это просто вопрос. ServletContext - объект с более широким охватом (весь контекст сервлета), чем ServletRequest, который представляет собой просто один запрос. Для получения более подробной информации вы можете ознакомиться с самой спецификацией Servlet.

Что касается того, как, извините, но мне придется оставить это для других, чтобы ответить в это время.

Ответ 5

Контекст сохраняется в области уровня приложения, где, поскольку запрос хранится на уровне страницы, то есть

Web Container запускает приложения один за другим и запускает их внутри своей JVM. Он хранит одноэлементный объект в своем jvm, где он регистрирует любой объект, который помещается внутри него. Этот одноэлемент используется для всех приложений, запущенных внутри него, поскольку он хранится внутри JVM самого контейнера.

Однако для запросов контейнер создает объект запроса, который заполняется данными из запроса и передается от одного потока к другому (каждый поток представляет собой новый запрос, поступающий на сервер), также запрос передается нити одного приложения.