diff --git a/projects/stage-0/user-platform/my-web-mvc/src/main/java/org/geektimes/web/mvc/FrontControllerServlet.java b/projects/stage-0/user-platform/my-web-mvc/src/main/java/org/geektimes/web/mvc/FrontControllerServlet.java index d61e861c5..cfde5f939 100644 --- a/projects/stage-0/user-platform/my-web-mvc/src/main/java/org/geektimes/web/mvc/FrontControllerServlet.java +++ b/projects/stage-0/user-platform/my-web-mvc/src/main/java/org/geektimes/web/mvc/FrontControllerServlet.java @@ -56,19 +56,19 @@ private void initHandleMethods() { for (Controller controller : ServiceLoader.load(Controller.class)) { Class controllerClass = controller.getClass(); Path pathFromClass = controllerClass.getAnnotation(Path.class); - String requestPath = pathFromClass.value(); + String requestPathByClass = pathFromClass.value(); Method[] publicMethods = controllerClass.getMethods(); // 处理方法支持的 HTTP 方法集合 for (Method method : publicMethods) { Set supportedHttpMethods = findSupportedHttpMethods(method); Path pathFromMethod = method.getAnnotation(Path.class); + String completeRequestPath = requestPathByClass; if (pathFromMethod != null) { - requestPath += pathFromMethod.value(); + completeRequestPath += pathFromMethod.value(); } - handleMethodInfoMapping.put(requestPath, - new HandlerMethodInfo(requestPath, method, supportedHttpMethods)); + handleMethodInfoMapping.put(completeRequestPath, new HandlerMethodInfo(completeRequestPath, method, supportedHttpMethods)); + controllersMapping.put(completeRequestPath, controller); } - controllersMapping.put(requestPath, controller); } } @@ -134,8 +134,8 @@ public void service(HttpServletRequest request, HttpServletResponse response) } if (controller instanceof PageController) { - PageController pageController = PageController.class.cast(controller); - String viewPath = pageController.execute(request, response); + // 调用对应的controller方法 + String viewPath = (String) handlerMethodInfo.getHandlerMethod().invoke(controller, request, response); // 页面请求 forward // request -> RequestDispatcher forward // RequestDispatcher requestDispatcher = request.getRequestDispatcher(viewPath); diff --git a/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/web/controller/HelloWorldController.java b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/web/controller/HelloWorldController.java index 2cf444985..f5ed5eaac 100644 --- a/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/web/controller/HelloWorldController.java +++ b/projects/stage-0/user-platform/user-web/src/main/java/org/geektimes/projects/user/web/controller/HelloWorldController.java @@ -20,4 +20,9 @@ public class HelloWorldController implements PageController { public String execute(HttpServletRequest request, HttpServletResponse response) throws Throwable { return "index.jsp"; } + + @Path("/world2") + public String world2(HttpServletRequest request, HttpServletResponse response) throws Throwable { + return "index.jsp"; + } }