Spring MVC组件及RequestMapping注解

springmvc组件

DispatcherServlet前端控制器

用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet 的存在降低了组件之间的耦合性。

HandlerMapping处理器映射器

HandlerMapping负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

Handler处理器

它就是我们开发中要编写的具体业务控制器。由DispatcherServlet 把用户请求转发到 Handler。由Handler对具体的用户请求进行处理。

HandlAdapter处理器适配器

通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

适配器对应的处理器以及这些处理器的作用:

  1. AnnotationMethodHandlerAdapter 主要是适配注解类处理器,注解类处理器就是我们经常使用的 @Controller 的这类处理器
  2. HttpRequestHandlerAdapter 主要是适配静态资源处理器,静态资源处理器就是实现了 HttpRequestHandler 接口的处理器,这类处理器的作用是处理通过 SpringMVC 来访问的静态资源的请求
  3. SimpleControllerHandlerAdapter 是 Controller 处理适配器,适配实现了 Controller 接口或 Controller 接口子类的处理器,比如我们经常自己写的 Controller 来继承 MultiActionController.
  4. SimpleServletHandlerAdapter 是 Servlet 处理适配器, 适配实现了 Servlet 接口Servlet 的子类的处理器,我们不仅可以在 web.xml 里面配置 Servlet,其实也可以用 SpringMVC 来配置 Servlet,不过这个适配器很少用到,而且 SpringMVC 默认的适配器没有他,默认的是前面的三种。

View Resolver视图解析器

ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象返回给DispatcherServlet

View视图渲染器

view对象会调用render将model中的数据全部存放到request中完成了请求的处理,源码如下:

public interface View {String RESPONSE_STATUS_ATTRIBUTE = View.class.getName() + ".responseStatus";String PATH_VARIABLES = View.class.getName() + ".pathVariables";String SELECTED_CONTENT_TYPE = View.class.getName() + ".selectedContentType";@Nullabledefault String getContentType() {return null;}//把model里的数据存放到request,request和response负载跳转	void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception;
}

SpringMVC执行流程

  • 具体步骤

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

    Ø 第二步:前端控制器请求HandlerMapping查找 Handler

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

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

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

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

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

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

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

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

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

RequestMapping注解

使用说明

  • 作用:用于建立请求URL和处理请求方法之间的对应关系。

  • 出现位置:

    • 类上:

      请求 URL的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以按照模块化管理,例如:

      账户模块:

      /account/add

      /account/update

      /account/delete …

      订单模块:

      /order/add

      /order/update

      /order/delete

      红色的部分就是把RequsetMappding写在类上,使我们的URL更加精细。

    • 方法上:

      请求URL的第二级访问目录,可以窄化请求路径

  • 属性:

    value:用于指定请求的URL。它和path属性的作用是一样的。

    method:用于指定请求的方式。

    注意:以上属性只要出现2个或以上时,他们的关系是与的关系。

窄化路径示例

  • 使用二级目录访问

    @Controller
    @RequestMapping("/account")
    public class AccountController {@RequestMapping("/findAccount")public ModelAndView findAccount() {ModelAndView mv = new ModelAndView();mv.addObject("msg", "欢迎你 springmvc");mv.setViewName("success");return mv;}
    }
    
  • 在index.jsp里面定义超链接

    <a href="/account/findAccount">窄化路径</a>
    

method属性示例

  • 描述需要使用指定的请求方式来请求该方法

    @Controller
    @RequestMapping("/account")
    public class AccountController {//指定的请求方式@RequestMapping(value = "/findAccount1", method = RequestMethod.POST)public ModelAndView findAccount1() {ModelAndView mv = new ModelAndView();mv.addObject("msg", "欢迎你 springmvc");mv.setViewName("success");return mv;}
    }
    
  • 测试:在index.jsp里使用get方式请求

    <a href="/account/findAccount1">请求方式</a>
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/336499.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四、Java中SpringBoot组件集成接入【Knife4j接口文档(swagger增强)】

四、Java中SpringBoot组件集成接入【Knife4j接口文档&#xff08;swagger增强&#xff09;】 1.Knife4j介绍2.maven依赖3.配置类4.常用注解使用1.实体类及属性&#xff08;ApiModel和ApiModelProperty&#xff09;2.控制类及方法&#xff08;Api、ApiOperation、ApiImplicitPar…

vue+springboot+mybatis-plus实现乡村公共文化服务系统

