当前位置: 首页 > news >正文

SpringMVC系列之技术点定向爆破一

对SpringMVC的技术点进行逐个拆解,定向爆破。

DispatcherServlet详解

  • DispatcherServlet中init-param的配置

DispatcherServlet负责接收除“.jsp”外的所有请求并交给Spring处理。因此DispatcherServlet需要优先启动。同时需要加载spring容器的配置,目的是为了让SpringMVC中相关bean也能被初始化。如何实现Spring容器的配置加载呢?需要在init-param中指明。

<init-param><param-name>contextConfigLocation</param-name><param-value>classpath:mvc.xml</param-value></init-param>

当然,如果不做这一块的配置,SpringMVC也会默认去找web-inf文件夹中的名为当前DispatcherServlet的Servlet名字的[servletname]-servlet.xml文件作为默认的Spring容器配置文件。

  • DispatcherServlet的映射路径:

路径符号匹配内容
/匹配除了.jsp以为的所有路径
/*匹配所有请求
.action或 .do匹配url以.do或 .action为结尾的路径
/request/*只匹配以“/request”路径前缀的请求

SpringMVC的运行流程

  • 客户端发送请求

  • tomcat接收对应的请求

  • SpringMVC的核心调度器DispatcherServlet接收到所有请求

  • 请求地址与@RequestMapping注解进行匹配,定位到具体的类和具体的处理方法(封装在Handler中)

  • 核心调度器找到Handler后交给HandlerAdapter执行具体的Handler

  • 执行后Controller将具体的执行结果(ModelAndView)返回给HandlerAdapter

  • 核心调度器吧ModelAndView交给视图解析器,视图解析器找到具体的jsp封装到View对象中

  • View视图把jsp转换成html内容再交给核心调度器

  • 核心调度器把html内容返回给客户端。

RequestMapping注解

在Controller中通过RequestMapping注解来定义匹配请求的URL。

  • RequestMapping注解可以定义在类的上方,作为类的中多个方法的统一URL前缀。

  • RequestMapping注解定义在方法的上方,作为此次请求具体要执行的方法的限定。

/**
@Author: 索尔
*/
@Controller //声明这是一个控制器
@RequestMapping("/hello") //访问路径,等价于url-pattern
public class HelloController {@RequestMapping("/test1") //访问路径public String hello1(){System.out.println("hello world");//具体的业务逻辑return "redirect:/index.jsp"; //跳转:/index.jsp}
}

RequestParam注解

RequestParam注解往往和RequestMapping注解配合使用,用来绑定请求参数和处理方法的参数。

我们来看下RequestParam注解的源码:

@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {@AliasFor("name")String value() default "";@AliasFor("value")String name() default "";boolean required() default true;String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}

通过返回的测试我们得出以下结论:

  • @RequestParam(required = false/true,value = “参数名”,defaultValue = “”) 其中name和value等效这里用value,推荐使用value。

  • value:用于重命名参数,若使用了value,则前端请求时该参数必须与value相同。

  • required:用来制定该参数是否必须传入

    • true:默认值,前端请求时默认必须传入,否则会报400异常。

    • false:前端请求时可以不传,不传时后端收到的是null

  • defaultValue:如果设置了defaultValue,则required不会使用默认值true,而自动为false。当没有穿参数时,就使用默认值。

总结

这一篇文章我们攻克了SpringMVC的四大技术难点,下一期我们将继续对SpringMVC作详细拆解。

相关文章:

  • 怎么实现Servlet的自动加载
  • Hive-数据模型详解(超详细)
  • 【Linux】进程查看|fork函数|进程状态
  • 技术阅读周刊第十一期
  • CSDN-2023年度总结:岁月如故
  • ElasticSearch 搜索数据
  • TiDB 助力保险业首个全栈自主的核心保单系统成功投产
  • python面向对象__str__和__repr__方法
  • CUDA动态并行
  • Java开发框架和中间件面试题(3)
  • 鸿蒙操作系统:从手机到物联网,打造全场景智能体验
  • 〖运维路不弯〗kubernetes(k8s)部署metrics及hpa-example示例
  • 马萨诸塞州道路数据集预处理
  • 声明 | 为打击假冒账号、恶意抄袭账号等诈骗活动,提升本账号权威,本博主特此郑重声明
  • 阿赵UE学习笔记——4、新建关卡
  • [NodeJS] 关于Buffer
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Angular 响应式表单 基础例子
  • js递归,无限分级树形折叠菜单
  • js中的正则表达式入门
  • Magento 1.x 中文订单打印乱码
  • mongo索引构建
  • MySQL的数据类型
  • Node 版本管理
  • Spring Boot MyBatis配置多种数据库
  • SSH 免密登录
  • Yii源码解读-服务定位器(Service Locator)
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 从零开始的无人驾驶 1
  • 从零开始在ubuntu上搭建node开发环境
  • 分布式任务队列Celery
  • 欢迎参加第二届中国游戏开发者大会
  • 聚簇索引和非聚簇索引
  • 如何使用 JavaScript 解析 URL
  • 跳前端坑前,先看看这个!!
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • Mac 上flink的安装与启动
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • # 计算机视觉入门
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (转)linux 命令大全
  • .Net Core 中间件验签
  • .NET 读取 JSON格式的数据
  • .NET 服务 ServiceController
  • .考试倒计时43天!来提分啦!
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [2544]最短路 (两种算法)(HDU)
  • [Android]常见的数据传递方式