百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

一篇文章带你完全了解SpringMVC,再也不用担心被面试官问了

yuyutoo 2025-01-23 22:09 1 浏览 0 评论

一丶SpringMVC概述

  • Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC 框架之一
  • Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架
  • Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口。
  • 支持 REST 风格的 URL 请求
  • 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性

二丶SpringMVC简单使用

1)在 web.xml 中配置 DispatcherServlet:


????
????????dispatcherServlet
????????org.springframework.web.servlet.DispatcherServlet
????????
????????
????????
????????????contextConfigLocation
????????????classpath:springmvc.xml
????????
????????1
????
????
????????dispatcherServlet
????????/
????

2)加入 Spring MVC 的配置文件




????
????

????
????
????????
????????
????

3)编写处理请求的处理器,并使用@Controller 注解标识为处理器

@Controller
public?class?HelloWorldController?{
????/**
???????1.?使用?@RequestMapping?注解来映射请求的?URL
???????2.?返回值会通过视图解析器解析为实际的物理视图,?对于?InternalResourceViewResolver?视图解析器,?会做如下的解析:
??????????通过?prefix?+?returnVal?+?后缀?这样的方式得到实际的物理视图,?然会做转发操作
??????????==>?/WEB-INF/views/success.jsp
?????*/
????@RequestMapping("/helloworld")
????public?String?hello(){
????????System.out.println("hello?world");
????????return?"success";
????}
}

4) 编写视图 JSP

在/WEB-INF/views/目录下创建一个succes.jsp

<%@?page?language="java"?contentType="text/html;?charset=UTF-8"?pageEncoding="UTF-8"%>
<%@?taglib?prefix="fmt"?uri="http://java.sun.com/jsp/jstl/fmt"?%>




Insert?title?here


????

成功跳转页面

5)将项目运行起来访问 :localhost:8080/hellowoorld

三丶使用 @RequestMapping 映射请求

  • Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求
  • 在控制器的类定义及方法定义处都可标注 类定义:提供初步的请求映射信息。相对于 WEB 应用的根目录 方法:提供进一步的细分映射信息。相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于` WEB 应用的根目录`
  • DispatcherServlet 截获请求后,就通过控制器上@RequestMapping 提供的映射信息确定请求所对应的处理 方法。

1)标准请求头

2)@RequestMapping

@RequestMapping 的valuemethodparamsheads 分别表示请求 URL请求方法请求参数请求头的映射条件,他们之间是与的关系,联合使用多个条件可让请求映射更加精确化。

/**
?????*?可以使用?params?和?headers?来更加精确的映射请求.?params?和?headers?支持简单的表达式.
?????*?
?????*?@return
?????*/
????@RequestMapping(value?=?"testParamsAndHeaders",
????????????????????params?=?{?"username","age!=10"?},
????????????????????headers?=?{?"Accept-Language=en-US,zh;q=0.8"?},
????????????????????method?=?RequestMethod.POST)
????public?String?test()?{
????????System.out.println("test...");
????????return?"success";
????}

3)支持Ant 风格

  • ? :匹配文件名中的一个字符

/user/createUser?

匹配 /user/createUsera 或者 user/createUserb 等 URL

  • * :匹配文件名中的任意字符

/user/*/createUser

匹配 /user/aaa/createUser 或者 /user/bbb/createUser 等 URL

  • ** :匹配多层路径

/user/**/createUser

匹配 /user/createUser 或者 /user/aaa/bbb/createUser 等 URL

四丶@PathVariable

映射 URL 绑定的占位符

  • 带占位符的 URL 是 Spring3.0 新增的功能,该功能在 SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义
  • 通过@PathVariable可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中。
/**
?*?@PathVariable?可以来映射?URL?中的占位符到目标方法的参数中.
?*/
@RequestMapping("/testPathVariable/{id}")
public?String?test(@PathVariable("id")?Integer?id)?{
????System.out.println("id:?"?+?id);
????return?"success";
}

五丶REST风格

REST:即 Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便, 所以正得到越来越多网站的采用

示例:

  • /order/1 HTTP GET :得到 id = 1 的 order 记录
  • /order/1 HTTP DELETE:删除 id = 1的 order 记录
  • /order/1 HTTP PUT:更新 id = 1的 order 记录
  • /order HTTP POST:新增 一条order记录

六丶@RequestParam 绑定请求参数值

  • 在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法
  • value:参数名
  • required:是否必须;默认为 true,表示请求参数中必须包含对应的参数,若不存在,将抛出异常
