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

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

suiw9 2025-02-19 13:52 7 浏览 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、私信发送:资料

相关推荐

俄罗斯的 HTTPS 也要被废了?(俄罗斯网站关闭)

发布该推文的ScottHelme是一名黑客,SecurityHeaders和ReportUri的创始人、Pluralsight作者、BBC常驻黑客。他表示,CAs现在似乎正在停止为俄罗斯域名颁发...

如何强制所有流量使用 HTTPS一网上用户

如何强制所有流量使用HTTPS一网上用户使用.htaccess强制流量到https的最常见方法可能是使用.htaccess重定向请求。.htaccess是一个简单的文本文件,简称为“.h...

https和http的区别(https和http有何区别)

“HTTPS和HTTP都是数据传输的应用层协议,区别在于HTTPS比HTTP安全”。区别在哪里,我们接着往下看:...

快码住!带你十分钟搞懂HTTP与HTTPS协议及请求的区别

什么是协议?网络协议是计算机之间为了实现网络通信从而达成的一种“约定”或“规则”,正是因为这个“规则”的存在,不同厂商的生产设备、及不同操作系统组成的计算机之间,才可以实现通信。简单来说,计算机与网络...

简述HTTPS工作原理(简述https原理,以及与http的区别)

https是在http协议的基础上加了一层SSL(由网景公司开发),加密由ssl实现,它的目的是为用户提供对网站服务器的身份认证(需要CA),以至于保护交换数据的隐私和完整性,原理如图示。1、客户端发...

21、HTTPS 有几次握手和挥手?HTTPS 的原理什么是(高薪 常问)

HTTPS是3次握手和4次挥手,和HTTP是一样的。HTTPS的原理...

一次安全可靠的通信——HTTPS原理

为什么HTTPS协议就比HTTP安全呢?一次安全可靠的通信应该包含什么东西呢,这篇文章我会尝试讲清楚这些细节。Alice与Bob的通信...

为什么有的网站没有使用https(为什么有的网站点不开)

有的网站没有使用HTTPS的原因可能涉及多个方面,以下是.com、.top域名的一些见解:服务器性能限制:HTTPS使用公钥加密和私钥解密技术,这要求服务器具备足够的计算能力来处理加解密操作。如果服务...

HTTPS是什么?加密原理和证书。SSL/TLS握手过程

秘钥的产生过程非对称加密...

图解HTTPS「转」(图解http 完整版 彩色版 pdf)

我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。...

HTTP 和 HTTPS 有何不同?一文带你全面了解

随着互联网时代的高速发展,Web服务器和客户端之间的安全通信需求也越来越高。HTTP和HTTPS是两种广泛使用的Web通信协议。本文将介绍HTTP和HTTPS的区别,并探讨为什么HTTPS已成为We...

HTTP与HTTPS的区别,详细介绍(http与https有什么区别)

HTTP与HTTPS介绍超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的...

一文让你轻松掌握 HTTPS(https详解)

一文让你轻松掌握HTTPS原文作者:UC国际研发泽原写在最前:欢迎你来到“UC国际技术”公众号,我们将为大家提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与翻译。...

如何在Spring Boot应用程序上启用HTTPS?

HTTPS是HTTP的安全版本,旨在提供传输层安全性(TLS)[安全套接字层(SSL)的后继产品],这是地址栏中的挂锁图标,用于在Web服务器和浏览器之间建立加密连接。HTTPS加密每个数据包以安全方...

一文彻底搞明白Http以及Https(http0)

早期以信息发布为主的Web1.0时代,HTTP已可以满足绝大部分需要。证书费用、服务器的计算资源都比较昂贵,作为HTTP安全扩展的HTTPS,通常只应用在登录、交易等少数环境中。但随着越来越多的重要...

取消回复欢迎 发表评论: