SpringMVC常见面试题总结(超详细回答)_springmvc面试题常问-程序员宅基地

SpringMVC常见面试题总结(超详细回答)

个人分类: SSM+SSH框架

1、什么是Spring MVC ?简单介绍下你对springMVC的理解?

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

2、SpringMVC的流程?

(1)用户发送请求至前端控制器DispatcherServlet;
(2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
(4)DispatcherServlet 调用 HandlerAdapter处理器适配器;
(5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
(6)Handler执行完成返回ModelAndView;
(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
(9)ViewResolver解析后返回具体View;
(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11)DispatcherServlet响应用户。

在这里插入图片描述

3、Springmvc的优点:

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

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

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

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

4、Spring MVC的主要组件?

(1)前端控制器 DispatcherServlet(不需要程序员开发)

作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。

(2)处理器映射器HandlerMapping(不需要程序员开发)

作用:根据请求的URL来查找Handler

(3)处理器适配器HandlerAdapter

注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。

(4)处理器Handler(需要程序员开发)

(5)视图解析器 ViewResolver(不需要程序员开发)

作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view)

(6)视图View(需要程序员开发jsp)

View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)

5、springMVC和struts2的区别有哪些?

(1)springmvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。

(2)springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。

(3)Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。

6、SpringMVC怎么样设定重定向和转发的?

(1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"

(2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"

7、SpringMvc怎么和AJAX相互调用的?

通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :

(1)加入Jackson.jar

(2)在配置文件中配置json的映射

(3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。

8、如何解决POST请求中文乱码问题,GET的又如何处理呢?

(1)解决post请求乱码问题:

在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;

<filter-name>CharacterEncodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

    <param-name>encoding</param-name>

    <param-value>utf-8</param-value>

</init-param>
<filter-name>CharacterEncodingFilter</filter-name>

<url-pattern>/*</url-pattern>

(2)get请求中文参数出现乱码解决方法有两个:

①修改tomcat配置文件添加编码与工程编码一致,如下:

<ConnectorURIEncoding=“utf-8” connectionTimeout=“20000” port=“8080” protocol=“HTTP/1.1” redirectPort=“8443”/>

②另外一种方法对参数进行重新编码:

String userName = new String(request.getParamter(“userName”).getBytes(“ISO8859-1”),“utf-8”)

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。

9、Spring MVC的异常处理 ?

答:可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可。

10、SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?

答:是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。

11、 SpringMVC常用的注解有哪些?

@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。

@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。

@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。

12、SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代?

答:一般用@Conntroller注解,表示是表现层,不能用别的注解代替。

13、如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?

答:可以在@RequestMapping注解里面加上method=RequestMethod.GET。

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

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

15、如果想在拦截的方法里面得到从前台传入的参数,怎么得到?

答:直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样。

16、如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?

答:直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面。

17、SpringMvc中函数的返回值是什么?

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

18、SpringMvc用什么对象从后台向前台传递数据的?

答:通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前台就可以通过el表达式拿到。

19、怎么样把ModelMap里面的数据放入Session里面?

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

20、SpringMvc里面拦截器是怎么写的:

有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可:

mvc:interceptors

<!-- 配置一个拦截器的Bean就可以了 默认是对所有请求都拦截 -->

<bean id="myInterceptor" class="com.zwp.action.MyHandlerInterceptor"></bean>

<!-- 只针对部分请求拦截 -->

<mvc:interceptor>

   <mvc:mapping path="/modelMap.do" />

   <bean class="com.zwp.action.MyHandlerInterceptorAdapter" />

</mvc:interceptor>

</mvc:interceptors>

21、注解原理:

注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45031351/article/details/90451512

智能推荐

在 Pytorch 中实现超参的 random search_torch 自动超参搜索-程序员宅基地

文章浏览阅读1w次,点赞35次,收藏102次。在 pytorch 中实现超参的随机搜索 random search_torch 自动超参搜索

java面试题笔试题,这样准备面试定能轻松斩获offer,阿里内部资料-程序员宅基地

文章浏览阅读956次,点赞19次,收藏15次。在准备好简历之后,应该做些相关面试准备。首先,是笔试题,这点是初级程序员绕不过去的坎。首先,基础相关面试题要做好。。一些比较常见出现的问题,顺便列举下。由于篇幅过长的原因,为了不影响大家的阅读效果,文中没有给到面试题的答案。我这里以文件的形式整理好了(不局限于以下题目噢,文末会有资料截图),需要借阅的程序员朋友可以**关注+转发+私信【资料】**找我领取========JDK、JRE、JVM关系是什么Java支持的数据类型有哪些?什么是自动拆装箱面向对象是什么TCP/IP、HTTP协议。

Windows 中realtek hd audio univer可以禁用吗_realtek hd audio universal service可以开机禁用吗-程序员宅基地

文章浏览阅读137次。realtek hd audio univer不可以禁用。因realtek hd audio是声卡方面的启动项。,如果禁用可能导致电脑无法正常使用声卡,还可能导致电脑没有声音或者其他软件、音乐、视频的声音播放异常。_realtek hd audio universal service可以开机禁用吗

mysql分区和分表哪个好_孕妇护肤品成分禁用表,6款热卖品牌排行,孕妇沐浴露哪个好?...-程序员宅基地

文章浏览阅读290次。女性怀孕的时候,新陈代谢会加快,皮肤的排泄机能加强,水分和废料的排出量增加了,必须要依靠“沐浴露的清洁力”保持皮肤的清洁。反之如果不能有效清洁就容易滋生细菌与病菌。进而影响到孕妈的皮肤健康,所以日常的洗浴卫生问题一定得特别注意!那么,孕妇接着用传统的沐浴露可以吗?不少孕妈妈心中打起了大大的问号。事实是目前市场上普通的沐浴露普遍是化学合成洗涤剂,而且含有矿物油、重金属、色素、精油等成分。若孕妈妈使用...

windows 11 打开虚拟机的时候报错:你的设备遇到问题,需要重启_win11虚拟机断电 你的设备遇到问题-程序员宅基地

文章浏览阅读2.1w次,点赞9次,收藏36次。问题概述在win11操作系统中,安装了VMware虚拟机,打开虚拟机就会出现重启问题打开的时候就会报错误信息解决办法1.找到控制面板下面的程序,启用或者关闭windows功能2.打开虚拟机平台功能3.搜索过后重启就行..._win11虚拟机断电 你的设备遇到问题

分别用随机投点法、平均估计法、重要抽样法和分层抽样计算f(x)=exp(x)积分_重要抽样法的估计公式-程序员宅基地

文章浏览阅读716次。现在,我们可以使用这些方法来估计函数 f(x) = exp(x) 在区间 [0, 1] 上的积分并比较它们的误差。以上就是用 R 语言实现随机投点法、平均估计法、重要抽样法和分层抽样法来计算 f(x) = exp(x) 积分并比较误差的代码。函数来计算函数 f(x) = exp(x) 在区间 [0, 1] 上的真实积分值。然后,我们计算每种方法的误差,即估计值与真实值之间的差异。在这个问题中,我们将使用四种不同的方法来估计函数 f(x) = exp(x) 在指定区间上的积分。_重要抽样法的估计公式

随便推点

ubuntu20.04 安装pcl Vtk步骤和ERROR等问题_ubuntu安装vtk和pcl-程序员宅基地

文章浏览阅读405次,点赞8次,收藏9次。但是安装完还是有问题,是因为上面安装qt少安了一个叫X11EXtra的库,然后再configure,就可以了。1.ERROR CONFIG:因为要安装qt5;_ubuntu安装vtk和pcl

黑马程序员 – 开始报名! -- 2013.1.16_黑马程序员怎么报名-程序员宅基地

文章浏览阅读338次。----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------复习完正则表达式,终于要开始走黑马报名的流程了,好激动!学过一遍反过来思索,有些知识点已经忘记了,这几天把毕老师的重点视频看了一遍,希望入学能顺利!2013年1月17日,终于把基础测试提交上去了,看过毕老师的视屏后,基础测试做起来不算吃力,加油!第六道测试题_黑马程序员怎么报名

萌熊跑酷项目-22-摄像机融合_萌熊跑酷百度云-程序员宅基地

文章浏览阅读368次。增设相机,只照射背景首先,设置背景如图 Plane + sky(材质) 设置Layer(此处直接设置为了Water) 然后,增加摄像机如图 Culling Mask 设置只渲染Water层 减小Depth 调整Plane在相机中的位置 最后,设置主摄像机如图 设置主摄像机 Clear Flags为仅深度 Culling Mask将Wa..._萌熊跑酷百度云

Oracle查询速度慢的原因总结_oracle 600w数据会不会有性能瓶颈-程序员宅基地

文章浏览阅读2.4w次。查询速度慢的原因很多,常见如下几种:1,没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2,I/O吞吐量小,形成了瓶颈效应.3,没有创建计算列导致查询不优化.4,内存不足5,网络速度慢6,查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)7,锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)8,sp_lock,sp_who,活动的用户查看,原因是读写竞争资源.9..._oracle 600w数据会不会有性能瓶颈

正则表达式校验url必须以http或https开头_js正则网址内容必输http-程序员宅基地

文章浏览阅读3.8w次。正则表达式校验url必须以http或https开头结合knockout.validation.js校验self.fieldName = ko.observable(initData.fieldName).extend({ required: { params: true }, minLength: 2, m..._js正则网址内容必输http

性能基础之速读【性能之巅:洞悉系统、企业与云计算】_重新传输的数据包 netstat-程序员宅基地

文章浏览阅读184次。引言综合来讲,这是一本介绍方法论的书,作者通过概念、模型、观测、实验手段来进行问题的剖析。另外本书的涉及范围之广,从内存、CPU、文件系统、存储硬件、网络等各个方面。并且本书通常以一个实例入手,深入的介绍系统原理,特别是在一些重点细节上,往往有超出一般的认识和方法。本书函盖范围太广,更适合作为工具书时常翻阅,所以在阅读过程中也关注自己当前需要的方面。第一章 绪论系统性能是对整个系统的研究,包括了所有的硬件组件和整个软件栈。所有数据路径上和软硬件上所发生的事情都包括在内,因为这些都有可能影响.._重新传输的数据包 netstat