В данном случае задача состоит из двух частей:
1. Фронтенд - страница с заданием и текстовой областью для ввода кода. Можете писать на чем угодно: Spring MVC, Node JS, либо вообще статические HTML страницы делать. При нажатии на кнопку "проверить" идет запрос к бекенду, запрос содержит в себе код в текстовом виде.
2. Бекенд - другой http сервер, который отвечает за компиляцию Java кода. Лучше всего его писать на Java (например, Spring). Посмотрите на StackOverflow ответы по запросу "dynamic java code compilation" - выдаст про интерфейс JavaCompiler, есть и библиотеки-обертки с более простым API для этих целей. То есть у вас бекенд сервер будет по определённому URL принимать код как строку, компилировать его, а на выходе выдавать результат компиляции, либо можно даже результат с System.out отправлять.