项目前端&#xff1a;https://gitee.com/anxin-personal-project/rural-public-cultural-services-front 项目后端&#xff1a;https://gitee.com/anxin-personal-project/rural-public-cultural-services-behind 1.系统简介 乡村公共服务文化提供给管理员、商家、村民。管理…

面相圆润是有福气的象征

在中国传统文化中&#xff0c;面相是一个非常重要的概念。相信大家肯定听说过“相由心生”这个成语吧&#xff0c;这就是告诉我们&#xff0c;一个人的面貌其实是可以反映出他内心的状态和气质&#xff0c;也可以反映其性格、健康状况和运势等。而一个圆润的面相&#xff0c;则…

SpringBoot 配置文件加载优先级

SpringBoot 配置文件加载优先级 前言SpringBoot 配置文件加载优先级 前言 最近在使用k8s部署项目的时候,发现Dockerfile文件中的命令后面跟的参数,无法覆盖nacos中的参数,今天有时间正好来整理一下Springboot配置的加载顺序 SpringBoot 配置文件加载优先级 整理加载顺序第一个肯…

合宙“全球通“模组Air795UG上市,支持4G+2G全球频段

简介 全球化浪潮之下&#xff0c;各物联网厂商纷纷激流勇进。有的已经在海外开拓一番天地&#xff0c;有的磨刀霍霍准备杀向海外&#xff0c;可谓“国内卷完&#xff0c;国外卷”。 合宙作为物联网设备的核心供应商&#xff0c;自然要为行业客户出海助力。针对海外区域网络设备…

MT6785安卓核心板_联发科MTK6785/Helio G95/曦力G95核心板定制

MT6785安卓核心板是基于MT6785(Helio G95)处理器&#xff0c;具备八核处理器结构&#xff0c;包括2颗主频为2.05GHz的Cortex A76处理器和6颗主频为2.0GHz的Cortex A55处理器&#xff0c;以及六颗Cortex-A55处理器。而在GPU方面&#xff0c;采用了Arm Mali-G76 MC4&#xff0c;频…

C语言基础语法跟练

题源&#xff1a;牛客网 1、输出"Hello Nowcoder!"。开始你的编程之旅吧。 #include <stdio.h>int main() {printf("Hello Nowcoder!");return 0; } 2、KiKi学会了printf在屏幕输出信息&#xff0c;他想输出一架小飞机。请帮他编写程序输出这架小…

蓝牙信标定位原理

定位原理&#xff1a;蓝牙信标的定位原理是基于RSSI蓝牙信号强度来做定位的。 根据应用场景不同&#xff0c;通过RSSI定位原理可分为两种定位方式 一、存在性定位 这种方式通常要求所需定位的区域安装一个蓝牙信标即可&#xff0c;手持终端扫描蓝牙信标信号&#xff0c;扫描…

postman使用-06断言

文章目录 一、断言定义二、 常用的断言三、断言-状态码&#xff08;1&#xff09;单一状态码断言&#xff1a;Status code:Code is 200 检查返回的状态码是否为200原始模板&#xff1a;修改后&#xff1a;括号里的200也可以改成自己要断言的状态码具体步骤&#xff1a;断言成功…

前端-基础 表格标签 - 基本使用及表头单元格 详解

基本使用 &#xff1a; 主要作用 &#xff1a; 即 主要 用于显示&#xff0c;展示数据&#xff0c;因为它可以让数据显示的非常的规整&#xff0c;可读性非常好。 特别是后台展示数据的时候&#xff0c;能够熟练运用表格就显得很重要。 一个清爽简约的表格能够把繁杂 的…

express框架

目录 一、express介绍二、express 使用2.1 express下载2.2 express初体验 三、express 路由3.1 路由的使用3.2 获取参数3.3 获取路由参数 四、express响应设置五、express中间件5.1 什么是中间件5.2 中间件的作用5.3 中间件的类型5.3.1 定义全局中间件5.3.2 多个全局中间件5.3.…

springBoot-自动配置原理

以下笔记内容&#xff0c; 整理自B站黑马springBoot视频&#xff0c;抖音Holis 1、自动配置原理 1.收集Spring开发者的编程习惯&#xff0c;整理开发过程使用的常用技术列表一>(技术集A) 2.收集常用技术(技术集A)的使用参数&#xff0c;整理开发过程中每个技术的常用设置列表…