監聽器 》過濾器 》 DispatcherSevlet 》前端
【前端控制器】負責分發調度 === Spring Web Mvc 裏面的 DispatcherServletweb
【控制器】業務數據抽取,傳遞 Model 。spring
【視圖解析器】頁面呈現express
【模型】 model modelAndView Mapmvc
DispatcherServlet 怎麼發現 @Controller ?app
原理是 適配器模式,使用 HandlerAdapter。jsp
HandlerIntercepter 攔截器 (貌似是代理模式)post
HandlerMapping 這樣Dispatcher就能根據 @RequestMapping 使用正確的 Controllerurl
HandlerExecutionChain pre controller的方法 post* spa
【web.xml配置 DispatcherServlet 啓動順序】
【dispatcher-servlet.xml 配置】
<web-app> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 默認爲/WEB-INF/$servlet-name$-servlet.xml--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/configs/spring/mvc-dispatcher-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
<beans> <context:annotation-config /> <!-- 配置只掃描 @Controller --> <context:component-scan base-package="com.imooc"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan>
<!-- 打開mvc的註解 數據綁定、 --> <mvc:annotation-driven />
<!-- 靜態資源處理 -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<bean class="org.springframwork.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/view/jsps/" /> <property name="suffix" value="*.jsp"/> </bean> </beans>
spring容器 applicationContext.xml
<beans>
<context:annotation-config />
<context:component-scan base-package="com.imooc">
<context:exclude-fliter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
</beans>
======================= Controller ============================
數據綁定 @RequestParam @PathVariable @ModelAndAttribute
文件上傳 MultipartFile