小言_互联网的博客

了解SpringMVC执行原理深入学习

322人阅读  评论(0)

SpringMVC原理


DispatcherServlet(前端控制器):

  • 用于拦截用户的请求,将url传递给处理器映射器。

  • url分为三部分:

假设url为http://localhost:8080/SpringMVC/Demo01

1、其中http://localhost:8080为服务器域名。
2、SpringMVC为部署在服务器上的web站点(可以理解为项目名)。
3、Demo01为控制器。
  • 注册:
    <!--配置视图解析器-->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--初始化操作-->
        <init-param>
            <!--设置读取的文件不默认读取-->
            <param-name>contextConfigLocation</param-name>
            <!--读取的xml文件-->
            <param-value>classpath:SpringMVC-servlet.xml</param-value>
        </init-param>
        <!--服务器启动DispatcherServlet就启动(服务启动时可能携带一些请求)-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    
	<!--
    / :只匹配请求,不匹配jsp文件(jsp文件直接过滤)
    /* :匹配请求,还匹配jsp文件
    -->
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

HandlerMapping(处理器映射器):

  • 接收DispatcherServlet传递的url,根据url查询Handler。

  • 有多种处理器映射器。

  • 可以使用<mvc:annotation-driven/>来自动注入处理器映射器和处理器适配器,在对应的类或者方法上使用@RequestMappring(“url地址,如:/hello”)。

  • @RequestMappring既放在类上又放在方法上,就会形成父子关系,请求的地址为父路径/子路径。

    Handler(url对应的Contoller类):

  • Handler为url对应的Controller类,使用注解(@Controller)这个基本上不用配置。

HandlerAdapter(处理器适配器):

  • DispatcherServlet将Handler的信息传递给HandlerAdapter进行适配,找到相对应的适配器后执行方法,返回一个ModelAndView对象。
  • 适配失败报错:The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler
  • 和HandlerMapping一样使用<mvc:annotation-driven/>会来自动注入处理器映射器和处理器适配器。

ViewResolver(视图解析器):
见名知意,就是用来解析视图的,不止一个解析器,必写,不能自动注入。

主要干四件事:

  • 1、获取ModelAndView内存储的数据。
  • 2、解析ModelAndView内存储的视图。
  • 3、拼接视图名字,将ModelAndView内存储的视图名和前缀、后缀进行拼接。
<!--
视图解析器:对ModelAndView进行解析
 1、获取ModelAndView内存储的数据
 2、解析ModelAndView内存储的视图名
 3、拼接视图,将视图名和前缀、后缀进行拼接,得出视图的url
 4、将数据渲染到视图上,返回给用户
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
    <property name="prefix" value="WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>
  • 4、将数据渲染到视图上,返回给用户看。

个人画的原理图:

配置提取:

web.xml

    <!--配置视图解析器-->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--初始化操作-->
        <init-param>
            <!--设置读取的文件不默认读取-->
            <param-name>contextConfigLocation</param-name>
            <!--读取的xml文件-->
            <param-value>classpath:SpringMVC-servlet.xml</param-value>
        </init-param>
        <!--服务器启动DispatcherServlet就启动(服务启动时可能携带一些请求)-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!--
    / :只匹配请求,不匹配jsp文件(jsp文件直接过滤)
    /* :匹配请求,还匹配jsp文件
    -->
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

SpringMVC-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       https://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--开启注解支持-->
    <context:component-scan base-package="com.tx.controller"/>
    <!--不过滤静态资源-->
    <mvc:default-servlet-handler/>
    <!--自动帮我们注册处理器映射器和处理器适配器,使用@ResourceMapping来完成注册-->
    <mvc:annotation-driven/>
  	<!--
    视图解析器:对ModelAndView进行解析
    1、获取MethodAndView内存储的数据
    2、解析MethodAndView内存储的视图名
    3、拼接视图,将视图名和前缀、后缀进行拼接,得出视图的url
    4、将数据渲染到视图上,返回给用户
    -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

转载:https://blog.csdn.net/sabstarb/article/details/105386431
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场