|
1 | 1 | package org.example.mvc;
|
2 | 2 |
|
3 |
| -import org.example.mvc.controller.Controller; |
4 | 3 | import org.example.mvc.controller.RequestMethod;
|
5 | 4 | import org.example.mvc.view.JspViewResolver;
|
6 | 5 | import org.example.mvc.view.ModelAndView;
|
|
21 | 20 | public class DispatcherServlet extends HttpServlet {
|
22 | 21 | private static final Logger logger = LoggerFactory.getLogger(DispatcherServlet.class);
|
23 | 22 |
|
24 |
| - private RequestMappingHandlerMapping handlerMapping; |
| 23 | + private List<HandlerMapping> handlerMappings; |
25 | 24 |
|
26 | 25 | private List<HandlerAdapter> handlerAdapters;
|
27 | 26 |
|
28 | 27 | private List<ViewResolver> viewResolvers;
|
29 | 28 |
|
30 | 29 | @Override
|
31 | 30 | public void init() {
|
32 |
| - handlerMapping = new RequestMappingHandlerMapping(); |
33 |
| - handlerMapping.init(); |
| 31 | + RequestMappingHandlerMapping rmhm = new RequestMappingHandlerMapping(); |
| 32 | + rmhm.init(); |
34 | 33 |
|
35 |
| - handlerAdapters = Collections.singletonList(new SimpleControllerHandlerAdapter()); |
| 34 | + AnnotationHandlerMapping ahm = new AnnotationHandlerMapping("org.example"); |
| 35 | + ahm.initialize(); |
| 36 | + |
| 37 | + handlerMappings = List.of(rmhm, ahm); |
| 38 | + handlerAdapters = List.of(new SimpleControllerHandlerAdapter(), new AnnotationHandlerAdapter()); |
36 | 39 | viewResolvers = Collections.singletonList(new JspViewResolver());
|
37 | 40 | }
|
38 | 41 |
|
39 | 42 | @Override
|
40 | 43 | protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException {
|
41 |
| - Controller controller = handlerMapping.findHandler(new HandlerKey(request.getRequestURI(), RequestMethod.valueOf(request.getMethod()))); |
| 44 | + String requestURI = request.getRequestURI(); |
| 45 | + RequestMethod requestMethod = RequestMethod.valueOf(request.getMethod()); |
| 46 | + |
| 47 | + Object controller = handlerMappings.stream() |
| 48 | + .filter(hm -> hm.findHandler(new HandlerKey(requestURI, requestMethod)) != null) |
| 49 | + .map(hm -> hm.findHandler(new HandlerKey(requestURI, requestMethod))) |
| 50 | + .findFirst() |
| 51 | + .orElseThrow(() -> new ServletException("No handler for [" + requestMethod + ", " + requestURI + "]")); |
42 | 52 |
|
43 | 53 | try {
|
44 | 54 | HandlerAdapter handlerAdapter = handlerAdapters.stream()
|
|
0 commit comments