SpringMvc专题

简介: SpringMvc笔记(持续更新)此方法的执行时机是在控制器方法执行之前,所以我们通常是使用此方法对请求部分进行增强。同时由于结果视图还没有创建生成,所以此时我们可以指定响应的视图。

SpringMvc专题

1.PathVariable

文章目录


前言

SpringMvc笔记(持续更新)

正文

它是 SpringMVC 在 3.0 之后新加入的一个注解,是 SpringMVC 支持 Restful 风格 URL 的一

个重要标志。

该注解的作用大家已经非常熟悉了,就是把藏在请求 URL 中的参数,给我们控制器方法的形参赋

值。而Restful

风格的 URL,在现如今的开发中使用越来越普遍了。那么它是如何实现封装的呢?请看下图:

首先还是执行到红框中解析参数这行代码,

我们看出 SpringMVC 在实现请求 URL 使用占位符传参并封装到控制器方法的形参中,

是通过请求域来实现的。最后把请求域转成一个 Map,再根据形参的名称作为 key,从 map 中

获取 value,并给形

参赋值。当然如果我们使用了 PathVariable 注解的 value 属性,则不会以形参名称为 key,而是

直接使用 value

属性的值作为 key 了。

拦截器的 AOP 思想

AOP 思想是 Spring 框架的两大核心之一,是解决方法调用依赖以及提高方便后期代码维护的重要

思想。它是

把我们代码中高度重复的部分抽取出来,并在适当的时机,通过代理机制来执行,从而做到不修改

源码对已经写好

的方法进行增强。

而拦截器正式这种思想的具体实现。

拦截器代码

1 public class MyInterceptor1 implements HandlerInterceptor{
2
3 @Override
4 public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
e, Object handler) throws Exception {
5
6 System.out.println("拦截器执行了");
7 return false;
8 }
9
10
11
12 @Override
13 public void postHandle(HttpServletRequest request, HttpServletResponse
response, Object handler,ModelAndView modelAndView) throws Exception {
14
15 System.out.println("执行了 postHandle 方法");
16
17 }
18
19 @Override
20 public void afterCompletion(HttpServletRequest request, HttpServletResponse res
ponse, Object handler, Exception ex) throws Exception {
21
22 System.out.println("执行了 afterCompletion 方法");
23 }
24 }
25

自定义拦截器中三个方法说明及使用场景

preHandle

此方法的执行时机是在控制器方法执行之前,所以我们通常是使用此方法对请求部分进行增强。同

时由于结果

视图还没有创建生成,所以此时我们可以指定响应的视图。

postHandle

此方法的执行时机是在控制器方法执行之后,结果视图创建生成之前。所以通常是使用此方法对响

应部分进行

增强。因为结果视图没有生成,所以我们此时仍然可以控制响应结果。

afterCompletion

此方法的执行时机是在结果视图创建生成之后,展示到浏览器之前。所以此方法执行时,本次请求

要准备的数

据具已生成完毕,且结果视图也已创建完成,所以我们可以利用此方法进行清理操作。同时,我们

也无法控制响应

结果集内容。

为什么不使用 XML 配置 SpringMVC

我们先来看基于 XML 的 SpringMVC 配置:

第一步:配置 web.xml

第二步:编写控制器

第三步:编写 springmvc.xml

第四步:配置控制器

第五步:配置处理器映射器,处理器适配器。

第六步:配置视图解析器。

其中,前 3 步和第六步基于注解配置时也都有,而第四第五步注解配置只需:

1 <!‐‐ 开启 springmvc 对注解的支持‐‐>
2
3 <mvc:annotation‐driven></mvc:annotation‐driven>
4
5 而 XML 配置则需:
6
7 <!‐‐ 实现 Controller 接口‐‐>
8
9 <bean
class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
10 <bean name="/sayhello2" class="com.baiqi.web.controller.HelloController2"/>
11
12 <!‐‐ 继承 HttpRequestHandler 类‐‐>
13 <bean name="/sayhello3" class="com.baiqi.web.controller.HelloController3"/>
14 <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
15

而对比注解配置只需一个 Controller 注解和一个 RequestMapping 注解来比,显然注解来的更

方便。

mvc:annotation-driven 的说明

它就相当于在 xml 中配置了:

1 <!‐‐ Begin ‐‐>
2
3 <!‐‐ HandlerMapping ‐‐>
4 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappin
gHandlerMapping"></bean>
5
6 <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
</bean>
7
8 <!‐‐ HandlerAdapter ‐‐>
9 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappin
gHandlerAdapter"></bean>
10
11 <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></b
ean>
12
13 <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapte
r"></bean>
14
15 <!‐‐ HadnlerExceptionResolvers ‐‐>
16 <bean class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHan
dlerExceptionResolver"></bean>
17
18 <bean class="org.springframework.web.servlet.mvc.annotation.ResponseStatusExcep
tionResolver"></bean>
19
20 <bean class="org.springframework.web.servlet.mvc.support.DefaultHandlerExceptio
nResolver"></bean>
21
22 <!‐‐ End ‐‐>

