当前位置:首页>编程知识库>后端开发知识>面试官:你能简单说说 SpringMVC 的执行原理吗?
面试官:你能简单说说 SpringMVC 的执行原理吗?
阅读 1
2020-11-12
001期~180期汇总,方便阅读(增加设计模式)
大家是否遇到过被面试官问了这样一句话:“来聊聊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-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--        初始化时加载配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
<!--        开启服务器时启动-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</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
十期推荐
181期】HashMap 面试二十一问!
182期】SpringCloud常见面试题(2020最新版)
183期】面试官:线上服务平均响应时间太长,怎么排查?
184期】SQL数据库面试题以及答案(50例题)
185期】面试官:你能说说 Synchronized实现对象锁的两种方式以及它的原理吗?
186期】一口气说出 Synchronized 同步方法的八种使用场景
187期】出现几率比较大的Redis面试题(含答案)
188期】面试官:deletetruncatedrop的区别有哪些,该如何选择
189期】delete后加 limit是个好习惯么
190期】MQ消息中间件,面试能问写什么?
? ~
以上数据来源于网络,如有侵权,请联系删除。
评论 (0)