springmvc-controller&视图层配置&SpringMVC处理请求的流程

目录

[1. 什么是springmvc](#1. 什么是springmvc)

2.项目中加入springmvc支持

[2.1 导入依赖](#2.1 导入依赖)

[2.2 springMVC配置文件](#2.2 springMVC配置文件)

[2.3 web.xml配置](#2.3 web.xml配置)

[2.4 中文编码处理](#2.4 中文编码处理)

[3. 编写一个简单的controller](#3. 编写一个简单的controller)

[4. 视图层配置](#4. 视图层配置)

[4.1 视图解析器配](#4.1 视图解析器配)

[4.2 静态资源配置](#4.2 静态资源配置)

[4.2 编写页面](#4.2 编写页面)

[4.3 页面跳转方式](#4.3 页面跳转方式)

[5. SpringMVC处理请求的流程](#5. SpringMVC处理请求的流程)

[6. 常用注解](#6. 常用注解)


1. 什么是springmvc

Spring Web MVC是一种基于Java的实现了MVC设计模式的、请求驱动类型的、轻量级Web框架。

ssm:即springmvc, spring, mybatis

2.项目中加入springmvc支持

2.1 导入依赖

复制代码
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>

<!--  JSTL依赖 原因:org.springframework.web.servlet.view.JstlView在视图解析时需要这二个jar包-->
<dependency>
  <groupId>jstl</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>
<dependency>
  <groupId>taglibs</groupId>
  <artifactId>standard</artifactId>
  <version>1.1.2</version>
</dependency>

2.2 springMVC配置文件

将课件中的spring-mvc.xml放入WEB-INF目录下,详细信息见配置文件中的注释。

注:关于注解扫描的优化:

在使用spring+springmvc时会存在两个上下文,一个父上下文spring上下文,一个子上下文springmvc上下文,springmvc上下文可以访问父上下文(即spring上下文),但spring上下文不能访问到子上下文(即springmvc上下文)。

优化思路:spring中配置的注解扫描排除掉controller,而springmvc配置文件中的注解扫描则只需要扫描controller即可。具体配置详见课件中的配置文件。

2.3 web.xml配置

将随课件提供的web.xml放入WEB-INF目录,替换原来的配置文件。需要理解配置文件的各个部分的作用。

2.4 中文编码处理

将随课件提供的EncodingFiter.java,将入项目并在web.xml中配置,以便于处理中文编码。

3. 编写一个简单的controller

注: 示例中用到的注解:

  • @Controller:该注解在springmvc中用于标记一个控制器,类似的注解还有@RestController,不同的是@RestController专门用于标记一个rest风格的接口,相当于@ResponseBody + @Controller合在一起的作用。
  • @RequestMapping:该用于标记请求路径,在有些参考资料中也称之为服务端点。该注释可以用在方法上也可以用在类上。

使用浏览器测试,如果服务后台输出了提示字符串,则说明配置成功,现在页面上会显示错误,因为目前还没有配置页面。

4. 视图层配置

4.1 视图解析器配

注: 如果是前后端分离的开发方式则不需要配置。

4.2 静态资源配置

注: 如果加该配置,则不能正常显示图片, 可以注释掉测试看看。

4.2 编写页面

1)编写一个测试页面

2)修改controller的配置

4.3 页面跳转方式

1)转发: "forward:path"

2)重定向: "redirect:path"

注: 因为页面文件放置在了WEB-INF目录下,所以不能直接重定向到页面。注意看示例。

5. SpringMVC处理请求的流程

主要组件

1 首先用户发送请求-->DispatherServlet

2 DispatcherServlet-->HandlerMapping

3 DispatcherServlet-->HandlerAdapter

4 HandlerAdapter-->处理器功能处理方法的调用

5 ModelAndView的逻辑视图名-->ViewRecolver

6 View-->渲染

7 返回控制权给DispatcherServlet,由DispatcherServlet返回呼应给用户,流程结束

处理流程示意图:

Spring工作流程描述

  1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;

  2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

  3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)

  4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

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

  2. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;

  3. ViewResolver 结合Model和View,来渲染视图

  4. 将渲染结果返回给客户端。

6. 常用注解

  • @Controller:用于标识处理器类
  • @RestController注解相当于@ResponseBody + @Controller合在一起的作用
  • @RequestMapping:请求到处理器功能方法的映射规则,可定义到类和方法,常用参数:value、method
  • @RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定,常用参数:value、required、defaultValue, (required设置成false的参数类型必须是引用类型,因为基本数据类型是不能为null的)
  • @ModelAttribute:请求参数到命令对象的绑定。
    可用@ModelAttribute标注方法参数,方法参数会被添加到Model对象中(作用:向视图层传数据)
    可用@ModelAttribute标注一个非请求处理方法,此方法会在每次调用请求处理方法前被调用(作用:数据初始化)
    可用@ModelAttribute标注方法,方法返回值会被添加到Model对象中(作用:向视图层传数据)
  • @RequestBody:用于目前比较流行的ajax开发的数据绑定(即提交数据的类型为json格式)
相关推荐
mozhiyan232 分钟前
Spring Tool Suite4(STS)下载安装保姆级教程(附安装包)
java·spring·eclipse·sts4·sts4下载教程
没有bug.的程序员43 分钟前
JVM 与 Docker:资源限制的真相
java·jvm·后端·spring·docker·容器
中国胖子风清扬2 小时前
Spring AI 深度实践:在 Java 项目中统一 Chat、RAG、Tools 与 MCP 能力
java·人工智能·spring boot·后端·spring·spring cloud·ai
零一科技2 小时前
Spring AOP 底层实现:JDK 动态代理与 CGLIB 代理的那点事儿
java·后端·spring
Spider Cat 蜘蛛猫2 小时前
`mapper-locations` 和 `@MapperScan`区别
java·spring·maven
枯基Evan2 小时前
applicationTaskExecutor Spring 内置线程池失效
java·数据库·spring
Dolphin_Home2 小时前
【实用工具类】NullSafeUtils:一站式解决Java空值安全与通用操作(附完整源码)
java·网络·spring boot·后端·spring
Li_7695322 小时前
Spring Cloud —— SkyWalking(五)
java·后端·spring·spring cloud·skywalking
武子康2 小时前
Java-189 Guava Cache 源码剖析:LocalCache、Segment 与 LoadingCache 工作原理全解析
java·redis·后端·spring·缓存·guava·guava cache
我命由我123452 小时前
Java 开发使用 MyBatis PostgreSQL 问题:使用了特殊字符而没有正确转义
java·开发语言·数据库·postgresql·java-ee·mybatis·学习方法