Java最新面试宝典 SpringMVC面试题)

Java最新面试宝典 SpringMVC面试题

  • 前言
  • 1、什么是SpringMVC?
  • 2、SpringMVC 的优点?
  • 3、Spring MVC配置步骤?
  • 4、SpringMVC工作原理了解吗?
  • 5、Spring MVC 核心组件的功能?
  • 6、B/S 系统标准的三层架构是什么?
  • 7、@Controller 注解有什么用?
  • 8、@RequestMapping 注解有什么用?
  • 9、@RestController 和 @Controller 有什么区别?
  • 10、@RequestMapping 和 @GetMapping 注解的不同之处在哪里?
  • 11、@RequestParam 和 @PathVariable 两个注解的区别?
  • 12、返回 JSON 格式使用什么注解?
  • 13、SpringMVC 拦截器与过滤器的区别?
  • 14、怎么控制过滤器和拦截器的执行顺序?
  • 15、SpringMVC 中如何解决请求中⽂乱码问题?
  • 16、怎么把ModelMap⾥⾯的数据放⼊Session⾥⾯
  • 17、SpringMVC 和 Struts2 的异同?
  • 18、SpringMVC 怎么样重定向和转发的?
  • 19、SpringMvc里面拦截器是怎么写的?
  • 20、HandlerInterceptor接口是什么?
  • 总结


前言

最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。

如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!

1、什么是SpringMVC?

Spring MVC是一个基于Java的实现了MVC设计模式的轻量级Web框架,通过把Model,View,Controller分离,把复杂的web层分成逻辑清晰的3部分,减少了出错,方便开发人员之间的配合。

2、SpringMVC 的优点?

(1)可以支持各种视图技术,包括Jsp、Thymeleaf、Freemarker等;
(2)与Spring框架集成(包括IOC容器、AOP等);
(3)有清晰的角色分配:前端控制器,处理器映射器,处理器适配器,视图解析器。
(4)支持各种请求资源的映射策略。

3、Spring MVC配置步骤?

1)、搭建Spring MVC 环境需要使用的jar包;
2)、web.xml配置前端控制器以及SpringMVC.xml的路径:

< !--前端控制器配置(DispatcherServlet)-->
<servlet><servlet-name>SpringMVC </servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:SpringMVC .xml</param-value></init-param><!--自动动配置要放在<init-param>配置后,否则会报错--><load-on-startup>1</load-on-startup>
</servlet>
<!--配置控制器访问,配置的值为/ ,表示所有访问都会进入此前端控制器(.jsp访问地址除外)--><servlet-mapping><servlet-name>SpringMVC </servlet-name><url-pattern>/</url-pattern></servlet-mapping>

3)、在SpringMVC.xml的配置文件中:

<!-- 配置spring注解扫描--><context:component-scan base-package="Controller"></context:component-scan>
<!-- 配置SpringMVC 注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--配置视图解析器: --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--前缀配置--><property name="prefix" value="/"></property><!--后缀配置--><property name="suffix" value=".jsp"></property></bean>
<!--配置静态资源:配置需要放行的静态资源地址,不需要解析该请求地址-->
<!-- mapping="":配置静态资源的请求路径location="":配置静态资源所在的路径,使用*通配符,一个*表示该路径下的资源,两个**表示该路径下的所有资源文件(包含子文件中的资源文件)--><mvc:resources mapping="/js/" location="/js/**"></mvc:resources><mvc:resources mapping="/css/" location="/css/**"></mvc:resources><mvc:resources mapping="/images/" location="/images/**"></mvc:resources>

4、SpringMVC工作原理了解吗?

原理如下图所示:
在这里插入图片描述
1)、客户端(浏览器)发送请求,直接请求到 DispatcherServlet;
2)、前端控制器调用处理器映射器HandlerMapping,处理器映射器根据请求URL信息解析返回一个处理器执行链,包含处理器(handler)和拦截器(interceptors);
3)、前端控制器调用处理器适配器HandlerAdapter,处理器适配器根据Handler来调用真正的处理器Controller,并处理相应的业务逻辑;
4)、处理完业务逻辑后,会返回一个ModelAndView对象(Model是封装的数据对象);
6)、然后前端控制器调用视图解析器ViewResolver,视图解析器根据View名称查找到具体的页面地址,并返回一个View 视图对象;
7)、然后前端控制器对视图进行渲染,最后通过页面展示给客户端。

