三万字<Java基础到就业> SpringMVC 必读(建议收藏)(1)

10,SpringMVC 中函数的返回值是什么?

11,怎么样把ModelMap里面的数据放入Session里面?

12,请说下Springmvc的优点有哪些?


1,Spring MVC 框架有什么用?

====================

Spring Web MVC 框架提供 模型-视图-控制器 架构和随时可用的组件,用于开发灵活且松散耦合的 Web 应用程序。

MVC 模式有助于分离应用程序的不同方面,如输入逻辑,业务逻辑和 UI 逻辑,同时在所有这些元素之间提供松散耦合。

2,Spring MVC 的处理流程?

===================

Web 容器启动时会通知 Spring 初始化容器,加载 Bean 的定义信息并初始化所有单例 Bean,然后遍历容器中的 Bean,获取每⼀个 Controller 中的所有⽅法访问的 URL,将 URL 和对应的 Controller 保存 到⼀个 Map 集合中。

所有的请求会转发给 DispatcherServlet 前端处理器处理,DispatcherServlet 会请求 HandlerMapping

找出容器中被Controler注解修饰的 Bean 以及被RequestMapping修饰的⽅法和类,⽣成Handler 和 HandlerInterceptor 并以⼀个 HandlerExcutionChain 处理器执⾏链的形式返回。

之后 DispatcherServlet 使⽤ Handler 找到对应的 HandlerApapter,通过 HandlerApapter 调⽤Handler 的⽅法,将请求参数绑定到⽅法的形参上,执⾏⽅法处理请求并得到 ModelAndView。

最后 DispatcherServlet 根据使⽤ ViewResolver 试图解析器对得到的 ModelAndView 逻辑视图进⾏解析得到 View 物理视图,然后对视图渲染,将数据填充到视图中并返回给客户端。

3,可以描述一下 DispatcherServlet 的工作流程吗?

==================================

DispatcherServlet 的工作流程可以用一幅图来说明:

image.png

1,向服务器发送 HTTP 请求,请求被前端控制器 DispatcherServlet 捕获。

2,DispatcherServlet 根据 -servlet.xml 中的配置对请求的 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用 HandlerMapping 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应的拦截器),最后以HandlerExecutionChain 对象的形式返回。

3,DispatcherServlet 根据获得的Handler,选择一个合适的 HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的 preHandler(…)方法)。

4,提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。在填充Handler的入参过程中,根据你的配置,Spring 将帮你做一些额外的工作:

HttpMessageConveter:将请求消息(如 Json、xml 等数据)转换成一个对象,将对象转换为指定的响应信息。

数据转换:对请求消息进行数据转换。如String转换成Integer、Double等。

数据根式化:对请求消息进行数据格式化。如将字符串转换成格式化数字或格式化日期等。

数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中。

5. Handler(Controller)执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象;

6. 根据返回的ModelAndView,选择一个适合的 ViewResolver(必须是已经注册到 Spring 容器中的ViewResolver)返回给DispatcherServlet。

7. ViewResolver 结合Model和View,来渲染视图。

8. 视图负责将渲染结果返回给客户端。

4,Spring MVC 有哪些组件?

===================

DispatcherServlet :SpringMVC 中的前端控制器,是整个流程控制的核⼼,负责接收请求并转发给对应的处理组件。

Handler :处理器,完成具体业务逻辑,相当于 Servlet 或 Action。

HandlerMapping :完成 URL 到 Controller 映射,DispatcherServlet 通过 HandlerMapping 将不同请求映射到不同 Handler。

HandlerInterceptor :处理器拦截器,是⼀个接⼝,如果需要完成⼀些拦截处理,可以实现该接⼝。

HandlerExecutionChain :处理器执⾏链,包括两部分内容:Handler 和 HandlerInterceptor。

HandlerAdapter :处理器适配器,Handler执⾏业务⽅法前需要进⾏⼀系列操作,包括表单数据验证、数据类型转换、将表单数据封装到JavaBean等,这些操作都由 HandlerAdapter 完成。 DispatcherServlet 通过 HandlerAdapter 来执⾏不同的 Handler。

ModelAndView :装载模型数据和视图信息,作为 Handler 处理结果返回给 DispatcherServlet。

ViewResolver :视图解析器,DispatcherServlet 通过它将逻辑视图解析为物理视图,最终将渲染的结果响应给客户端。

5,Spring MVC 的相关注解有哪些?

