第5章—构建Spring Web应用程序—SpringMVC详解

简介: SpringMVC详解5.1.跟踪Springmvc的请求SpringMVC的核心流程如下:image具体步骤:第一步:发起请求到前端控制器(DispatcherServlet)第二步:前端控制器请求HandlerMapping...

SpringMVC详解

5.1.跟踪Springmvc的请求

SpringMVC的核心流程如下:

img_710cc5239ae652921c21baca6a262748.png
image

具体步骤:

第一步:发起请求到前端控制器(DispatcherServlet)

第二步:前端控制器请求HandlerMapping查找 Handler (可以根据xml配置、注解进行查找)

第三步:处理器映射器HandlerMapping向前端控制器返回Handler,HandlerMapping会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor拦截器对象),通过这种策略模式,很容易添加新的映射策略

第四步:前端控制器调用处理器适配器去执行Handler

第五步:处理器适配器HandlerAdapter将会根据适配的结果去执行Handler

第六步:Handler执行完成给适配器返回ModelAndView

第七步:处理器适配器向前端控制器返回ModelAndView (ModelAndView是springmvc框架的一个底层对象,包括 Model和view)

第八步:前端控制器请求视图解析器去进行视图解析 (根据逻辑视图名解析成真正的视图(jsp)),通过这种策略很容易更换其他视图技术,只需要更改视图解析器即可

第九步:视图解析器向前端控制器返回View

第十步:前端控制器进行视图渲染 (视图渲染将模型数据(在ModelAndView对象中)填充到request域)

第十一步:前端控制器向用户响应结果

5.2.编写基本的控制器

在Springmvc 中,控制器只是方法上添加@RequestMapping注解类,这个注解声明了他们所要处理的请求.如下所示:

@Controller
@RequestMapping
public class StuController {

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

上面的@Controller是一个构造型注解,它基于@Component的注解.在这里,他的目的就是辅助时间组件扫描.当请求"/"路径进来后,他会通过视图解析器返回到"/WEB-INF/views/home.jsp.通过jsp的编写从而展示相关的内容到浏览者面前.

5.2.1.测试控制器

public class HomeControllerTest {
    @Test
    public void testHomePage(){
        HomeController controller =  new HomeController();
        assertEquals("home",controller.home());
        System.out.println("controller层home方法走的通");
    }
}

另外我们能够使用SpringMVC新的测试特性来进行测试:

public class HomeControllerTest {
    @Test
    public void testHomePage() throws Exception {
        HomeController controller =  new HomeController();
        //模拟mvc测试
        MockMvc mockMvc = standaloneSetup(controller).build();
        //执行GET请求 语气得到home视图
        mockMvc.perform(get("/")).andExpect(view().name("home"));
        System.out.println("模拟测试通过");
    }
}

5.2.3.传递模型数据到视图中

@Controller
@RequestMapping
public class HomeController {
    @RequestMapping(value="/",method = GET)
    public String home(String name, Student student){
        return "home";
    }

}

5.3.接受请求的输入

SpringMVC允许多种方式将客户端的数据传送到控制请的处理器的方法中,包括:

  • 查询参数
  • 表单参数
  • 路径变量

5.3.1 处理查询参数

@Autowired
    private StuService stuService;
    @RequestMapping("list")
    public String list(Model model) {
        List<Student> stuList = stuService.getAllStu();
        model.addAttribute("stuList", stuList);
        return "list";
    }

5.3.2 处理表单

@RequestMapping("add")
    public String list(Student student) {
        stuService.addStu(student);
        return "redirect:list";

    }

jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/stu/add">
    name:<input type="text" name="name">
    age:<input type="text" name="age">

    <input type="submit" value="提交">
</form>
</body>
</html>

相关文章
|
4天前
|
Java API 微服务
【Spring Boot系列】通过OpenAPI规范构建微服务服务接口
【4月更文挑战第5天】通过OpenAPI接口构建Spring Boot服务RestAPI接口
23 0
|
14天前
|
编解码 前端开发 JavaScript
构建高效响应式Web界面:现代前端框架的比较
【4月更文挑战第9天】在移动设备和多样屏幕尺寸盛行的时代,构建能够适应不同视口的响应式Web界面变得至关重要。本文深入探讨了几种流行的前端框架——Bootstrap、Foundation和Tailwind CSS,分析它们在创建响应式设计中的优势与局限。通过对比这些框架的栅格系统、组件库和定制化能力,开发者可以更好地理解如何选择合适的工具来优化前端开发流程,并最终实现高性能、跨平台兼容的用户界面。
|
15天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
1月前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
41 1
|
1月前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
141 0
|
6天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
13 0
|
8天前
|
数据库 开发者 Python
Python中使用Flask构建简单Web应用的例子
【4月更文挑战第15天】Flask是一个轻量级的Python Web框架,它允许开发者快速搭建Web应用,同时保持代码的简洁和清晰。下面,我们将通过一个简单的例子来展示如何在Python中使用Flask创建一个基本的Web应用。
|
12天前
|
JavaScript 前端开发 API
Vue.js:构建高效且灵活的Web应用的利器
Vue.js:构建高效且灵活的Web应用的利器
|
20天前
|
编解码 前端开发 开发者
构建响应式Web界面:Flexbox与Grid布局的深度对比
【4月更文挑战第4天】 在现代前端开发中,构建灵活且响应式的用户界面是至关重要的。随着移动设备浏览量的增加,能够适应不同屏幕尺寸和分辨率的布局技术变得必不可少。Flexbox和Grid是CSS提供的两种强大的布局机制,它们各自以独特的方式解决了响应式设计的挑战。本文将深入探讨Flexbox和Grid的核心概念、使用场景和性能考量,为开发者提供在面对不同布局需求时做出明智选择的依据。
|
22天前
|
负载均衡 网络协议 Java
构建高效可扩展的微服务架构:利用Spring Cloud实现服务发现与负载均衡
本文将探讨如何利用Spring Cloud技术实现微服务架构中的服务发现与负载均衡,通过注册中心来管理服务的注册与发现,并通过负载均衡策略实现请求的分发,从而构建高效可扩展的微服务系统。

热门文章

最新文章