001 // Copyright 2008 by Basil Vandegriend. All rights reserved.
002
003 package com.basilv.examples.annotations;
004
005 import java.io.IOException;
006 import java.lang.reflect.Method;
007
008 import javax.servlet.*;
009 import javax.servlet.http.*;
010
011 public class DispatchingServlet extends HttpServlet
012 {
013 @Override
014 protected void doGet(HttpServletRequest request,
015 HttpServletResponse response) throws ServletException,
016 IOException {
017 response.setContentType("text/html;charset=UTF-8");
018
019 String url = request.getPathInfo();
020 ActionExecutor executor = new ActionExecutor(request,
021 response);
022
023 boolean actionFound = false;
024 for (Method method : ActionExecutor.class.getMethods()) {
025 if (method.isAnnotationPresent(WebAction.class)) {
026 WebAction action = method.getAnnotation(
027 WebAction.class);
028 if (url.equals(action.url())) {
029 actionFound = true;
030 try {
031 method.invoke(executor, (Object[]) null);
032 } catch (Exception e) {
033 throw new RuntimeException(
034 "Error invoking method [" + method.getName()
035 + "].", e);
036 }
037 }
038 }
039 }
040 if (!actionFound) {
041 request.setAttribute("message", "No action found");
042 }
043 RequestDispatcher rd = request
044 .getRequestDispatcher("/view.jsp");
045 rd.forward(request, response);
046 }
047
048 @Override
049 protected void doPost(HttpServletRequest request,
050 HttpServletResponse response) throws ServletException,
051 IOException {
052 doGet(request, response);
053 }
054 }