Spring整合SpringMvc注意事项

Bean 被创建两次 ?

• Spring 的 IOC 容器不应该扫描 SpringMVC 中的 bean, 对应的SpringMVC 的 IOC 容器不应该

扫描 Spring 中的 bean

1 <context:component‐scan base‐package="com.baiqi.springmvc" use‐default‐
filters="false">
2 <context:include‐filter type="annotation" expression="org.springframework.st
ereotype.Controller"/
3 <context:include‐filter type="annotation" expression="org.springframework.w
eb.bind.annotation.ControllerAdvice"/>
4 </context:component‐scan>
1
2 <context:component‐scan base‐package="com.baiqi.springmvc">
3 <context:exclude‐filter type="annotation" expression="org.springframework.st
ereotype.Controller"/>
4 <context:exclude‐filter type="annotation" expression="org.springframework.
web.bind.annotation.ControllerAdvice"/>
5 </context:component‐scan>

在 Spring MVC 配置文件中引用业务层的 Bean

• 多个 Spring IOC 容器之间可以设置为父子关系,以实现良好的解耦。

• Spring MVC WEB 层容器可作为 “业务层” Spring 容器的子容器:即 WEB 层容器可以引用业

务层容器的 Bean,而业务层容器却访问不到 WEB 层容器的 Bean

SpingMvc我们就说到这里!!接下来还想看什么专题欢迎到评论区评论!

相关文章
|
搜索推荐 算法 知识图谱
搜索场景下的智能推荐演变之路
本文中,阿里巴巴高级算法专家王悦就为大家分享了搜索场景下的智能推荐演变之路。
|
8月前
|
存储 虚拟化 数据中心
VMware ESXi 8.0U3e macOS Unlocker & OEM BIOS Dell (戴尔) 定制版
VMware ESXi 8.0U3e macOS Unlocker & OEM BIOS Dell (戴尔) 定制版
253 7
VMware ESXi 8.0U3e macOS Unlocker & OEM BIOS Dell (戴尔) 定制版
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
697 15
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
|
安全 测试技术 网络安全
除了安全的编程实践,还有哪些常见的缓冲区溢出攻击防范方法?
【10月更文挑战第20天】综上所述,防范缓冲区溢出攻击需要综合运用多种方法,从系统安全机制增强、漏洞检测与修复、网络安全防护到安全策略与管理等多个层面入手,形成全方位的安全防护体系,才能有效地抵御缓冲区溢出攻击,保障计算机系统和网络的安全。
|
自然语言处理 前端开发 数据可视化
1024程序员节:合合信息“百宝箱”开启智能文档处理新纪元
在数字化转型这股大洪流中,文档处理已然成为企业和开发者日常作业中的一块重要基石。合合信息给开发者送了个大礼——智能文档处理“百宝箱”。这“百宝箱”里头,啥都有,全面、高效、准确,简直就是文档处理的超级神器。他们想通过这个产品,让技术不再那么高不可攀,让更多人,特别是咱们开发者,能轻轻松松地把文档处理的能力加到自己的工作中去。下面来详细看一下吧~
340 0
|
数据采集 传感器
定时中断基本结构
【10月更文挑战第21天】定时中断是在微控制器或计算机系统中,按预设时间间隔自动触发中断请求的机制。它由定时器硬件模块(含计数器、时钟源、控制寄存器)、中断控制器(处理中断请求、设置优先级、中断屏蔽)和中断服务程序(保存现场、执行任务、恢复现场)组成,实现定时任务的精确执行。
378 0
|
运维 数据可视化 搜索推荐
(极态/JIT)新一代软件开发平台
极态云平台,极态云,也叫Jit、极态。是一个基于全新的软件设计理论的开发平台。他继承了经典软件开发理念理论、技术和方法,结合了最新的可视化零代码开发的价值,开创性地创造了面向元素开发方法论、元素动态管理和分层机制、应用继承、通用系统模型,可扩展的可视化工具框架,彻底解决了产业界一直以来非常棘手的许多难题和冲突,大大提升业务系统软件开发和维护的效率,也必将给产业带来更加健康的发展,可以说,是近20年来,软件开发技术最重大的一次进步。
|
数据采集 机器学习/深度学习 算法
"揭秘数据质量自动化的秘密武器:机器学习模型如何精准捕捉数据中的‘隐形陷阱’,让你的数据分析无懈可击?"
【8月更文挑战第20天】随着大数据成为核心资源,数据质量直接影响机器学习模型的准确性和效果。传统的人工审查方法效率低且易错。本文介绍如何运用机器学习自动化评估数据质量,解决缺失值、异常值等问题,提升模型训练效率和预测准确性。通过Python和scikit-learn示例展示了异常值检测的过程,最后强调在自动化评估的同时结合人工审查的重要性。
391 2