当前位置: 首页 > 后端技术 > Java

三天彻底理解SpringMVC面试千篇一律

时间:2023-04-02 00:19:48 Java

本文已收录在Github仓库,其中包括计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招代招等核心知识点分享,欢迎star~Github地址:https://github.com/Tyson0314/Java-learning谈谈你对SpringMVC的理解SpringMVC是一个基于Java的MVC设计的实现模型的请求驱动类型的轻量级Web框架,属于Spring框架的一个模块。它使用一组注释使一个简单的Java类成为处理请求的控制器,而无需实现任何接口。同时也支持RESTful编程风格的请求。什么是MVC模式?MVC的全称是ModelViewController,是模型(model)-视图(view)-controller(控制器)的缩写,是一种软件设计模型。它采用业务逻辑、数据、界面展示分离的方式来组织代码,将众多的业务逻辑聚集到一个组件中。当需要改进和定制界面和用户交互时,不需要重写业务逻辑。,以减少编码时间。视图,视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件客户端界面。MVC的好处之一是它可以处理应用程序的许多不同视图。视图中没有真正的处理发生,它只是一种输出数据并允许用户对其进行操作的方式。模型,模型是指表示业务规则的模型。在MVC的三个组件中,模型的处理任务最多。模型返回的数据是中性的,模型与数据格式无关。这样的模型可以为多个视图提供数据。由于应用于模型的代码可以被多个视图重用,因此减少了代码重复。性别。Controller,控制器是指接受用户的输入,调用模型和视图来完成用户需求的控制器。控制器本身不输出任何东西或做任何处理。它只是接收请求并决定调用哪个模型组件来处理请求,然后决定使用哪个视图来显示返回的数据。SpringMVC的优点是什么?与Spring集成非常方便,生态良好。配置简单,快速上手。支持RESTful风格。支持各种视图技术和各种请求资源映射策略。SpringMVC和Struts的区别SpringMVC是基于方法开发的,而Struts2是基于类开发的。SpringMVC会将用户请求的URL路径信息与Controller的某个方法进行映射,所有的请求参数都会被注入到对应方法的形参中,生成一个只有一个方法的Handler对象;Struts每处理一个请求都会实例化一个Action,Action类的所有方法使用的请求参数都是Action类中的成员变量,随着方法的增多,整个Action会变得混乱。SpringMVC支持单例开发模式,而Struts只能使用多实例。由于Struts只能通过类成员变量接收参数,所以只能使用多实例。Struts2的核心是基于一个Filter,即StrutsPreparedAndExcuteFilter,而SpringMVC的核心是基于一个Servlet,即DispatcherServlet(前端控制器)。Struts处理速度比SpringMVC稍慢,Struts使用Struts标签,加载数据较慢。SpringMVC的工作原理SpringMVC的工作原理如下:DispatcherServlet接收到用户的请求,找到处理请求的handler和Interceptors,构造HandlerExecutionChain执行链,找到handler对应的HandlerAdapter,执行preHandler方法所有已注册拦截器的postHandler方法,并调用HandlerAdapter的handle()方法处理请求并返回ModelAndView,以逆序执行所有已注册拦截器的postHandler方法,请求视图解析和视图渲染。SpringMVC的主要组件?前端控制器(DispatcherServlet):接收用户请求,返回结果给用户。HandlerMapping:根据请求的url路径,通过注解或者xml配置找到匹配的Handler。处理程序适配器(HandlerAdapter):处理程序适配器,调用处理程序方法处理请求。Handler:执行相关的请求处理逻辑,返回相应的数据和视图信息,封装到ModelAndView对象中。视图解析器(ViewResolver):将逻辑视图名解析为真实视图View。视图(View):接口类、实现类可以支持不同的View类型(JSP、FreeMarker、Excel等)。SpringMVC的常用注解有哪些?@Controller:用于标识该类的一个实例为控制器。@RequestMapping:映射Web请求(访问路径和参数)。@ResponseBody:注解返回数据,不返回页面@RequestBody:注解实现接收http请求的json数据,并将json数据转换为java对象。@PathVariable:获取URL中路径变量中的值@RestController:@Controller+@ResponseBody@ExceptionHandler标识一个方法为全局异常处理方法。@Controller注解有什么用?@Controller注解将类标记为SpringWebMVC控制器。SpringMVC会扫描被注解的类,然后扫描这个类下用@RequestMapping注解的方法,并根据注解信息为这个方法生成对应的处理器对象,如上面的HandlerMapping和HandlerAdapter组件中提到的。当然,除了添加@Controller注解,还可以实现SpringMVC提供的Controller或HttpRequestHandler接口,相应的实现类也会作为处理器对象。Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~Github地址:https://github.com/Tyson0314/java-learning@RequestMapping注解有什么作用?@RequestMapping注解用于配置处理器的HTTP请求方法、URI等信息,实现请求与方法的映射。该注释可以作用于类或方法。一般在类上配置控制器的URI前缀。@RestController和@Controller有什么区别?@RestController注解,在@Controller的基础上,增加了@ResponseBody注解,更适合现在的前后端分离架构,提供RestfulAPI,返回JSON数据格式。@RequestMapping和@GetMapping注解有什么区别?@RequestMapping:可以注解在类和方法上;@GetMapping只能注册在方法上@RequestMapping:可以进行GET、POST、PUT、DELETE等请求方法;@GetMapping是@RequestMapping的GET请求方法的特例。@RequestParam和@PathVariable这两个注解的区别两个注解都是用于方法参数,获取参数值的方式不同。@RequestParam注解的参数是从请求携带的参数中获取,而@PathVariable注解是从请求的URI中获取@RequestBody和@RequestParam的区别@RequestBody一般处理contentType的声明:"application/json;charset=utf-8"在ajax请求中。即json数据或者xml数据。@RequestParam一般是在ajax中没有声明contentType时,默认的x-www-form-urlencoded格式。SpringMVC的异常处理可以将异常抛给Spring框架,由Spring框架处理;我们只需要配置一个简单的异常处理程序,并在异常处理程序中添加一个视图页面。使用系统定义的异常处理程序SimpleMappingExceptionResolver使用自定义的异常处理程序使用异常处理来注解SpringMVC用什么对象把数据从后台传到前台?将数据绑定到请求;返回模型和视图;通过ModelMap对象,可以调用该对象中的put方法,将对象添加到其中,前端可以通过el表达式获取;将数据绑定到会话。SpringMvc的Controller是单例模式吗?单例模式。多线程访问时存在线程安全问题。解决方案是不要在控制器中写入可变状态量。如果需要使用这些变量状态,可以使用ThreadLocal为每个线程独立生成变量的副本,互不影响。介绍一下SpringMVC拦截器?SpringMVC拦截器对应HandlerInterceor接口,位于org.springframework.web.servlet包中,定义了三个方法。要实现该接口,必须实现三个方法:预处理(preHandle()方法):该方法在执行控制器方法之前执行。返回值为布尔类型。如果返回false,则表示拦截请求,不再向下执行。如果返回true,则表示释放,程序继续向下执行(如果后面没有其他Interceptor,就会执行controller方法)。因此,该方法可以对请求进行判断,决定程序是否继续执行,或者对请求进行一些初始化操作和预处理。后处理(postHandle()方法):该方法在执行控制器方法调用之后,返回到ModelAndView之前执行。由于该方法会在DispatcherServlet渲染返回视图之前被调用,所以该方法多用于处理返回视图。该方法可用于进一步修改请求域中的模型和视图。完成处理(afterCompletion()方法):该方法在controller执行完之后执行。由于该方法是在Controller方法执行之后执行的,所以该方法适用于一些资源清理,记录日志信息等处理操作。拦截器可以用来进行权限检查、参数检查、日志记录等操作。SpringMvc是如何配置拦截器的?有两种写法,一种是实现HandlerInterceptor接口,另一种是继承适配器类,然后在接口方法中实现处理逻辑;然后在SpringMvc配置文件中配置拦截器:SpringMVC拦截器和Filter过滤器有什么区别?有以下几点:功能相同:拦截器和Filter可以实现相应的功能容器不同:拦截器是内置在SpringMVC系统中;Filter建立在Servlet容器之上。使用方便性不同:拦截器提供了三种方法,它们在不同的时间执行;过滤器只提供一种方法。什么是休息?REST,英文全称,ResourceRepresentationalStateTransfer。资源访问状态的变化通过url的变化来表现。资源:资源。资源是REST架构或整个网络处理的核心。Representational:某种形式的表示,如JSON、XML、JPEG等。StateTransfer:状态变化。通过HTTP方式实现。REST描述了网络中客户端和服务器之间的一种交互形式。用大白话就是通过URL知道自己要什么资源,通过HTTP方法知道要做什么,通过HTTP状态码知道结果是什么。例如:GET/tasks获取所有任务POST/tasks创建一个新任务GET/tasks/{id}通过任务ID获取一个任务PUT/tasks/{id}更新一个任务DELETE/tasks/{id}删除一个任务GET代表获取一个资源,POST代表添加一个资源,PUT代表修改一个资源,DELETE代表删除一个资源。在服务端提供的RESTfulAPI中,URL中只使用名词来指定资源,原则上不使用动词。使用HTTPStatusCode来传输服务器的状态信息。比如最常用的200表示成功,500表示服务器内部错误等。使用REST有什么好处呢?首先风格统一,不会有delUser/deleteUser/removeUser这样的代码。其次,它是面向资源的,不言自明,不言自明。第三,充分利用HTTP协议本身的语义。最后给大家分享一个Github仓库,里面有大斌编译的300多本经典计算机书籍PDF,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构还有算法,机器学习,编程生活等等,可以star一下,下次找书的时候可以直接在上面搜索,仓库持续更新中~Github地址:https://github.com/Tyson0314/java-books