002 Spring MVC 简介

本贴最后更新于 2047 天前,其中的信息可能已经事过景迁

本文为《Spring + MyBatis 企业应用实战》章节笔记

2.1 MVC 思想概述

2.1.1 传统 Model1 和 Model2

  • Model1:整个 Web 应用几乎都由 JSP 页面组成,JSP 页面接收处理客户端请求,对请求处理后直接做出响应。

  • Model2:Servlet 作为前端控制器(Controller),负责接收客户端发送的请求;然后调用后端 JavaBean(Model) 来完成实际的逻辑处理;最后,将其转发到相应的 JSP 页面(View)来处理现实逻辑。

2.1.2 MVC 思想及其优势

MVC 思想将一个应用分成三个基本部分:Model(模型)、View(视图)和 Controller(控制器),这三个部分以最少的耦合协同工作。

优势

  1. 多个视图可以对应一个模型

  2. 模型返回的数据与显示逻辑分离

  3. 应用分为三层,降低耦合,提供了拓展性

  4. 控制层概念很有效,把各个模型和视图组合在一起

  5. MVC 更符合软件工程化管理的精神

2.2 Spring MVC

2.2.1 Spring MVC 的优势

Spring MVC 框架提供了一个 DispatcherServlet 作为前端控制器来分派请求,同时提供灵活的配置处理程序映射、视图解析、语言环境和主题解析,并支持文件上传。

特点

  1. 拥有强大的灵活性、非侵入性和可配置性

  2. 提供一个前端控制器 DispatcherServlet ,无需额外开发

  3. 分工明确,包括控制器、验证器、命令对象、模型对象、处理程序映射视图解析器等

  4. 自动绑定用户输入,并正确地转换数据类型

  5. 使用 Map 对象实现更加灵活的模型数据传输

  6. 内置常见的校验器

  7. 支持国际化

  8. 支持多种视图技术

  9. Spring 提供了简单而强大的 JSP 标签库,支持数据绑定

2.3 开发第一个 Spring MVC 应用

2.3.1 Spring 的下载和安装

2.3.2 Spring MVC 的 DispatcherServlet

使用时需把它配置在 Web 应用的部署描述 web.xml 文件中

它加载时会需要一个 Spring MVC 的配置文件(springmvc-config.xml)。

// web.xml 中 DispatcherServlet 配置信息
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/springmvc-config.xml</param-value>
        <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
<servlet-mapping>
// springmvc-config.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/springbeans-4.2.xsd">

    <bean name="/hello" class="org.zhisheng.controller.HelloController"/>
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlGandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerGandlerAdapter"/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>

2.3.3 基于 Controller 接口的控制器

DispatcherServlet 的核心功能是分发请求,请求会被分发给对应处理的 Java 类,Spring MVC 中称为 Handle。

开发 Handle ,需继承 org.springframework.web.servlet.mvc.Controller 接口,必须实现方法 HandleRequest()

方法签名:

ModelAndView handleRequest (HttpServletRequest request, HttpServletResponse response) throws Excption

Controller 接口的实现类只能处理一个单一请求动作。

示例(步骤(xml 配置))

  1. 增加 Spring 的支持:导包(Spring 包和 commons-logging 包)

  2. 配置 DispatcherServlet:在 web.xml 中添加(servlet)

  3. 配置 Spring MVC 的 Controller:springmvc-config.xml(bean)

  4. Controller 类的实现:HelloController.java(implements/@override handleRequest)

  5. View 页面:welcome.jsp

示例:基于注解的控制器(Spring2.5 后)

  1. Controller 的实现:@Controller、@RequestMapping(value="/hello")

  2. 修改 Spring MVC 配置文件

2.4 详解 DispatcherServlet

DispatcherServlet 的源码如下:

protected void initStrategies(ApplicationContext  context) {
    initMultipartResolver(context); 
    initLocaleResolver(context); 
    initThemeResolver(context);
    initHandlerMappings(context);
    initHandlerAdapters(context); 
    initHandlerExceptionReslvers(context); 
    initRequestToViewNameTranslator(context);
    initViewReslovers(context); 
    initFalshMapManager(context); 
}

initStrategies 方法将在 ApplicationContext 初始化后自动执行,自动扫描上下文的 Bean,根据名称或类型匹配的机制查找自定义的组件。如果没有找到则会配置一套 Spring 的默认组件。

2.5 Spring MVC 执行流程

2.5.1 Spring MVC 应用的开发步骤

  1. 在 web.xml 中定义 DispatcherServlet

  2. POST(定义包含表单数据的 JSP 页面)/GET(则无需这步)

  3. 定义 Handle 类(实现 Controller 接口或使用 @Controller 注解)

  4. 配置 Handle(xml 或注解)

  5. 编写视图资源

2.5.2 Spring MVC 执行流程

  1. 用户向服务器发送请求,请求被 Spring 的前端控制器 DispatcherServlet 截获。

  2. DispatcherServlet 对请求 URL 进行解析,得到 URI。然后根据 URI,调用 HandlerMapping 获得该 Handler 配置的所有相关对象,包括 Handler 对象以及 Handler 对象对应的拦截器,这些对象会被封装到一个 HandlerExecutionChain 对象当中返回。

  3. DispatcherServlet 根据获得的 Handler,选择一个合适的 HandlerAdapter。HanlderAdapter 会被用于处理多种 Handler,调用 Handler 实际处理请求的方法。

  4. 提取请求中的模型数据,开始执行 Handler(Controller)。

  5. Handler 执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象。

  6. 根据 ModelAndView 对象,选择一个合适的 ViewResolver 返回给 DispatcherServlet。

  7. ViewResolver 结合 Model 和 View 来渲染视图。

  8. 将视图渲染结果返回给客户端。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖
  • SSM

    SpringMVC, Spring, MyBatis

    12 引用 • 35 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    941 引用 • 1458 回帖 • 150 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...