Они делают две совершенно разные вещи, поэтому вы не можете просто определиться с эффективностью.
Отправка перенаправления отправит браузер на другой URL. Этот URL будет виден браузеру. Вы можете или не можете этого хотеть. Например, после POST вы, вероятно, должны перенаправить на страницу GET, чтобы избежать того, что страница результатов не может быть перезагружена без повторной публикации. С другой стороны, вы не можете перенаправить на «страницы», которые доступны только внутри контейнера сервлета.
Диспетчеризация более «эффективна» в том смысле, что не требуется дополнительная передача туда и обратно, а она работает только в том же контексте веб-приложения (или, самое большее, в одном и том же контейнере сервлета, если вы его настроили). Кроме того, URL-адрес, который пользователь использовал для доступа к странице в первую очередь, будет отличаться от того, что будет называться сервлетом позже в цепочке, что может сбивать с толку. Шаблон отправки часто используется для дополнительной обработки до или после реального запроса (вместо ServletFilter) или для страниц с ошибками.
Вы можете передавать атрибуты запроса, используя диспетчеризацию, но только параметры запроса при перенаправлении. Вы не можете перенаправить как POST (поэтому объем данных, которые вы можете прикрепить к нему, ограничен). Все параметры запроса в перенаправлении видны пользователю.