Application.java
=========================
public void GET(String urlPattern, Class<? extends Controller> controllerClass, String methodName) {
// TODO verify that `action` exists
addRoute(urlPattern, HttpConstants.Method.GET, new ControllerHandler(controllerClass, methodName));
}
Controller.java
=========================
public class Controller {
private Request request;
private Response response;
private RouteHandlerChain chain;
public Request getRequest() {
return request;
}
public Response getResponse() {
return response;
}
public RouteHandlerChain getChain() {
return chain;
}
protected void init(Request request, Response response, RouteHandlerChain chain) {
this.request = request;
this.response = response;
this.chain = chain;
}
}
ControllerHandler.java
=========================
class ControllerHandler implements RouteHandler {
private Class<? extends Controller> controllerClass;
private String methodName;
public ControllerHandler(Class<? extends Controller> controllerClass, String methodName) {
this.controllerClass = controllerClass;
this.methodName = methodName;
}
public Class<? extends Controller> getControllerClass() {
return controllerClass;
}
public String getMethodName() {
return methodName;
}
@Override
public void handle(Request request, Response response, RouteHandlerChain chain) {
System.out.println("ControllerHandler.handle");
System.out.println("controllerClass = " + controllerClass);
System.out.println("methodName = " + methodName);
try {
// invoke action (a method from controller)
Method method = controllerClass.getMethod(methodName, new Class[]{});
Controller instance = controllerClass.newInstance();
instance.init(request, response, chain);
method.invoke(instance, new Object[] {});
} catch (Exception e) {
throw new PippoRuntimeException(e);
}
}
}
>>> Demo
ContactsController.java
=========================
public class ContactsController extends Controller {
private ContactService contactService;
public ContactsController() {
contactService = new InMemoryContactService();
}
public void index() {
getResponse().getLocals().put("contacts", contactService.getContacts());
getResponse().render("crud/contacts.ftl");
}
}
ControllerDemo.java
=========================
public class ControllerDemo {
public static void main(String[] args) {
Pippo pippo = new Pippo();
pippo.getServer().getSettings().staticFilesLocation("/public");
pippo.getApplication().GET("/", ContactsController.class, "index");
pippo.start();
}
}