导航

0000 - Spring MVC 原理以及helloworld

Posted on 2019-02-28 10:08  皮堡斯  阅读(334)  评论(0)    收藏  举报

1、概述

  Spring MVC是目前最好的实现MVC设计模式的框架,是Spring框架的一个分支产品。以Spring IOC容器为基础,并利用容易的特性来简化它的配置。Spring MVC相当于Spring的一个子模块,可以很好地和Spring 结合起来进行开发,是Java Web开发者应该要掌握的框架。

2、Spring MVC 能干什么

  实现了MVC设计模式,该设计模式是一种常用的软件架构方式:以Controller(控制层)、Model(模型层)、View(试图层)三个模块分离的形式来组织代码。

  MVC流程:控制层接收到客户端请求,调用模型层生成业务数据,传递给试图层,将最终的业务数据和试图响应给客户端做展示。

3、Spring MVC实现原理

3.1、核心组件:

  • DispatcherServerlet:前端控制器,是整个流程控制的核心,控制其他组件的执行,统一调度,降低组件之间的耦合性,相当于总指挥。
  • Handler:处理器,完成具体业务逻辑,相当于Servlet 或 Action
  • HandlerMapper:DispatcherServlet接受到请求之后,通过HandlerMapper将不同的请求分发到不同的Handler
  • HandlerInterceptor:处理器兰截图,是一个接口,如果我们需要做一些兰截处理,可以来实现这个接口
  • HandlerExecutionChain:处理器执行链,包括两部分内容,Handler和HandlerInterceptor(系统会又一个默认的HandlerInterceptor,如果需要额外拦截处理,可以添加拦截器设置)
  • HandlerAdapter:处理器适配器,Handler执行业务发放之前,需要进行一系列的操作,包括表单数据的验证、数据类型的转换、将表单数据封装到JavaBean等,这一系列的操作,都是由HandlerAdapter来完成,DispatcherServlet通过HandlerAdapter执行不同的Handler
  • ModelAndView:装载了模型数据和视图信息,作为Handler的处理结果,返回给DispatcherServlet
  • ViewResolver:试图解析器,DispatcherServlet通过它将逻辑视图解析成物理视图,最终将渲染结果响应给客户端

3.2、SpringMVC实现流程及使用

  1. 客户端请求被DispatcherServlet(前端控制器)接收
  2. 根据HandlerMapper映射到Handler
  3. 生成Handler和HandlerInterceptor(如果由则生成)
  4. Handler和HandlerInterceptor以HandlerExecutionChain的形式一并返回给DispatcherServlet
  5. DispatcherServlet通过HandlerAdapter调用Handler的方法做业务逻辑处理
  6. 返回一个ModelAndView对象给DispatcherServlet
  7. DisptcherServlet将获取的ModelAndView对象传给ViewResolver试图解析器,将逻辑视图解析成物理视图View
  8. ViewResolver返回一个View给DispatcherServlet
  9. Dispatcher根据View进行视图渲染(将模型数据填充到视图中)
  10. DispatcherServlet将渲染后的视图响应给客户端

4、HelloWorld

 4.1、创建Maven工程,导入spring mvc依赖

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>4.3.22.RELEASE</version>
</dependency>

4.2、在web.xml中配置Spring MVC的DispatcherServlet

<servlet>
  <servlet-name>spring-mvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>spring-mvc</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

 4.3、创建spring-mvc.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"
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">

  <context:component-scan base-package="com.ourteam" />

  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/" />
    <property name="suffix" value=".jsp" />
  </bean>

</beans>

自动扫描的类结合注解交给IOC容器来管理,视图解析器是Spring MVC底层的类,开发者只需要进行配置即可完成JSP页面的跳转。配置也很简单,记住一条:目标资源路径=前缀 + 返回值 + 后缀

比如,DispatcherServlet返回index,配置文件中前缀是/,后缀是.jsp,带入上述公式:

  目标资源路径:= /index.jsp。

4.4、创建Handler类

@RequestMapping("/")
@Controller
public class IndexController {

@RequestMapping(value = "/index",method = RequestMethod.GET)
public String index(){
return "index";
}
}

4.5、启动tomcat,打开浏览器输入URL

  1. DispatacherServlet接收到URL请求的index,结合@RequestMapper("/index")注解将请求交给index业务方法
  2. 执行index业务方法,返回“index”字符串
  3. 结合spring-mvc.xml中的视图解析器配置,找到目标资源:/index.jsp,即index.jsp,将该jsp资源返回客户端完成响应