======================

@Controller :在类定义处添加,将类交给IoC容器管理。

@RequtestMapping :将URL请求和业务⽅法映射起来,在类和⽅法定义上都可以添加该注解。 value 属性指定URL请求的实际地址,是默认值。 method 属性限制请求的⽅法类型,包括GET、POST、PUT、DELETE等。如果没有使⽤指定的请求⽅法请求URL,会报405 Method Not Allowed 错误。 params 属性限制必须提供的参数,如果没有会报错。

@RequestParam :如果 Controller ⽅法的形参和 URL 参数名⼀致可以不添加注解,如果不⼀致可以使⽤该注解绑定。 value 属性表示HTTP请求中的参数名。 required 属性设置参数是否必要,默认false。 defaultValue 属性指定没有给参数赋值时的默认值。

@PathVariable :Spring MVC ⽀持 RESTful ⻛格 URL,通过的绑定。

通过PathVariable完成请求参数与形参的绑定。

6,如何解决 POST 请求和 GET 请求中文乱码问题?

=============================

1,解决 POST 请求乱码问题:在 web.xml 中配置一个 CharacterEncodingFilter 过滤器,设置成 utf-8 ;

image.png

GET 请求中出现中文乱码,讲真在url 中传递中文,就不是什么明智之举,最好不要这用做!

但是事情已经发生了,总得要解决的:

1,修改 Tomcat 配置文件;

2,在拼接 url 的时候先做一个编码工作,然后将编码后生成的 url 进行拼接,之后再发送请求,然后再服务端拿到数据后做一次反编码的工作;

3,最好就是定义一个字典,在发送 url 的get 请求之前先查询一下要拼接的 中文 字段对应的字典值,然后用字典值进行传输,完事了再在服务端做解析;

7,SpringMVC 制器是不是单例模式,如果是,有什么问题,怎么解决?

=====================================

是单例模式,之前在 Spring 篇章里面有说过控制层和Service 层以及 DAO 层一般是无状态的实例,不涉及数据的增删改等操作,只有简单的查询操作,那么就是线程安全的。

所以解决方案就是:在控制器里面不要写可变的状态量,如果需要这些可变的状态量,那么可以通过 ThreadLocal 进行解决,为每个线程提供一个独立的变量副本,进行数据操作。

8,SpringMVC 怎么和AJAX相互调用的?

=========================

通过 Jackson 框架可以将 Java 中的对象直接转换为 json 对象:

1,加入 Jackson.jar 包;

2,在配置文件中配置 json 的映射;

3,在接受 ajax 方法里面可以直接返回对象,但是需要使用 @ResponseBody 注解。

9,怎样在方法里面得到Request,或者Session?

=============================

直接在方法的形参中声明 request,SpringMVC 就自动把 request 对象传入。

10,SpringMVC 中函数的返回值是什么?

========================

返回值可以有很多类型,有String,ModelAndView。ModelAndView类把视图和数据都合并的一起的,但一般用String比较好。

11,怎么样把ModelMap里面的数据放入Session里面?
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

复习的面试资料

这些面试全部出自大厂面试真题和面试合集当中,小编已经为大家整理完毕(PDF版)

  • 第一部分:Java基础-中级-高级

image

  • 第二部分:开源框架(SSM:Spring+SpringMVC+MyBatis)

image

  • 第三部分:性能调优(JVM+MySQL+Tomcat)

image

  • 第四部分:分布式(限流:ZK+Nginx;缓存:Redis+MongoDB+Memcached;通讯:MQ+kafka)

image

  • 第五部分:微服务(SpringBoot+SpringCloud+Dubbo)

image

  • 第六部分:其他:并发编程+设计模式+数据结构与算法+网络

image

进阶学习笔记pdf

  • Java架构进阶之架构筑基篇(Java基础+并发编程+JVM+MySQL+Tomcat+网络+数据结构与算法

image

  • Java架构进阶之开源框架篇(设计模式+Spring+SpringMVC+MyBatis

image

image

image

  • Java架构进阶之分布式架构篇 (限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka)

image

image

image

  • Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)

image

image

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
…(img-9CWdSJm8-1713441410493)]

[外链图片转存中…(img-quxpqdjv-1713441410493)]

  • Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)

[外链图片转存中…(img-SEQqLR4j-1713441410494)]

[外链图片转存中…(img-scd8xZIX-1713441410494)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值