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

简介: 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)支持各种请求资源的映射策略。

目录
相关文章
|
6天前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java
ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java
13 0
|
6天前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java
ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java
13 0
|
6天前
|
前端开发 Java 测试技术
Java一分钟之Spring MVC:构建Web应用
【5月更文挑战第15天】Spring MVC是Spring框架的Web应用模块,基于MVC模式实现业务、数据和UI解耦。常见问题包括:配置DispatcherServlet、Controller映射错误、视图解析未设置、Model数据传递遗漏、异常处理未配置、依赖注入缺失和忽视单元测试。解决这些问题可提升代码质量和应用性能。注意配置`web.xml`、`@RequestMapping`、`ViewResolver`、`Model`、`@ExceptionHandler`、`@Autowired`,并编写测试用例。
293 3
|
6天前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——Dept.java
ssh(Spring+Spring mvc+hibernate)——Dept.java
14 0
|
6天前
|
JavaScript Java 测试技术
基于Java的高校毕业生就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的高校毕业生就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
28 0
基于Java的高校毕业生就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
|
6天前
|
JavaScript Java 测试技术
基于Java的学生就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的学生就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
35 3
|
6天前
|
JavaScript Java 测试技术
基于Java的毕业生就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的毕业生就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
26 0
|
6天前
|
JavaScript Java 测试技术
基于Java的高校就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的高校就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
27 2
|
6天前
|
前端开发 安全 Java
使用Java Web框架:Spring MVC的全面指南
【4月更文挑战第3天】Spring MVC是Spring框架的一部分,用于构建高效、模块化的Web应用。它基于MVC模式,支持多种视图技术。核心概念包括DispatcherServlet(前端控制器)、HandlerMapping(请求映射)、Controller(处理请求)、ViewResolver(视图解析)和ModelAndView(模型和视图容器)。开发流程涉及配置DispatcherServlet、定义Controller、创建View、处理数据、绑定模型和异常处理。
使用Java Web框架:Spring MVC的全面指南
|
6天前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
25 4