SPRING TUTORIAL SPRING TUTORIAL
综合篇
核心篇
数据篇
Web篇
IO篇
集成篇
其他
GitHub (opens new window)
综合篇
核心篇
数据篇
Web篇
IO篇
集成篇
其他
GitHub (opens new window)
  • 框架

    • Spring

      • Spring综合

      • Spring核心

      • Spring数据

      • SpringWeb

        • Spring Web 综述
          • 快速入门
          • SpringMVC 工作流程
          • 参考资料
        • Spring Web 应用
        • Spring MVC 之 DispatcherServlet
        • Spring MVC 之过滤器
        • Spring MVC 之跨域
        • Spring MVC 之视图技术
        • SpringBoot 之应用 EasyUI
      • SpringIO

      • Spring集成

      • Spring安全

      • Spring其他

  • Java
  • 框架
  • Spring
  • SpringWeb
dunwu
2017-11-08
目录

Spring Web 综述

# Spring Web 综述

# 快速入门

下面,通过一个简单的示例来展示如何通过 Spring 创建一个 Hello World Web 服务。

(1)pom.xml 中引入依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

(2)定义 Controller

Spring 构建 RESTful 服务的方法,HTTP 请求由 Controller 处理。 这些组件由 @RestController 注解标识。

【示例】下面的示例定义了一个处理 /greeting 的 GET 请求

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class GreetingController {

    @GetMapping("/greeting")
    public String greeting(@RequestParam(name = "name", required = false, defaultValue = "World") String name,
        Model model) {
        model.addAttribute("name", name);
        return "greeting";
    }

}

(3)创建启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloWorldApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class);
    }

}

(4)启动服务:执行 HelloWorldApplication.main 方法启动 web 服务

(5)测试

打开浏览器,访问 http://localhost:8080/greeting,页面会显示如下内容:

Hello, World!

打开浏览器,访问 http://localhost:8080/greeting?name=dunwu,页面会显示如下内容:

Hello, dunwu!

# SpringMVC 工作流程

Spring MVC 的工作流程可以用一幅图来说明:

img

  1. 向服务器发送 HTTP 请求,请求被前端控制器 DispatcherServlet 捕获。
  2. DispatcherServlet 根据 <servlet-name>-servlet.xml 中的配置对请求的 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用 HandlerMapping 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应的拦截器),最后以HandlerExecutionChain 对象的形式返回。
  3. DispatcherServlet 根据获得的Handler,选择一个合适的 HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的 preHandler(...)方法)。
  4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring 将帮你做一些额外的工作:
    • HttpMessageConverter: 将请求消息(如 Json、xml 等数据)转换成一个对象,将对象转换为指定的响应信息。
    • 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等。
    • 数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等。
    • 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中。
  5. Handler(Controller)执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象;
  6. 根据返回的ModelAndView,选择一个适合的 ViewResolver(必须是已经注册到 Spring 容器中的ViewResolver)返回给DispatcherServlet。
  7. ViewResolver 结合Model和View,来渲染视图。
  8. 视图负责将渲染结果返回给客户端。

# 参考资料

  • 官方
    • Spring 官网 (opens new window)
    • Spring Framework 官方文档 (opens new window)
    • Spring Github (opens new window)
  • 书籍
    • 《Spring In Action》 (opens new window)
  • 教程
    • 《小马哥讲 Spring 核心编程思想》 (opens new window)
    • geekbang-lessons (opens new window)
    • 跟我学 Spring3 (opens new window)
📝 帮助改善此页面! (opens new window)
#Java#框架#Spring#Web
上次更新: 2024/04/24, 07:33:33
Spring 访问 Elasticsearch
Spring Web 应用

← Spring 访问 Elasticsearch Spring Web 应用→

最近更新
01
Spring MVC 之视图技术
02-17
02
Spring MVC 之跨域
02-16
03
Spring Web 应用
02-14
更多文章>
Theme by Vdoing | Copyright © 2019-2024 钝悟(dunwu) | CC-BY-SA-4.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×