/**
?*?@RequestParam?来映射请求参数.?value?值即请求参数的参数名?required?该参数是否必须.?默认为?true
?*???????????????defaultValue?请求参数的默认值
?*/
@RequestMapping(value?=?"/testRequestParam")
public?String?testRequestParam(
????????@RequestParam(value?=?"username")?String?username,
????????@RequestParam(value?=?"age",?required?=?false,?defaultValue?=?"0")?int?age)?{
????System.out.println("testRequestParam,?username:?"?+?username?+?",?age:?"?+?age);
????return?"success";
}

七丶@RequestHeader 绑定请求报头的属性值

/**
?*???映射请求头信息?用法同?@RequestParam
?*/
@RequestMapping("/testRequestHeader")
public?String?testRequestHeader(
????????@RequestHeader(value?=?"Accept-Language")?String?al)?{
????System.out.println("testRequestHeader,?Accept-Language:?"?+?al);
????return?"success";
}

八丶@CookieValue 绑定请求中的 Cookie 值

/**
?*?@CookieValue:?映射一个?Cookie?值.?属性同?@RequestParam
?*/
@RequestMapping("/testCookieValue")
public?String?testCookieValue(@CookieValue("JSESSIONID")?String?sessionId)?{
????System.out.println("testCookieValue:?sessionId:?"?+?sessionId);
????return?"success";
}

九丶POJO 对象绑定请求参数值

/**
?*?Spring?MVC?会按请求参数名和?POJO?属性名进行自动匹配,?自动为该对象填充属性值。支持级联属性。
?*?如:dept.deptId、dept.address.tel?等
?*/
@RequestMapping("/testPojo")
public?String?testPojo(User?user)?{
????System.out.println("testPojo:?"?+?user);
????return?"success";
}

十丶MVC 中Handler 方法可以接收的ServletAPI 类型的参数

  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
  • Writer
  • java.security.Principal
  • Locale
  • InputStream
  • OutputStream
  • Reader

十一丶处理模型数据

1)ModelAndView

处理方法返回值类型为 ModelAndView时,方法体可通过该对象添加模型数据,ModelAndView中既包含视图信息,也包含模型数据信息

2)Map 及 Model

入参为
org.springframework.ui.Model

org.springframework.ui.ModelMap
java.uti.Map 时,处理方法返回时,Map 中的数据会自动添加到模型中。

3)@SessionAttributes:

将模型中的某个属性暂存到HttpSession中,以便多个请求之间可以共享这个属性(从session域中获取)

  • 若希望在多个请求之间共用某个模型属性数据,则可以在 控制器类上标注一个 @SessionAttributes,Spring MVC 将在模型中对应的属性暂存到 HttpSession 中。
  • @SessionAttributes除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中 1)@SessionAttributes(types=User.class): 会将隐含模型中所有类型为 User.class 的属性添加到会话中 2)@SessionAttributes(value={“user1”, “user2”}):会将隐含模型中对象名为user1user2 的属性添加到会话中 3)@SessionAttributes(types={User.class, Dept.class}):会将隐含模型中所有类型为 User.classDept.class 的属性添加到会话中 4)@SessionAttributes(value={“user1”, “user2”}, types={Dept.class}):会将隐含模型中对象名为user1user2 的属性和所有类型为 Dept.class 的属性添加到会话中

4)@ModelAttribute

方法入参标注该注解后, 入参的对象就会放到数据模型中

十二丶@ModelAttribute

  • 在方法定义上使用 @ModelAttribute 注解:Spring MVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法。
  • 在方法的入参前使用 @ModelAttribute 注解:
  • 可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参
  • 将方法入参对象添加到模型中

示例:

十三丶视图和视图解析器

  • 请求处理方法执行完成后,最终返回一个 ModelAndView 对象。对于那些返回 StringViewModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个 ModelAndView 对象,它包含了逻辑名和模型对象的视图。
  • Spring MVC 借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是 JSP,也可能是 Excel、JFreeChart等各种表现形式的视图。
  • 对于最终究竟采取何种视图对象对模型数据进行渲染,处理器并不关心,处理器工作重点聚焦在生产模型数据的工 作上,从而实现 MVC 的充分解耦。

1)视图

我们只需要实现View这个接口就可以自定义视图

示例:

@Component
public?class?HelloView?implements?View{
????@Override
????public?String?getContentType()?{
????????return?"text/html";
????}
????@Override
????public?void?render(Map?model,?HttpServletRequest?request,
????????????HttpServletResponse?response)?throws?Exception?{
????????response.getWriter().print("hello?view,?time:?"?+?new?Date());
????}
}
@RequestMapping("/testView")
????public?String?testView(){
????????System.out.println("testView");
????????return?"helloView";?//这里返回的就是我们自定义的视图
????}

