【200期】面试官——你能简单说说 SpringMVC 的执行原理吗?

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 【200期】面试官——你能简单说说 SpringMVC 的执行原理吗?

点击上方“Java面试题精选”,关注公众号

面试刷图,查缺补漏

号外:往期面试题,10篇为一个单位归置到本公众号菜单栏-面试题,有需要的欢迎翻阅

阶段汇总集合:

大家是否遇到过被面试官问了这样一句话:“来聊聊springmvc执行原理”。是的,springmvc的执行流程是面试的高频点,今天我就来浅谈它!

一、下面通过一个简单的springmvc程序去走进它。

1、在ssm中,springmvc作为controller层去实现处理请求,响应页面,所以需要controller层。

HelloController这个类需要实现Controller这个接口,并且覆写handleRequest这个方法。

在类中编写如下代码:


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、去资源路径下创建springmvc的配置文件。

内容如下:


?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这个类会自动找到与请求一致的benaid--
       bean id="/hello" class="com.zhang.controller.HelloController"/
/beans

3、在web.xml中配置springmvc的核心控制器DispatchServlet。

内容如下:


?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-namedispatcherServlet/servlet-name
        servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class
!--        初始化时加载配置文件--
        init-param
            param-namecontextConfigLocation/param-name
            param-valueclasspath:springmvc.xml/param-value
        /init-param
!--        开启服务器时启动--
        load-on-startup1/load-on-startup
    /servlet
    servlet-mapping
        servlet-namedispatcherServlet/servlet-name
!--//*的区别
    /:只会去匹配请求,不会匹配jsp页面
    /*:会匹配所有请求
--
        url-pattern//url-pattern
    /servlet-mapping
/web-app

4、创建如下图jsp文件。

5、将项目部署到tomcat上并运行。

如果出现404错误,可以去检查一下artifacts下面相应的war有没有jlib目录

到此就运行成功了。

二、根据上面的程序来理解下面的执行原理。

下面分几步来解释:

1. DispatcherServlet:前端控制器,作为整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。

2. HandlerMapping:处理器映射器,DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url去查找对应的处理。

3. HandlerExecution:具体的handler(处理),将解析后的url传递给DispatcherServlet。

4. HandlerAdapter:处理器适配器,将DispatcherServlet传递的信息去执行相应的controller。

5.Controller层中调用service层,获得数据放在ModelAndView对象中,并给ModelAndView设置页面信息。

6.HandlerAdapter将视图名传递给DispatcherServlet。

7.DispatcherServlet调用视图解析器来解析HandlerAdapter传递的视图名。

8.视图解析器将解析的视图名传给DispatcherServlet。

9.DispatcherServlet根据视图解析器返回的视图名调用具体的视图。

10.用户获得视图。

下图为执行原理图:

END

来源:cnblogs.com/yang-guang-zhang/p/12896598.html

十期推荐

与其在网上拼命找题?** 不如马上关注我们~**

【200期】面试官:你能简单说说 SpringMVC 的执行原理吗?

原文始发于微信公众号(Java面试题精选):

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 【200期】面试官——你能简单说说 SpringMVC 的执行原理吗?


 上一篇
【199期】100%会用到的hashCode()和equals()方法及使用规范,你掌握了吗? 【199期】100%会用到的hashCode()和equals()方法及使用规范,你掌握了吗?
点击上方“Java面试题精选”,关注公众号 面试刷图,查缺补漏 号外:往期面试题,10篇为一个单位归置到本公众号菜单栏-面试题,有需要的欢迎翻阅 阶段汇总集合: 背景在看阿里巴巴Java开发手册手册时,看到了有关hashCode()和equ
2021-04-05
下一篇 
【201期】面试官——String长度有限制吗?是多少?还好我看过 【201期】面试官——String长度有限制吗?是多少?还好我看过
点击上方“Java面试题精选”,关注公众号 面试刷图,查缺补漏 号外:往期面试题,10篇为一个单位归置到本公众号菜单栏-面试题,有需要的欢迎翻阅 阶段汇总集合: 前言话说Java中String是有长度限制的,听到这里很多人不禁要问,Stri
2021-04-05