<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【200期】面試官:你能簡(jiǎn)單說(shuō)說(shuō) SpringMVC 的執(zhí)行原理嗎?

          共 5913字,需瀏覽 12分鐘

           ·

          2021-05-24 16:26

          程序員的成長(zhǎng)之路
          互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享 
          關(guān)注


          閱讀本文大概需要 2.8 分鐘。

          來(lái)自:cnblogs.com/yang-guang-zhang/p/12896598.html

          大家是否遇到過(guò)被面試官問(wèn)了這樣一句話:“來(lái)聊聊springmvc執(zhí)行原理”。是的,springmvc的執(zhí)行流程是面試的高頻點(diǎn),今天我就來(lái)淺談它!

          一、下面通過(guò)一個(gè)簡(jiǎn)單的springmvc程序去走進(jìn)它。

          1、在ssm中,springmvc作為controller層去實(shí)現(xiàn)處理請(qǐng)求,響應(yīng)頁(yè)面,所以需要controller層。
          HelloController這個(gè)類需要實(shí)現(xiàn)Controller這個(gè)接口,并且覆寫handleRequest這個(gè)方法。
          在類中編寫如下代碼:

          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;
           }
          }

          2、去資源路徑下創(chuàng)建springmvc的配置文件。
          內(nèi)容如下:

          <?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>

          3、在web.xml中配置springmvc的核心控制器DispatchServlet。
          內(nèi)容如下:

          <?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>

          4、創(chuàng)建如下圖jsp文件。
          5、將項(xiàng)目部署到tomcat上并運(yùn)行。
          如果出現(xiàn)404錯(cuò)誤,可以去檢查一下artifacts下面相應(yīng)的war有沒(méi)有jlib目錄
          到此就運(yùn)行成功了。

          二、根據(jù)上面的程序來(lái)理解下面的執(zhí)行原理。

          下面分幾步來(lái)解釋:
          1.DispatcherServlet:前端控制器,作為整個(gè)SpringMVC的控制中心。用戶發(fā)出請(qǐng)求,DispatcherServlet接收請(qǐng)求并攔截請(qǐng)求。
          2.HandlerMapping:處理器映射器,DispatcherServlet調(diào)用HandlerMapping,HandlerMapping根據(jù)請(qǐng)求url去查找對(duì)應(yīng)的處理。
          3.HandlerExecution:具體的handler(處理),將解析后的url傳遞給DispatcherServlet。
          4.HandlerAdapter:處理器適配器,將DispatcherServlet傳遞的信息去執(zhí)行相應(yīng)的controller。
          5.Controller層中調(diào)用service層,獲得數(shù)據(jù)放在ModelAndView對(duì)象中,并給ModelAndView設(shè)置頁(yè)面信息。
          6.HandlerAdapter將視圖名傳遞給DispatcherServlet。
          7.DispatcherServlet調(diào)用視圖解析器來(lái)解析HandlerAdapter傳遞的視圖名。
          8.視圖解析器將解析的視圖名傳給DispatcherServlet。
          9.DispatcherServlet根據(jù)視圖解析器返回的視圖名調(diào)用具體的視圖。
          10.用戶獲得視圖。
          下圖為執(zhí)行原理圖:
          <END>

          推薦閱讀:

          【199期】100%會(huì)用到的hashCode()和equals()方法及使用規(guī)范,你掌握了嗎?

          【198期】面試官:你能說(shuō)出 方法重載和方法重寫 的原理嗎?

          【197期】華為OD兩輪技術(shù)面試記錄,給后來(lái)人一個(gè)參考!

          5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機(jī),樹(shù)莓派,等等。在公眾號(hào)內(nèi)回復(fù)「2048」,即可免費(fèi)獲取!!

          微信掃描二維碼,關(guān)注我的公眾號(hào)

          朕已閱 

          瀏覽 51
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  特级WWW444至码 | 日本一区二区中文字幕 | 免费一级全黄少妇性色生活片 | 婷婷欧美| 色婷婷婷婷 |