Вы должны не иметь код скриптлета в JSP. Я бы порекомендовал 100% JSTL и нулевой код скрипта.
JSP должны быть чисто презентационными. Это скрытое преимущество написания JSP с использованием только JSTL, потому что они получают все свои динамические данные в другом месте. Позвольте сервисному уровню иметь бизнес-логику и определить, какие данные нужны JSP.
Это также отвечает на ваш вопрос о модульном тестировании. Вам не нужно проводить юнит-тестирование JSP; это были бы селеновые тесты пользовательского интерфейса. Если логика находится на уровне сервиса, очевидно, как вы ее тестируете.
JSP не должны наследоваться. Вы, конечно, можете составить их вместе, используя что-то вроде SiteMesh, но наследование не участвует в ваших JSP. Как только они наследуются от Servlet, цепочка должна быть прекращена.
Кроме того, это ложная альтернатива. Никто не должен требовать повторного использования, наследования или модульного тестирования. Но это не значит, что нет явного победителя: это JSTL. Никто не должен использовать скриптлеты в JSP, за исключением очень редких однострочников. Скриплеты умоляют о неприятностях.
В наши дни я предпочитаю Velocity как шаблонное решение для веб-интерфейса для Java, а не JSP. Просто мое мнение.