美文网首页
5. SpringMVC基础

5. SpringMVC基础

作者: 月影追猎者 | 来源:发表于2019-10-25 10:19 被阅读0次

SpringMVC架构

  1. 用户发送请求至前端控制器DispatcherServlet,前端控制器收到请求后调用HandlerMapping处理器映射器。
  2. HandlerMapping把请求映射为HandlerExecutionChain对象,包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器对象。
  3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器,一并返回给DispatcherServlet。
  4. DispatcherServlet通过HandlerAdapter处理器适配器调用处理器。
  5. 执行处理器(Controller,后端控制器),返回执行结果,封装在ModelAndView中。
  6. DispatcherServlet将ModelAndView传给ViewReslover视图解析器,ViewResolver将把逻辑视图名解析为具体View,通过这种策略模式,容易更换其它视图技术。
  7. ViewReslover解析后返回具体View。
  8. DispatcherServlet对View进行渲染视图(即将对象模型的数据填充至视图中)。此处的Model实际是一个Map数据结构,因此容易支持其它视图技术。
  9. DispatcherServlet将结果响应给用户。

中央控制器
DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,主要负责职责的分派。

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 指定配置文件位置,默认/WEB-INF/*-servlet.xml --> 
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!-- 指定Spring Web MVC处理的请求,例如设置 *.do 或 *.action 等 -->
    <!-- 设置 / 使用Restful风格,需要在springmvc.xml中排除静态资源处理 -->
    <url-pattern>/</url-pattern>
</servlet-mapping>

DispatcherServlet默认配置在DispatcherServlet.properties中,当Spring配置文件中未指定配置时使用默认策略。

DispatcherServlet主要用于职责调度工作,本身主要用于控制流程,主要职责如下:

  1. 文件上传解析,若请求类型是multipart,则通过MultipartResolver进行文件上传解析;
  2. 通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,包括一个处理器、多个HandlerInterceptor拦截器);
  3. 通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);
  4. 通过ViewResolver解析逻辑视图名到具体视图实现;
  5. 本地化解析;
  6. 渲染具体视图;
  7. 若执行过程中遇到异常将交给HandlerExceptionResolver解析。
<url-pattern>/</url-pattern>

仅替换servlet容器的默认内置servlet,用于处理所有与其他注册的servlet不匹配的请求,即静态资源的访问交给该servlet处理,而jsp交给servlet容器内置的JSP servlet处理。

<url-pattern>/*</url-pattern>

覆盖其它所有servlet,包括servlet容器提供的所有servlet,如缺省servlet和JSP servlet。所有请求均在该servlet拦截处理。不推荐使用该方式。

配置文件
applicationContext.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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">

</beans>

springmvc.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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!-- 注解式处理器映射器与注解式处理器适配器 -->
    <mvc:annotation-driven/>
    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
    <!-- 包扫描 -->
    <context:component-scan base-package="controller包名"/>
    <!-- 排除静态资源处理,将静态资源处理交给服务器自动解决 -->
    <mvc:default-servlet-handler/>
</beans>

web.xml

<!-- Spring配置文件 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 启动Spring容器监听器 -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- SpringMVC中央控制器 -->
<servlet>
    <servlet-name>springmvc</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>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 字符集过滤器 -->
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

相关文章

  • 5. SpringMVC基础

    SpringMVC架构 用户发送请求至前端控制器DispatcherServlet,前端控制器收到请求后调用Han...

  • Spring MVC入门

    SpringMVC核心组件 SpringMVC实现流程 XML配置使用 1、SpringMVC基础配置2、XML配...

  • 史上最全最强SpringMVC详细示例实战教程

    SpringMVC学习笔记---- 一、SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导...

  • Spring框架系列 - SpringMVC实现原理之Dispa

    前文我们有了IOC的源码基础以及SpringMVC的基础,我们便可以进一步深入理解SpringMVC主要实现原理,...

  • xml数据转换 Day9 2018-11-27

    5. xml数据转换 5.1 传入xml数据 5.1.1 springmvc-config.xml配置 5.1.2...

  • springMVC基础

    请求流程图 1、客户端发请求,被spring的前段控制器DispatcherServlet捕获 2、Dispatc...

  • SpringMVC基础

    Spring MVC工作原理 在请求离开浏览器时,会带有用户所请求内容的信息,至少会包含请求的URL。但是还可能带...

  • SpringMVC 基础

    一、回顾 MVC 1.1 什么是 MVC MVC 是模型(Model)、视图(View)、控制器(Controll...

  • 5. SpringMVC 文件上传

    1. 文件上传的必要前提 form 表单的 enctype 取值必须是:multipart/form-data(默...

  • Spring MVC框架原理与开发

    一、学习指南 1.基础知识: 1)什么是springMVC;2)springMVC框架原理(掌握);3)sprin...

网友评论

      本文标题:5. SpringMVC基础

      本文链接:https://www.haomeiwen.com/subject/cogjvctx.html