首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
别问了别问了答不出来了
门头沟学院 后端工程师
发布于湖北
关注
已关注
取消关注
mark
@大彬聊编程:
三天吃透SpringMVC面试八股文
本文已经收录到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的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。View,视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操纵的方式。model,模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。controller,控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。SpringMVC 有哪些优点?与 Spring 集成使用非常方便,生态好。配置简单,快速上手。支持 RESTful 风格。支持各种视图技术,支持各种请求资源映射策略。Spring MVC和Struts的区别Spring MVC是基于方法开发,Struts2是基于类开发的。Spring MVC会将用户请求的URL路径信息与Controller的某个方法进行映射,所有请求参数会注入到对应方法的形参上,生成Handler对象,对象中只有一个方法;Struts每处理一次请求都会实例一个Action,Action类的所有方法使用的请求参数都是Action类中的成员变量,随着方法增多,整个Action也会变得混乱。Spring MVC支持单例开发模式,Struts只能使用多例Struts由于只能通过类的成员变量接收参数,故只能使用多例。Struts2 的核心是基于一个Filter即StrutsPreparedAndExcuteFilter,Spring MVC的核心是基于一个Servlet即DispatcherServlet(前端控制器)。Struts处理速度稍微比Spring MVC慢,Struts使用了Struts标签,加载数据较慢。Spring MVC的工作原理Spring MVC的工作原理如下:DispatcherServlet 接收用户的请求找到用于处理request的 handler 和 Interceptors,构造成 HandlerExecutionChain 执行链找到 handler 相对应的 HandlerAdapter执行所有注册拦截器的preHandler方法调用 HandlerAdapter 的 handle() 方法处理请求,返回 ModelAndView倒序执行所有注册拦截器的postHandler方法请求视图解析和视图渲染Spring MVC的主要组件?前端控制器(DispatcherServlet):接收用户请求,给用户返回结果。处理器映射器(HandlerMapping):根据请求的url路径,通过注解或者xml配置,寻找匹配的Handler。处理器适配器(HandlerAdapter):Handler 的适配器,调用 handler 的方法处理请求。处理器(Handler):执行相关的请求处理逻辑,并返回相应的数据和视图信息,将其封装到ModelAndView对象中。视图解析器(ViewResolver):将逻辑视图名解析成真正的视图View。视图(View):接口类,实现类可支持不同的View类型(JSP、FreeMarker、Excel等)。Spring MVC的常用注解由有哪些?@Controller:用于标识此类的实例是一个控制器。@RequestMapping:映射Web请求(访问路径和参数)。@ResponseBody:注解返回数据而不是返回页面@RequestBody:注解实现接收 http 请求的 json 数据,将 json 数据转换为 java 对象。@PathVariable:获得URL中路径变量中的值@RestController:@Controller+@ResponseBody@ExceptionHandler标识一个方法为全局异常处理的方法。@Controller 注解有什么用?@Controller 注解标记一个类为 Spring Web MVC 控制器。Spring MVC 会将扫描到该注解的类,然后扫描这个类下面带有 @RequestMapping 注解的方法,根据注解信息,为这个方法生成一个对应的处理器对象,在上面的 HandlerMapping 和 HandlerAdapter组件中讲到过。当然,除了添加 @Controller 注解这种方式以外,你还可以实现 Spring MVC 提供的 Controller 或者 HttpRequestHandler 接口,对应的实现类也会被作为一个处理器对象本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~Github地址:https://github.com/Tyson0314/Java-learning@RequestMapping(454079936) 注解有什么用?@RequestMapping 注解,用于配置处理器的 HTTP 请求方法,URI等信息,这样才能将请求和方法进行映射。这个注解可以作用于类上面,也可以作用于方法上面,在类上面一般是配置这个控制器的 URI 前缀。@RestController(113091385) 和 @Controller 有什么区别?@RestController 注解,在 @Controller 基础上,增加了 @ResponseBody 注解,更加适合目前前后端分离的架构下,提供 Restful API ,返回 JSON 数据格式。@RequestMapping(454079936) 和 @GetMapping 注解有什么不同?@RequestMapping:可注解在类和方法上;@GetMapping 仅可注册在方法上@RequestMapping:可进行 GET、POST、PUT、DELETE 等请求方法;@GetMapping 是 @RequestMapping 的 GET 请求方法的特例。@RequestParam 和 @PathVariable 两个注解的区别两个注解都用于方法参数,获取参数值的方式不同,@RequestParam 注解的参数从请求携带的参数中获取,而 @PathVariable 注解从请求的 URI 中获取@RequestBody和@RequestParam的区别@RequestBody一般处理的是在ajax请求中声明contentType: "application/json; charset=utf-8"时候。也就是json数据或者xml数据。@RequestParam一般就是在ajax里面没有声明contentType的时候,为默认的x-www-form-urlencoded格式时。Spring MVC的异常处理可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可。使用系统定义好的异常处理器 SimpleMappingExceptionResolver使用自定义异常处理器使用异常处理注解SpringMVC 用什么对象从后台向前台传递数据的?将数据绑定到 request;返回 ModelAndView;通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前端就可以通过el表达式拿到;绑定数据到 Session中。SpringMvc的Controller是不是单例模式?单例模式。在多线程访问的时候有线程安全问题,解决方案是在控制器里面不要写可变状态量,如果需要使用这些可变状态,可以使用ThreadLocal,为每个线程单独生成一份变量副本,独立操作,互不影响。介绍下 Spring MVC 拦截器?Spring MVC 拦截器对应HandlerInterceor接口,该接口位于org.springframework.web.servlet的包中,定义了三个方法,若要实现该接口,就要实现其三个方法:前置处理(preHandle()方法):该方法在执行控制器方法之前执行。返回值为Boolean类型,如果返回false,表示拦截请求,不再向下执行,如果返回true,表示放行,程序继续向下执行(如果后面没有其他Interceptor,就会执行controller方法)。所以此方法可对请求进行判断,决定程序是否继续执行,或者进行一些初始化操作及对请求进行预处理。后置处理(postHandle()方法):该方法在执行控制器方法调用之后,且在返回ModelAndView之前执行。由于该方法会在DispatcherServlet进行返回视图渲染之前被调用,所以此方法多被用于处理返回的视图,可通过此方法对请求域中的模型和视图做进一步的修改。已完成处理(afterCompletion()方法):该方法在执行完控制器之后执行,由于是在Controller方法执行完毕后执行该方法,所以该方法适合进行一些资源清理,记录日志信息等处理操作。可以通过拦截器进行权限检验,参数校验,记录日志等操作SpringMvc怎么配置拦截器?有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可:<!-- 配置SpringMvc的拦截器 --><mvc:interceptors> <bean id="myInterceptor" class="com.dabin.MyHandlerInterceptor"></bean> <!-- 只拦截部分请求 --> <mvc:interceptor> <mvc:mapping path="/xxx.do" /> <bean class="com.dabin.MyHandlerInterceptorAdapter" /> </mvc:interceptor></mvc:interceptors>Spring MVC 的拦截器和 Filter 过滤器有什么差别?有以下几点:功能相同:拦截器和 Filter 都能实现相应的功能容器不同:拦截器构建在 Spring MVC 体系中;Filter 构建在 Servlet 容器之上使用便利性不同:拦截器提供了三个方法,分别在不同的时机执行;过滤器仅提供一个方法什么是REST?REST,英文全称,Resource Representational State Transfer,对资源的访问状态的变化通过url的变化表述出来。Resource:资源。资源是REST架构或者说整个网络处理的核心。Representational:某种表现形式,比如用JSON,XML,JPEG等。State Transfer:状态变化。通过HTTP method实现。REST描述的是在网络中client和server的一种交互形式。用大白话来说,就是通过URL就知道要什么资源,通过HTTP method就知道要干什么,通过HTTP status code就知道结果如何。举个例子:GET /tasks 获取所有任务POST /tasks 创建新任务GET /tasks/{id} 通过任务id获取任务PUT /tasks/{id} 更新任务DELETE /tasks/{id} 删除任务GET代表获取一个资源,POST代表添加一个资源,PUT代表修改一个资源,DELETE代表删除一个资源。server提供的RESTful API中,URL中只使用名词来指定资源,原则上不使用动词。用HTTP Status Code传递server的状态信息。比如最常用的 200 表示成功,500 表示Server内部错误等。使用REST有什么优势呢?第一,风格统一了,不会出现delUser/deleteUser/removeUser各种命名的代码了。第二,面向资源,一目了然,具有自解释性。第三,充分利用 HTTP 协议本身语义。最后给大家分享一个Github仓库,上面有大彬整理的300多本经典的计算机书籍PDF,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等,可以star一下,下次找书直接在上面搜索,仓库持续更新中~Github地址:https://github.com/Tyson0314/java-books
点赞 6
评论 2
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 10:24
门头沟学院 Java
秋招挂经总结
投的都是计算机后端岗位,现在秋招发现了,只要有了双非本的经历就像案底一样,好多直接简历挂了呜呜呜,进面了偶尔还有KPI面糊弄你恶心你,好难好难
2025年终总结
点赞
评论
收藏
分享
12-09 15:30
门头沟学院 Java
成都java小厂 日常实习一面面经 25min
面试官很好,很温柔1.自我介绍2.集合有哪些3.ArrayList和LinkedList的区别4.set和ArrayList的区别5.set的底层6.hashmap的底层7.jmm8.为什么要用redis9.用redis主要干什么10.reids过期策略11.惰性删除有什么问题12.定时删除为啥不把key全部扫描一遍,要只扫描一部分13.redis持久化机制14.redis淘汰策略15.redis zset 结合项目介绍16.kafka顺序消费17.单例模式18.工厂模式19.策略模式20.常用的linux命令21.反问算法:算术平方根(保留整数)中序遍历二叉树
查看22道真题和解析
点赞
评论
收藏
分享
12-05 20:56
郑州西亚斯学院 Java
28学院本告别互联网…
难道只能去考研了吗…下面说一下我的情况,我算是消息比较灵通的,大一就库库跟黑马学习,着急着把技术栈都过一遍,大一那会儿的想法是大三给自己一份成绩(进大厂技术岗)拿不出来就去考研…一年后呢,2000+(大概面了十几家吧)找了份北京小公司(快离职了),没啥太大的成长。现在也是见识到了自己确实无力回天研发岗,也是向曾经那个热情的自己回应了妥协的想法,转测开,其实现在在快速学习python 想碰瓷碰瓷深度学习机器学习…,对于我的大厂梦我做出了下面的一份测开简历(图2),打算是熟悉一下,包装,准备来年… 各位朋友怎么看不太想考研因为自己上了民办四年要花不少钱,读研的话又花,条件是不行的,于是就萌生了早早毕业挣钱。要是读读不上92,互联网环境愈发下行,我真告别互联网了…
只因你泰卷辣:
接受小公司的java人生,还是过得不错的,进不了大厂,那就好好过早九晚七双休的工作,放宽心态
点赞
评论
收藏
分享
11-06 20:17
重庆邮电大学 Java
三个月速通java
本大三鼠鼠7月半的时候才浑然醒悟,开始选择了走java这一条路,然后也是疯狂的学,每天十小时,然后前段时间实在忍不住了,看见大多数人都在说金九银十,也是把自己写的项目包装了一下,然后开始海投(因为我觉得我比较水,所以说就只投了小厂),也是不负守望,拿下三个实习,现在就等着最后一个offer了(感觉这个更好,所以说前面两个就不准备要了,希望能顺利得到offer)(我是双非,不太算科班,完全java零基础,只能说实习很好找,但是工作不好找,尝试投了一下秋招的那种,但是秒挂)java还是有活路的,刚好温饱是够的
在debug的伊泽瑞...:
重邮标红加粗
点赞
评论
收藏
分享
昨天 16:53
已编辑
桂林电子科技大学 安卓
双非本硕客户端总结/经验贴
个人BG:双非本硕秋招方向:Android客户端开发实习经历四段:第一段是一个七八百人的小公司、第二段理想汽车、第三段滴滴出行、第四段百度(实习方向均为客户端开发)秋招简历通过情况:除了阿里系 东哥这种强卡学历的 其他基本投了就有面面试情况:前后面了将近40场 真正意义上直接挂掉的应该就只有TME的二面(牛客刷到了好几个友友都是倒在了TME二面一个女面试官手下了),有一些排序死的(类似字节的三分刚过线的情况)offer:9个薪资情况:45w~65w(算上年终+签字费)自己对于客户端的看法: 客户端是真的不如后端,这是毋庸置疑的。客三消也不是没原因的 ,再加上现在各家都在转跨端,把业务往跨端上迁...
黑曼巴在线招人:
1.大佬太强了给跪了 2.带带我带带我 3.大佬太强了给跪了 4.带带我带带我 5.大佬太强了给跪了 6.带带我带带我
发面经攒人品
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
别等了,渣男不会为了你离婚的!
5834
2
...
爱情?事业?应作如是观
4692
3
...
双非鼠鼠秋招有感
4361
4
...
28届到底选什么方向合适
3568
5
...
27前端要不要寒假找实习
3056
6
...
签下三方时我没有任何情绪波动,继续努力向前行
2859
7
...
求助,老丈人终面如何准备
1853
8
...
字节26校招前端一面
1821
9
...
一直说我工作不饱和的+2歹人
1551
10
...
选择校招/实习Offer的逻辑
1401
创作者周榜
更多
正在热议
更多
#
摸鱼被leader发现了怎么办
#
73938次浏览
421人参与
#
工作后明白的那些道理
#
30450次浏览
338人参与
#
工作后,你落下了哪些病根
#
1374次浏览
33人参与
#
电网求职进展汇总
#
33416次浏览
90人参与
#
你学到的“最没用”的职场技能是
#
1308次浏览
28人参与
#
七夕节你打算怎么过?
#
70075次浏览
806人参与
#
业务面应该做哪些准备
#
80541次浏览
831人参与
#
国央企笔面经互助
#
172459次浏览
1211人参与
#
你见过最离谱的招聘要求是什么?
#
245521次浏览
1691人参与
#
满帮集团求职进展汇总
#
13278次浏览
95人参与
#
拼多多求职进展汇总
#
798217次浏览
6452人参与
#
上班到公司第一件事做什么?
#
113908次浏览
787人参与
#
职场破防瞬间
#
352678次浏览
2827人参与
#
工作两年想退休了
#
208244次浏览
1844人参与
#
硬件人秋招的第一个offer
#
111103次浏览
1426人参与
#
国企/银行/研究所公司爆料
#
177665次浏览
889人参与
#
视觉/交互/设计招聘信息汇总
#
24403次浏览
634人参与
#
产品人求职现状
#
299161次浏览
2363人参与
#
如果可以选,你最想从事什么工作
#
672317次浏览
4848人参与
#
满分简历要如何准备?
#
249599次浏览
2961人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务