5、Spring MVC 核心组件的功能?

  • 前端控制器DispatcherServlet :
    DispatcherServlet 是 Spring MVC 的入口函数。负责接收客户端请求,响应结果给客户端,相当于转发器。有了 DispatcherServlet ,可以大大减少其它组件之间的耦合度。
    DispatcherServlet 是整个流程控制的中心,由它来调用其它组件处理用户的请求。
  • 处理器映射器HandlerMapping :
    HandlerMapping 负责根据用户请求(URL),找到合适的 HandlerExecutionChain 处理器执行链,包含处理器(handler)和拦截器们(interceptors)
  • 处理器适配器HandlerAdapter:
    按照特定规则(HandlerAdapter 要求的规则)去执行 Handler,通过 HandlerAdapter 对处理器进行执行。因为处理器 handler 的类型是 Object 类型,需要有一个调用者来实现 handler 是怎么被执行。所以这里需要一个处理器适配器,由它去执行处理器。
  • 处理器 Handler:(需要工程师开发)
    Handler 是在 DispatcherServlet 的控制下,Handler 对具体的用户请求进行处理。由于 Handler 涉及到具体的用户业务请求,所以一般情况下需要工程师根据业务需求来开发 Handler。
  • 视图解析器 View Resolver:
    进行视图解析,首先,根据逻辑视图名解析成物理视图名(即具体的页面地址),再生成 View 视图对象。
  • MultipartResolver 内容类型( Content-Type )为 multipart/* 的请求的解析器,⽤于上传请求,通过将普通的请求包装成 MultipartHttpServletRequest 来实现。
    MultipartHttpServletRequest 可以通过 getFile() ⽅法 直接获得⽂件。
    如果上传多个⽂件,还可以调⽤ getFileMap()⽅法得到Map<FileName,File>这样的结构,MultipartResolver 的作⽤就是封装普通的请求,使其拥有⽂件上传的功能。

6、B/S 系统标准的三层架构是什么?

B/S系统标准的三层架构分别是:表现层、业务层、持久层。

    1. 表现层 :
      常说的web 层:它负责接收客户端请求,响应结果给客户端。
      MVC 是表现层的设计模型,和其他层没有关系。
  • 2.业务层 :
    常说的 service 层:它负责业务逻辑处理,如果要对数据持久化需要保证事务⼀致性。(也就是我们说的,事务应该放到业务层来控制)
  • 3.持久层 :
    常说的 DAO层:负责数据持久化,就是和数据库交互,对数据库表进⾏增删改查的。

7、@Controller 注解有什么用?

@Controller 注解标记一个类为 Spring的控制器,Spring会扫描到该注解的类,然后扫描这个类下面带有 @RequestMapping 注解的方法,根据注解信息,为这个方法生成一个对应的处理器对象。
等价于实现了 Spring MVC提供的 Controller 或者 HttpRequestHandler 接口

8、@RequestMapping 注解有什么用?

@RequestMapping 注解,配置HTTP 请求方法,URL等信息,这样才能将请求和方法进行映射。这个注解可以作用于类上面,也可以作用于方法上面,在类上面一般是配置这个控制器的 URL前缀。

9、@RestController 和 @Controller 有什么区别?

@RestController 注解,在 @Controller 基础上,增加了 @ResponseBody 注解,更加适合目前前后端分离的架构下,提供 Restful API ,返回例如 JSON 数据格式。当然,返回什么样的数据格式,根据客户端的 ACCEPT 请求头来决定。

10、@RequestMapping 和 @GetMapping 注解的不同之处在哪里?

1、@RequestMapping:可用在类和方法上;@GetMapping 仅可用在方法上
2、@RequestMapping:可支持 GET、POST、PUT、DELETE 等请求方法;
@GetMapping 只支持GET 请求方法,目的是为了提高清晰度。

11、@RequestParam 和 @PathVariable 两个注解的区别?

区别在于一个是用?,一个是用/
@RequestParam 是从request里面获取参数值(user?id=123);
而 @PathVariable 是从URI后缀获取参数(user/123)。

12、返回 JSON 格式使用什么注解?

可以使用 @ResponseBody 注解,或者使用包含 @ResponseBody 注解的 @RestController 注解。

13、SpringMVC 拦截器与过滤器的区别?

①拦截器是基于java的反射机制的,比如动态代理,过滤器是依赖于servlet容器,基于函数回调;   
②拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用;
③拦截器可以获取IOC容器中的各个bean,过滤器就不行。
触发时机:
1.过滤器是在请求进入容器后,但请求进入servlet之前进行处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。
2. 拦截器的配置⼀般在的SpringMVC配置⽂件中,使⽤Interceptor标签
总结:过滤器Filter包裹住servlet,servlet包裹住拦截器Interceptor
在这里插入图片描述

14、怎么控制过滤器和拦截器的执行顺序?

过滤器Filter用@Order注解控制执行顺序,通过@Order控制过滤器的级别,值越小级别越高越先执行。
拦截器Interceptor默认的执行顺序,就是它的注册顺序,也可以通过@Order注解控制,值越小越先执行。

15、SpringMVC 中如何解决请求中⽂乱码问题?

解决post请求乱码问题:

  • 1、在doPost方法首行添加request.setCharacterEncoding(“utf-8”);
  • 2、在web.xml中配置⼀个CharacterEncodingFilter过滤器,并设置编码为utf-8;
    解决get请求乱码问题:
    在Tomcat中的server.xml文件指定URIEncoding=”UTF-8”。
    (< Connector port=“8080” protocol=“HTTP/1.1” redirectPort=“8443” connectionTimeout=“20000” URIEncoding=“UTF-8”/>)

16、怎么把ModelMap⾥⾯的数据放⼊Session⾥⾯

默认情况下SpringMVC将模型中的数据存储到request域中,当⼀个请求结束后,数据就失效了。如果要跨页⾯使⽤。那么需要使⽤到session。
可以在类上⾯加上@SessionAttributes注解,⾥⾯包含的字符串就是要放⼊session⾥⾯的key。
@SessionAttributes(value = { “key” })

17、SpringMVC 和 Struts2 的异同?

  • 1)、入口不同
    Spring MVC 的入门是一个 Servlet 控制器。
    Struts2 入门是一个 Filter 过滤器。
  • 2)、安全问题
    Spring MVC默认为单例,是非线程安全的。
    Struts2 是多例,是线程安全的。

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

  • 转发:在返回值前面加"forward:“,如"forward:user.do?name=hello”
  • 重定向:在返回值前面加"redirect:“,如"redirect:http://www.baidu.com”。

19、SpringMvc里面拦截器是怎么写的?

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

20、HandlerInterceptor接口是什么?

我们可以配置多个拦截器,每个拦截器中都有三个方法。下面将总结多个拦截器中的方法执行规律。
1、preHandle:Controller方法处理请求前执行,根据拦截器定义的顺序,正向执行。
2、postHandle:Controller方法处理请求后执行,根据拦截器定义的顺序,逆向执行。需要所有的preHandle方法都返回true时才会调用。
3、afterCompletion:View视图渲染后处理方法:根据拦截器定义的顺序,逆向执行。preHandle返回true就会调用。

总结

都已经看到这里啦,赶紧收藏起来,祝您工作顺心,生活愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/706947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络:深入探索HTTP

引言&#xff1a; HTTP&#xff0c;全称超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff09;&#xff0c;是互联网上数据通信的基础。它定义了客户端&#xff08;如浏览器&#xff09;和服务器之间如何交互和传输数据。HTTP最初是为了支持Web浏览而设计的&…

1200页文档笔记,java数据库面试问题

Spring框架自诞生以来一直备受开发者青睐&#xff0c;有人亲切的称之为&#xff1a;Spring 全家桶。Spring更是避免了重复造轮子的工作并跟随着互联网行业的发展做出不断的更新&#xff0c;很多研发人员把spring看作心目中最好的Java项目&#xff0c;没有之一。 **可以毫不夸张…

MySQL篇—持久化和非持久化统计信息介绍(第一篇,总共三篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

c++委托构造函数与类的类型自动转换

前言 记录看书复习到的2个知识点 委托构造函数类类型自动转换 c11标准之后&#xff0c;类允许初始化数据成员&#xff0c;但是根据抽象派&#xff08;老派&#xff09;人员的观点&#xff0c;类一个抽象的东西&#xff0c;怎么能有具体的数值呢&#xff0c;就算要有默认数据…

送给2024数学建模参赛者20句话,学到就是赚到!

新学期来临&#xff0c;又到了备战数学建模竞赛火热时期&#xff0c;昨天为大家分享了常见的高含金量数模赛事&#xff0c;结合往届数学建模竞赛常见的问题及误区&#xff0c;数乐君给数模乐园铁粉们总结了20条数学建模竞赛参赛忠告&#xff0c;比赛期间绝对可以用到&#xff0…

Maya笔记 设置工作目录

Maya会把素材场景等自动保存在工作目录里&#xff0c;我们可以自己定义工作目录 步骤1 创建workspace.mel文件 文件/设置项目 ——>选择一个文件夹&#xff0c;点击设置——>创建默认工作区 这一个后&#xff0c;可以在文件夹里看到.mel文件 步骤2 自动创建文件夹…

Python把excel内容保存为图片(非统计图而是纯原表格数据)

一、引入 excel2img 库&#xff0c;没有的话使用 pip install excel2img进行安装 二、采用如下方法进行图片生成 excel文件名为&#xff1a;111.xlsx excel表格里面的sheet名称列表为 [Sheet1, Sheet2] 最终保存为以sheet名称.png的图片 支持跨表格合并项 import excel2i…

当Web3叙事寒冬到来,游戏是否是冬日里的“一把火”?

出品&#xff5c;欧科云链研究院 作者&#xff5c;Jason Jiang 以太坊创始人Vitalik在2019年曾说&#xff1a;金融与游戏会是区块链最先落地的场景。 在DeFi金融创新驱动上个周期后&#xff0c;沉寂近两年的Web3游戏板块&#xff0c;如今似乎也在复苏。无论是频繁获得融资&a…

【MySQL】学习多表查询和笛卡尔积 - 副本

](https://img-blog.csdnimg.cn/21dd41dce63a4f2da07b9d879ad0120b.png#pic_center) ??个人主页: ??热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ??个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-N8PeTKG6uLu4bJuM {font-family:“trebuchet ms”,…

在CentOS上使用Docker搭建Halo博客并实现远程访问的详细指南

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. Docker部署Halo1.1 检查Docker版本1.2 在Docker中部署Halo 二. Linux安装Cpol…

[CISCN 2019华东南]Web11

打开题目 看到xff就应该想到抓包 看回显也是127.0.0.1&#xff0c;我们盲猜是不是ssti模板注入 输入{{7*7}}显示49 可以看的出来flag在根目录下 输入{system(‘cat /flag’)} 得到flag 知识点&#xff1a; 漏洞确认 一般情况下输入{$smarty.version}就可以看到返回的smarty…

[数据集][目标检测]狗狗表情识别VOC+YOLO格式3971张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3971 标注数量(xml文件个数)&#xff1a;3971 标注数量(txt文件个数)&#xff1a;3971 标注…

Maven编译报processing instruction can not have PITarget with reserveld xml name

在java项目中&#xff0c;平时我们会执行mvn clean package命令来编译我们的java项目&#xff0c;可是博主今天执行编译时突然报了 processing instruction can not have PITarget with reserveld xml name 这个错&#xff0c;网上也说法不一&#xff0c;但是绝大绝大部分是因…

原创 黑马程序员微信小程序学习总结9.API Promise化、全局数据共享(store)

目录 API Promise化基于回调函数的异步API的缺点什么是API Promise化使用步骤实现API Promise化步骤 结果&#xff08;用处&#xff09; 全局数据共享如何安装mobx相关的包实现全局共享使用方法如何将store中的成员绑定到组件中&#xff08;即在组件中使用store&#xff09; AP…

【深度学习】Pytorch教程(八):PyTorch数据结构:2、张量的数学运算(6):高维张量:乘法、卷积(conv2d~四维张量;conv3d~五维张量)

文章目录 一、前言二、实验环境三、PyTorch数据结构1、Tensor&#xff08;张量&#xff09;1. 维度&#xff08;Dimensions&#xff09;2. 数据类型&#xff08;Data Types&#xff09;3. GPU加速&#xff08;GPU Acceleration&#xff09; 2、张量的数学运算1. 向量运算2. 矩阵…

【论文复现】——一种新的鲁棒三维点云平面拟合方法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的GPT爬虫。 一、算法原理 1、论文概述 针对三维点云中的异常值和粗差点对平面拟合精度产生的影响,文章提出一…

【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(上)

目录 1 -> 面向过程与面向对象的初步认识 2 -> 类的引入 3 -> 类的定义 4 -> 类的访问限定符及封装 4.1 -> 访问限定符 4.2 -> 封装 5 -> 类的作用域 6 -> 类的实例化 7 -> 类对象模型 7.1 -> 如何计算类对象的大小 7.2 -> 类对象…

SpringCloud Eureka(注册中心)

一、spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具&#xff0c;包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单&#xff0c;可以在开发人员的电脑上跑。另外说明spring cloud是基…

Leetcoder Day25| 回溯part05:子集+排列

491.递增子序列 给定一个整型数组, 你的任务是找到所有该数组的递增子序列&#xff0c;递增子序列的长度至少是2。 示例: 输入:[4, 7, 6, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [6, 7], [7,7], [4,7,7]] 说明: 给定数组的长度不会超过15。数组中的整数范围是 [-100,100]。给定数…

小程序一键链接WIFI

1.小程序一键链接WIFI connectWifi: function() {var that this;//检测手机型号wx.getSystemInfo({success: function(res) {var system ;if (res.platform android) system parseInt(res.system.substr(8));if (res.platform ios) system parseInt(res.system.substr(4…