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就会调用。

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python 基础绘图函数 实例

简介 在 Python 中&#xff0c;有许多用于绘图的库。以下是一些常用的 Python 绘图库及其基本绘图函数的简要介绍&#xff1a; Matplotlib: matplotlib.pyplot.plot(x, y): 绘制线图。matplotlib.pyplot.scatter(x, y): 绘制散点图。matplotlib.pyplot.bar(x, height): 绘制条…

【kubernetes】关于k8s集群的声明式管理资源

目录 一、声明式管理方法 二、资源配置清单管理 1、导出资源配置清单 2、修改资源配置清单并应用 2.1离线修改 2.2在线修改 三、通过资源配置清单创建资源对象 获取K8S资源配置清单文件模板&#xff1f; 关于配置清单常见的字段 方案一&#xff1a;手写yaml配置文件 …

css常用的选择器介绍

CSS&#xff08;层叠样式表&#xff09;选择器是CSS规则的一部分&#xff0c;它用于选择和定位网页上的元素&#xff0c;以便将样式应用到这些元素上。CSS选择器的种类繁多&#xff0c;每种选择器都有其特定的用途、特点和效率。在这篇文章中&#xff0c;我们将讨论一些常用的C…

EMR StarRocks实战——Mysql数据实时同步到SR

文章摘抄阿里云EMR上的StarRocks实践&#xff1a;《基于实时计算Flink使用CTAS&CDAS功能同步MySQL数据至StarRocks》 前言 CTAS可以实现单表的结构和数据同步&#xff0c;CDAS可以实现整库同步或者同一库中的多表结构和数据同步。下文主要介绍如何使用Flink平台和E-MapRed…

免费的Git图形界面工具sourceTree介绍

阅读本文同时请参阅-----代码库管理工具Git介绍 sourceTree是一款免费的Git图形界面工具&#xff0c;它简化了Git的使用过程&#xff0c;使得开发者可以更加方便地下载代码、更新代码、提交代码和处理冲突。下面我将详细介绍如何使用sourceTree进行这些操作。 1.下载和…

GEE数据集——数字地球澳大利亚海岸线(更新)

数字地球澳大利亚海岸线 澳大利亚数字地球海岸线是一个大陆数据集&#xff0c;包括从 1988 年至今整个澳大利亚海岸线的年度海岸线和海岸变化率。该产品将澳大利亚地球科学组织的 "澳大利亚数字地球 "计划提供的卫星数据与潮汐模型相结合&#xff0c;绘制出每年平均海…

Vue自定义指令directives

1. 使用<script setup> <template><input v-focus"11111" /><input v-obj"{ id: 1, name: 这里是name }" /> </template> <script setup> //定义一个变量vFocus //命名方法使得DOM元素中可以用v-focus来显示 let vFo…

GPT 的基础 - T(Transformer)

我们知道GPT的含义是&#xff1a; Generative - 生成下一个词 Pre-trained - 文本预训练 Transformer - 基于Transformer架构 我们看到Transformer模型是GPT的基础&#xff0c;这篇博客梳理了一下Transformer的知识点。 BERT:通过自监督的方式,在大规模语料上预训练得到的Tran…

05 动力云客之分页查询用户 + 查询用户详情 + 新增用户

1. 用户列表分页查询实现 核心 使用pageHelper实现分页 GetMapping(value "api/users")//分页的参数可以不传, 不传就默认设置为1public R userPage(RequestParam(value "current", required false) Integer current) {if (current null) {current …

数据服务安全的重要性

数据服务安全在当今信息化社会显得尤为重要。随着大数据、云计算、人工智能等技术的飞速发展&#xff0c;数据已经成为企业和组织的核心资产&#xff0c;数据服务安全也面临着前所未有的挑战。本文将从数据服务安全的重要性、常见威胁、防护策略以及未来发展趋势等方面进行探讨…

chatgpt帮忙看代码瞬间不难受了

目标&#xff1a;初步熟悉下mysql启动流程逻辑、熟悉下mysql增删改查逻辑 材料&#xff1a; 下载个源码包&#xff1a;MySQL :: Download MySQL Community Server安装个visual studio code 软件用来看代码chatgpt 开始&#xff1a; ##怎么容易怎么来&#xff1a;先查查网上别…

Qt篇——QTableWidget保存表格数据到Excel文件中,读Excel内容到QTableWidget

表格和excel例子如下图所示&#xff1a; 一、QTableWidget保存表格数据到Excel文件中 代码如下&#xff1a; &#xff08;pro文件中添加QT axcontainer&#xff09; #include <QAxObject>void MainWindow::saveTableToExcel() {QDateTime current_date_time QDateTi…

SpringBoot:Invalid bound statement (not found)的原因和解决方案

&#x1f413; 报错信息&#xff1a; &#xff08;无效绑定声明&#xff09;找不到 解析&#xff1a; 你的mapper实例对象和对应的mapper.xml对象未找到 &#x1f413; 排查&#xff1a; 情况一&#xff1a; 1.排除相对应的mapper实例对象路径是否正确 查看相对应的mapper中…

MIND解读

这篇paper的核心是胶囊网络&#xff0c;该网络采用了动态路由算法自动对用户历史行为序列进行聚类&#xff0c;提取出多个兴趣向量&#xff0c;代表用户的不同兴趣。当用户再有新的交互时&#xff0c;通过胶囊网络&#xff0c;还能实时的改变用户的兴趣表示向量&#xff0c;做到…

前后端项目-part02

文章目录 4 课程分类树4.1 需求展示4.2 后端开发4.2.1 添加工具类4.2.2 添加依赖4.2.3 创建实体类4.2.4 创建Mapper4.2.5 创建Service4.2.6 创建Controller4.2.7创建启动类4.2.8创建yml文件4.2.9测试4.3 前端开发4.3.1 树形控件测试4.3.2 替换测试数据4.4 利用ThreadLocal实现共…

腾讯云服务器4核8G性能,和阿里云比怎么样?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

实现unity场景切换

本文实现两个按键实现场景1和场景2之间的切换 ①首先在unity 3D中创建两个场景&#xff0c;分别为Scene1和Scene2 ②在Scene1中创建一个Button&#xff0c;修改txt内容为“To Scene2”&#xff0c;并在Buttons下创建一个空物体&#xff0c;用于挂载脚本。 脚本Trans Scene.…

ElasticSearch之找到乔丹的空中大灌篮电影

写在前面 本文看一个搜索的实际例子&#xff0c;找到篮球之神乔丹的电影Space Jam&#xff0c;即空中大灌篮。 正式开始之前先来看下要查询的目标文档&#xff0c;以及查询的text&#xff1a; 要查询的目标文档 {..."title": "Space Jam",..."ove…

顶顶通呼叫中心中间件-如何使处于机器人话术中的通话手动转接到坐席分机上讲解(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件使用httpapi实现电话转接操作过程讲解(mod_cti基于FreeSWITCH) 需要了解呼叫中心中间件可以点以下链接了解顶顶通小孙 1、使用httpapi接口转接 一、打开web版的ccadmin并且找到接口测试 打开web-ccadmin并且登录&#xff0c;登录完成之后点击运维调试-再…

5G-A,未来已来

目前&#xff0c;全国首个5G-A规模组网示范完成。这项由北京联通携手华为共同打造的示范项目&#xff0c;实现了北京市中心金融街、历史建筑长话大楼、大型综合性体育场北京工人体育场三个重点场景的连片覆盖。 实际路测结果显示&#xff0c;5G-A用户下行峰值速率达到10Gbps&am…