【200期】面試官:你能簡(jiǎn)單說(shuō)說(shuō) SpringMVC 的執(zhí)行原理嗎?
閱讀本文大概需要 2.8 分鐘。
來(lái)自:cnblogs.com/yang-guang-zhang/p/12896598.html
一、下面通過(guò)一個(gè)簡(jiǎn)單的springmvc程序去走進(jìn)它。

public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mv = new ModelAndView();
String msg="HelloSpringmvc!";
mv.addObject("msg",msg);
mv.setViewName("test");
return mv;
}
}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置處理器映射器-->
<bean id="beanNameUrlHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 配置處理器適配器-->
<bean id="controllerHandlerAdapter" class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 配置視圖解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 路徑前綴-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 路徑后綴-->
<property name="suffix" value=".jsp"/>
</bean>
<!-- BeanNameUrlHandlerMapping這個(gè)類會(huì)自動(dòng)找到與請(qǐng)求一致的benaid-->
<bean id="/hello" class="com.zhang.controller.HelloController"/>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置前端控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 初始化時(shí)加載配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 開(kāi)啟服務(wù)器時(shí)啟動(dòng)-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!--/和/*的區(qū)別
/:只會(huì)去匹配請(qǐng)求,不會(huì)匹配jsp頁(yè)面
/*:會(huì)匹配所有請(qǐng)求
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>


二、根據(jù)上面的程序來(lái)理解下面的執(zhí)行原理。
DispatcherServlet:前端控制器,作為整個(gè)SpringMVC的控制中心。用戶發(fā)出請(qǐng)求,DispatcherServlet接收請(qǐng)求并攔截請(qǐng)求。HandlerMapping:處理器映射器,DispatcherServlet調(diào)用HandlerMapping,HandlerMapping根據(jù)請(qǐng)求url去查找對(duì)應(yīng)的處理。HandlerExecution:具體的handler(處理),將解析后的url傳遞給DispatcherServlet。HandlerAdapter:處理器適配器,將DispatcherServlet傳遞的信息去執(zhí)行相應(yīng)的controller。
推薦閱讀:
【199期】100%會(huì)用到的hashCode()和equals()方法及使用規(guī)范,你掌握了嗎?
【198期】面試官:你能說(shuō)出 方法重載和方法重寫 的原理嗎?
【197期】華為OD兩輪技術(shù)面試記錄,給后來(lái)人一個(gè)參考!
微信掃描二維碼,關(guān)注我的公眾號(hào)
朕已閱 

