MVC (Model-view-controller) jest tzw. wzorcem projektowym, stosowanym przy tworzeniu nowoczesnych systemów informatycznych.
Główną koncepcją MVC jest wymuszenie podziału aplikacji na 3 niezależne warstwy reprezentujące kolejno:
Podział na warstwy służy uporządkowaniu architektury systemu. Dzięki temu, że każda logiczna część jest od siebie oddzielona, zmiana w jednym miejscu, nie powoduje konieczności wykonywania lawinowej ilości zmian w innych miejscach systemu.
Mimo, że istnieje wiele frameworków wspierających MVC w innych technologiach, J2EE wiedzie zdecydowany prym jeżeli chodzi o ilość sprawdzonych narzędzi zapewniających implementację oprogramowania zgodnego z wzorcem MVC. Do najbardziej popularnych należą: JSF, Spring oraz Struts.
Model jest komputerową reprezentacją rozpatrywanego problemu. Definiuje elementy, ich atrybuty i powiązania między nimi. Przykładowo, w aplikacji internetowej obsługującej sprzedaż biletów, model może określać reprezentację pojęć takich jak: bilet, wydarzenie, klient.
Widok to część aplikacji odpowiedzialna za prezentację danych. Widoki mogą pobierać odpowiednie dane z modelu, lub modyfikować je. W odniesieniu do poprzedniego przykładu, w aplikacji rezerwującej bilety, widokiem może być strona WWW z formularzem rejestracyjnym dla klienta.
Rolą kontrolerów jest sterowanie aplikacją i komunikacja z użytkownikiem. Kontroler zwykle pośredniczy między przesyłem danych pomiędzy modelem, a widokiem. Kontroler odbierając informacje od użytkownika może zdecydować o dalszym działaniu aplikacji: wyświetlić widok, zmienić stan modelu, lub przesłać sterowanie do innego kontrolera.