public class ApplicationController {
public ApplicationController() {
addResponse("/start", Status.MAIN_MENU, StartCommand.class, "StartPage");
addResponse("/cancel", Status.STARTED, StopCommand.class, "StopPage");
}
Command getDomainCommand(String commandString, Map params) throws ApplicationException {
Response response = getResponse(commandString, getStatus(params));
return response.getDomainCommand();
}
String getView(String commandString, Map params) {
Response response = getResponse(commandString, getStatus(params));
return response.getViewUrl();
}
private Status getStatus(Map params) {
Integer id = (Integer) params.get("sessionID");
Session session = Session.find(id);
return session.getStatus();
}
}
public class FrontServlet...
public void service(HttpServletRequest request, HttpServletResponse response) throws Exception, ApplicationException {
ApplicationController appController = getApplicationController(request);
String commandString = getCommandString(request);
Command comm = appController.getDomainCommand(commandString, getParameters(request));
comm.init(request);
comm.execute();
String view = appController.getView(commandString, getParameters(request));
forward(view, request, response);
}
Логика метода service крайне проста: определяем контроллер приложения, соответствующий заданному запросу; спрашиваем у контроллера, какую команду домена следует применить; выполняем указанную команду; спрашиваем у контроллера, какое представление следует отобразить; передаем управление указанному представлению.