Идея № 3, вероятно, является плохой идеей, так как она, скорее всего, приведет к тому, что вам придется выполнять эту проверку для каждого запроса, что неэффективно (только незначительно, но небольшие неэффективности могут возрасти).
Идеи с номерами 1 и 2 также не являются лучшим подходом, потому что оба приведут к ответу временного перенаправления (307), тогда как вы, вероятно, захотите, это постоянное перенаправление (301). Это связано с тем, что рассматриваемый браузер всегда будет одним и тем же - FF и IE никогда не будут делиться там списком постоянных перемещений, поэтому даже если оба браузера используются на одном и том же клиентском компьютере, это не вызовет проблем. Вы должны использовать 301 из соображений эффективности, опять же, если браузер всегда идет прямо в нужное место, ваш сервер выполняет меньше работы.
Подводя итог, я думаю, что идея 2 самая близкая, но вы должны использовать это вместо:
resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
resp.setHeader("Location", "/AppName/site/ie/home.jsp");
Имейте в виду, что строки User-Agent могут быть подделаны и на них нельзя полагаться на 100%.
Это мое личное мнение, YMMV ...