MVC о разделении проблем. Таким образом, у вас есть три компонента для каждого взаимодействия запрос / ответ. Сами данные, представление для отображения данных и контроллер, который является мастером марионеток.
Это модель, поэтому вы должны использовать три из них, если они применимы (например, если у вас есть статическая страница, у нее вообще нет модели ... у нее нет модели для отображения, только HTML).
В в некоторых случаях вы можете писать прямо с контроллера , позволяя контроллеру выбирать вид и модель. Это полезно в тех случаях, когда нет смысла программировать отдельное представление, как в случае, указанном вами: вывод файла.
В любом случае вы могли бы запрограммировать отдельный вид . Нечто подобное FileOutputView, которое получает файл или путь или поток для вывода. Таким образом, класс, который решит визуализацию, будет отделен от контроллера. Но в этом случае мало что значит быть таким пуристом.
Я уже говорил program , потому что представление отвечает за рендеринг, но это не обязательно должен быть декларативный тип представления, такой как JSP. Конечно, JSP будет в 99% случаев.