2)视图解析器

  • SpringMVC 为逻辑视图名的解析提供了不同的策略,可以在 Spring WEB 上下文中配置一种多种解析策略,并指定他们之间的先后顺序。每一种映射策略对应一个具体的视图解析器实现类。
  • 视图解析器的作用比较单一,将逻辑视图解析为一个具体的视图对象
  • 所有的视图解析器都必须实现 ViewResolver 接口。
  • 程序员可以选择一种视图解析器或混用多种视图解析器。
  • 每个视图解析器都实现了Ordered接口并开放出一个 order 属性,可 以通过order 属性指定解析器的优先顺序,order 越小优先级越高
  • SpringMVC 会按视图解析器顺序的优先顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则将抛出 ServletException 异常

SpringMVC.xml中的配置:



????
????





????

最后,关于面试我还通过一些渠道整理了大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。领取方式:转发+关注,然后私信【资料】即可免费领取~

还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。

以及架构技术进阶视频,也一起送给大家

资料领取方式

1、关注,转发

2、私信发送:资料

相关推荐

史上最全的浏览器兼容性问题和解决方案

微信ID:WEB_wysj(点击关注)◎◎◎◎◎◎◎◎◎一┳═┻︻▄(页底留言开放,欢迎来吐槽)●●●...

平面设计基础知识_平面设计基础知识实验收获与总结
平面设计基础知识_平面设计基础知识实验收获与总结

CSS构造颜色,背景与图像1.使用span更好的控制文本中局部区域的文本:文本;2.使用display属性提供区块转变:display:inline(是内联的...

2025-02-21 16:01 yuyutoo

写作排版简单三步就行-工具篇_作文排版模板

和我们工作中日常word排版内部交流不同,这篇教程介绍的写作排版主要是用于“微信公众号、头条号”网络展示。写作展现的是我的思考,排版是让写作在网格上更好地展现。在写作上花费时间是有累积复利优势的,在排...

写一个2048的游戏_2048小游戏功能实现

1.创建HTML文件1.打开一个文本编辑器,例如Notepad++、SublimeText、VisualStudioCode等。2.将以下HTML代码复制并粘贴到文本编辑器中:html...

今天你穿“短袖”了吗?青岛最高23℃!接下来几天气温更刺激……

  最近的天气暖和得让很多小伙伴们喊“热”!!!  昨天的气温到底升得有多高呢?你家有没有榜上有名?...

CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式

之前也有写过CSS优惠券样式《CSS3径向渐变实现优惠券波浪造型》,这次再来温习一遍,并且将更为详细的讲解,从布局到具体样式说明,最后定义CSS变量,自定义主题颜色。布局...

柠檬科技肖勃飞:大数据风控助力信用社会建设

...

你的自我界限够强大吗?_你的自我界限够强大吗英文

我的结果:A、该设立新的界限...

行内元素与块级元素,以及区别_行内元素和块级元素有什么区别?

行内元素与块级元素首先,CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,分别为块级(block)、行内(inline)。块级元素:(以下列举比较常...

让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华
让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华

去年的两会期间,习近平总书记在参加人大会议四川代表团审议时,对治蜀兴川提出了明确要求,指明了前行方向,并带来了“祝四川人民的生活越来越安逸”的美好祝福。又是一年...

2025-02-21 16:00 yuyutoo

今年国家综合性消防救援队伍计划招录消防员15000名

记者24日从应急管理部获悉,国家综合性消防救援队伍2023年消防员招录工作已正式启动。今年共计划招录消防员15000名,其中高校应届毕业生5000名、退役士兵5000名、社会青年5000名。本次招录的...

一起盘点最新 Chrome v133 的5大主流特性 ?

1.CSS的高级attr()方法CSSattr()函数是CSSLevel5中用于检索DOM元素的属性值并将其用于CSS属性值,类似于var()函数替换自定义属性值的方式。...

竞走团体世锦赛5月太仓举行 世界冠军杨家玉担任形象大使

style="text-align:center;"data-mce-style="text-align:...

学物理能做什么?_学物理能做什么 卢昌海

作者:曹则贤中国科学院物理研究所原标题:《物理学:ASourceofPowerforMan》在2006年中央电视台《对话》栏目的某期节目中,主持人问过我一个的问题:“学物理的人,如果日后不...

你不知道的关于这只眯眼兔的6个小秘密
你不知道的关于这只眯眼兔的6个小秘密

在你们忙着给熊本君做表情包的时候,要知道,最先在网络上引起轰动的可是这只脸上只有两条缝的兔子——兔斯基。今年,它更是迎来了自己的10岁生日。①关于德艺双馨“老艺...

2025-02-21 16:00 yuyutoo

取消回复欢迎 发表评论: