handleRequest org.springframework.web.servlet.mvc.Controller
принимает HttpServletRequest
и HttpServletResponse
в качестве параметров. Из них вы не можете обработать фрагмент URI. Таким образом, контроллер не подходит для управления запросами на основе фрагмента URI.
В моем приложении я реализовал концепцию, очень похожую на контроллер Spring. В моем приложении все еще есть понятие "представления" и "модель". Каждое представление реализовано в отдельном классе и отображается в центральном блоке страницы. Я хотел централизовать логику обработки URL-адресов в этом классе, поэтому я создал класс AbstractControllerEntry
:
public static abstract class AbstractControllerEntry {
public abstract boolean matches(String fragment);
public abstract void open(MainWindow window, String fragment);
}
с несколькими удобными подклассами, такими как ConstantEntry
, PrefixEntry
и RegexEntry
.
Каждый класс представления имеет статический метод, который возвращает AbstractControllerEntry
. Коллекция всех записей хранится в статическом массиве внутри класса MyController
(а не контроллера Spring MVC). При изменении фрагмента (см. UriFragmentUtility) я повторяю все записи, а для первый, который соответствует, я буду называть открытым. Любая другая логика, например поиск объекта модели, находится внутри класса представления, в реализации AbstractControllerEntry
.
Кроме того, есть еще один статический метод для создания фрагмента URI в классе представления, так что каждая ссылка на представление является реальной ссылкой на класс, это решение для неработающих ссылок. И у каждого представления есть метод экземпляра для получения фрагмента для текущего представления, который проверяется на соответствие записи контроллера для повышения надежности.
person
Oliv
schedule
05.09.2012