三万字<Java基础到就业> SpringMVC

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: Spring Web MVC 框架提供 模型-视图-控制器 架构和随时可用的组件,用于开发灵活且松散耦合的 Web 应用程序。

首先看下整理的Java的学习路线:


微信图片_20221009204031.png


这套路线包含了基础到就业,基本是全栈的路线,有前端、后端、微服务、小程序、安卓。到最后手撕源码。


如果你能搞完,你就是大神中的大神了。


前面分享了一个Redis的面试题:


Redis面试题全面掌握


今天复习下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 的工作流程可以用一幅图来说明:


微信图片_20221009204040.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 ;


微信图片_20221009204104.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里面?


可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。


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


(1)可以支持各种视图技术,而不仅仅局限于JSP;


(2)与Spring框架集成(如IoC容器、AOP等);


(3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。


(4)支持各种请求资源的映射策略。

目录
相关文章
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
67 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
5月前
|
Java
【Java基础】输入输出流(IO流)
Java基础、输入输出流、IO流、流的概念、输入输出流的类层次结构图、使用 InputStream 和 OutputStream流类、使用 Reader 和 Writer 流类
166 2
|
5月前
|
XML 前端开发 Java
java面试题之个人对SpringMvc的原理实现理解
java面试题之个人对SpringMvc的原理实现理解
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
6月前
|
前端开发 Java 测试技术
Java一分钟之Spring MVC:构建Web应用
【5月更文挑战第15天】Spring MVC是Spring框架的Web应用模块,基于MVC模式实现业务、数据和UI解耦。常见问题包括:配置DispatcherServlet、Controller映射错误、视图解析未设置、Model数据传递遗漏、异常处理未配置、依赖注入缺失和忽视单元测试。解决这些问题可提升代码质量和应用性能。注意配置`web.xml`、`@RequestMapping`、`ViewResolver`、`Model`、`@ExceptionHandler`、`@Autowired`,并编写测试用例。
338 3
|
2月前
|
JSON 前端开发 Java
【Java笔记+踩坑】SpringMVC基础
springmvc简介、入门案例、bean加载控制、PostMan工具的使用、普通和JSON和日期格式请求参数传递、响应JSON或jsp或文本、Rest风格
【Java笔记+踩坑】SpringMVC基础
|
3月前
|
设计模式 JSON 前端开发
【Java 第十二篇章】SpringMvc 框架介绍
Spring MVC 是 Spring 框架中的模块,采用 MVC 设计模式构建 Web 应用。核心组件包括 DispatcherServlet、Controller、Model 和 View。流程始于 DispatcherServlet 接收并分发请求至 Controller,Controller 处理业务逻辑并与 Model 交互,再通过 View 展示结果。优势包括松耦合架构支持多种视图技术,强大的请求处理和数据绑定功能简化开发,以及易于与其他 Spring 模块和第三方库集成。
20 0
|
3月前
|
前端开发 Java Spring
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
61 0
|
5月前
|
安全 Java