Объясните использование интерфейса RequestDispatcher в JAVA?

День добрый! Появился вопросец по интерфейсу RequestDispatcher! Этот интерфейс позволяет перенаправлять запросы из принимающего сервлета в какой - нибудь другой! Пример кода:
String param = request.getParameter("param");
if(param.equals("enter")){
    RequestDispatcher rD = request.getServletContext("/AnotherServlet");
    rD.forward(request,response);
}

Строчка (rD.forward(request,response);) как может быть вызвана, если это метод из интерфейса и этот метод не реализован?
  • Вопрос задан
  • 1262 просмотра
Пригласить эксперта
Ответы на вопрос 2
zolt85
@zolt85
Программист
Если метод forward объявлен в интерфейсе RequestDispatcher, он уже может быть вызван. Если возвращаемый методом request.getServletContext объект реализует интерфейс RequestDispatсher, соответственно какая-то реализация в нем есть. Другой вопрос, делает ли эта реализация то, что Вы от нее хотите.
Ответ написан
Комментировать
@bromzh
Drugs-driven development
https://ideone.com/6wVcrt
/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	static interface Foo {
		public void foo();
	}
	static class Bar implements Foo {
		@Override
		public void foo() {
			System.out.println("Bar");
		}
	}
	static class Qux implements Foo {
		@Override
		public void foo() {
			System.out.println("Qux");
		}
	}
	public static void main (String[] args) throws java.lang.Exception
	{
		Foo bar = new Bar();
		Foo qux = new Qux();
		bar.foo();
		qux.foo();
	}
}


Примерно так. Только у тебя не конструктор, а метод, который вернёт экземпляр какого-то класса, который реализует интерфейс RequestDispatcher. Реализацию можно найти по-разному. Иногда сервер приложений подставляет свою, иногда нужно настроить какую-то фабрику, иногда реализация внедряется как зависимость, иногда используют анонимный класс, чтобы на месте реализовать интерфейс.

Если в Idea ты зажмёшь ctrl и нажмёшь на слово "RequestDispatcher", то перейдёшь к определению этого интерфейса. Слева от строки с началом интерфейса скорее всего будет стрелка "вниз". Если нажать, то Idea покажет все доступные реализации этого интерфейса (хотя не всегда это удаётся).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы