package controllers;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class FrontController
*/
@WebServlet("/FrontController")
public class FrontController extends HttpServlet {
private static final long serialVersionUID = 1L;
// Initializes the servlet.
public void init(ServletConfig config) throws ServletException {
super.init(config);
Controller.setServletContext(config.getServletContext());
}
// Destroys the servlet.
public void destroy() {
}
/**
* Processes requests for both HTTP GET and POST
* methods.
*
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
java.io.IOException
{
String[] uri;
String action;
Controller.setRequest(request);
Controller.setResponse(response);
// since everything is routed to this FC, we need to reroute the static files
if (request.getRequestURI().replaceAll(request.getContextPath(), "").contains(".")) {
getServletContext().getNamedDispatcher("default").forward(request, response);
return;
}
uri = request.getRequestURI().replaceAll(request.getContextPath(), "").split("\\/");
List cleanURI = new LinkedList();
// if the uri starts or ends with a slash the split will add an
// empty string we create a new List without any empty item
for (String s : uri) {
if (!s.equals("")) {
cleanURI.add(s);
}
}
if (cleanURI.size() == 0) {
try {
Home.index();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
try {
Class> c = Class.forName("controllers." + cleanURI.get(0));
// if the size of the list is 2 we load the specified method
// if not we try loading the index method
action = (cleanURI.size() == 2) ? cleanURI.get(1) : "index";
Method m = c.getMethod(action, null);
m.invoke(null, null);
} catch (ClassNotFoundException e) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* Handles the HTTP GET method.
*
* @param request
* servlet request
* @param response
* servlet response
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
java.io.IOException
{
processRequest(request, response);
}
/**
* Handles the HTTP POST method.
*
* @param request
* servlet request
* @param response
* servlet response
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
java.io.IOException
{
processRequest(request, response);
}
}