Java面试题(九)–Spring MVC

1、Spring MVC中的拦截器和Servlet中的filter有什么区别?

过滤器:依赖于servlet容器,在实现上基于函数回调,可以对几乎所有请求进行过滤

拦截器:依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。

2、Spring MVC常用的注解有哪些?(高频)

1、@RequestMapping:用于映射请求路径,可以定义在类上和方法上。用于类上,则表示类中的所有的方法都是以该地址作为父路径。

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

3、@RequestParam:指定请求参数的名称

4、@PathViriable:从请求路径下中获取请求参数(/user/{id}),传递给方法的形式参数

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

6、@RequestHeader:获取指定的请求头数据

3、Sping MVC中的控制器的注解一般用哪个?有没有别的注解可以替代?(高频)

一般用 @Controller注解,也可以使用 @RestController,@RestController注解相当于@ResponseBody + @Controller。

4、如果想限定发送的请求方式应该如何进行实现?

两种方式:

1、使用@RequestMapping注解的method属性,如下所示:

Java面试题(九)--Spring MVC

2、使用GetMapping

Java面试题(九)--Spring MVC

5、Spring MVC的Controller线程安全?如何解决?

Controller是默认单例模式,高并发下全局变量会出现线程安全问题!

解决方案:

1、将全局变量都变成局部变量,通过方法参数来传递。

2、将控制器的作用域从单例改为原型,如下所示:

Java面试题(九)--Spring MVC

8、Spring MVC怎么样设定重定向和转发的?(高频)

1、在返回值前面加”forward:”就可以让结果转发,譬如”forward:user.do?name=method4″

2、在返回值前面加”redirect:”就可以让返回值重定向,譬如”redirect:http://www.baidu.com

9、Spring MVC怎么和AJAX相互调用的?

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

1、导入json数据转换的核心jar包

Java面试题(九)--Spring MVC
2、在适配器中配置json数据转换的解析器(因为使用的注解驱动开发,所以不需要再进行配置)

Java面试题(九)--Spring MVC
3、Controller方法直接返回对象或者List数据,在Controller方法上使用@ResponseBody注解

Java面试题(九)--Spring MVC

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

1、解决post请求乱码问题:

![[Spring MVC面试题.png]]

2、GET请求中文参数出现乱码解决方法有两个

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


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

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

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

11、使用Spring MVC如何完成文件上传?

1、文件上传对前端要求

  • 请求方式必须是POST请求
  • 表单的enctype必须是multipart/form-data
  • 表单中至少要有一个文件上传表单项

2、Spring MVC如何接收上传的文件

  • 导入commons-fileupload(spring MVC底层依赖的就是Apache的FileUpload)
  • 配置文件上传解析器
  • 在Controller方法的形参中定义MutipartFile,接收上传的文件,形要求参的名称需要和文件上传表单项名称一致

文件上传解析器的配置如下所示:

![[Spring MVC面试题-1.png]]

12、Spring MVC如何获得request, response, session?(高频)

1、方式一:在Controller方法的形参中可以直接定义HttpServletRequest HttpServletResponse,HttpSession

2、方式二:通过@Autowired注入HttpServletRequest,HttpServletResponse ,HttpSession

13、Spring MVC怎么处理异常?(高频)

可以直接使用Spring MVC中的全局异常处理器对异常进行统一处理,此时Contoller方法只需要编写业务逻辑代码,不用考虑异常处理代码。

开发一个全局异常处理器需要使用到两个注解: @ControllerAdvice@ExceptionHandler

如下所示:

Java面试题(九)--Spring MVC

14、Spring MVC执行流程是什么?(高频)

Java面试题(九)--Spring MVC

具体流程如下所示:

1、用户发送出请求到前端控制器DispatcherServlet。

2、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。

3、HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。

4、DispatcherServlet调用HandlerAdapter(处理器适配器)。

5、HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。

6、Controller执行完成返回ModelAndView对象。

7、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。

8、DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)。

9、ViewReslover解析后返回具体View(视图)。

10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

11、DispatcherServlet响应用户。

15、Spring MVC的主要组件都包含了哪些?(高频)

如下所示:

1、前端控制器 DispatcherServlet(不需要程序员开发):作用:接收请求、响应结果 相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。

2、理器映射器HandlerMapping(不需要程序员开发)作用:根据请求的URL来查找Handler

3、处理器适配器HandlerAdapter(不需要程序员开发)作用:执行处理器

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

5、视图解析器 ViewResolver(不需要程序员开发)作用:进行视图的解析 根据视图逻辑名解析成真正的视图(view)

6、视图View(需要程序员开发jsp)View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)

Original: https://www.cnblogs.com/xy1857/p/16557982.html
Author: Orator-xy
Title: Java面试题(九)–Spring MVC

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620452/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Jenkins+gitlab+docker+harbor容器化自动部署详细流程

    环境:Linux版本:Centos7 一、更新源:yum update 二、安装docker:yum install docker -y 启动docker: systemctl s…

    数据库 2023年6月16日
    0117
  • MySQL实战45讲 13

    13 | 为什么表数据删掉一半,表文件大小不变? 一个 InnoDB 表包含两部分,即: 表结构定义和 数据。 在 MySQL 8.0 版本以前, 表结构是存在以.frm 为后缀的…

    数据库 2023年6月16日
    085
  • DASCTF 熟悉的猫

    压缩包需要密码,不是伪加密,爆破也爆不出来,下面的kdbx文件搜了一下可以用keepass ;打开,但是居然还是需要密码 那这个只能是弱口令或者爆破了,但是纯手工肯定不可取,找了很…

    数据库 2023年6月11日
    067
  • 【StoneDB研发日志】列式存储 delete方案调研

    MySQL删除数据的方式 以MySQL 5.7为例,数据库删除数据的方式一共有以下三种: delete truncate drop 三种方式都可以删除数据,但使用场景有所不同。 […

    数据库 2023年5月24日
    084
  • Cookie & Session

    posted @2020-12-02 23:48 一方玩 阅读(31 ) 评论() 编辑 Original: https://www.cnblogs.com/tianyuwohu/…

    数据库 2023年6月6日
    076
  • MySQL45讲之主备数据一致性

    本文主要介绍 MySQL 主备数据同步的重要日志 binlog 的三种格式,和双 M 结构的循环复制问题。 binlog三种格式 1. statement格式 直接存储了执行的 S…

    数据库 2023年5月24日
    087
  • [Mysql]null与真值

    SQL的逻辑运算使用的是三值逻辑,逻辑表达式的计算结果有三种可能, true, false, unknown 比较运算的表达式含 NULL时会产生 unknown结果,例如 SEL…

    数据库 2023年6月16日
    074
  • 使用MySQL Shell创建MGR

    本篇知识点: 配置MGR所需的参数 使用MySQL Shell配置MGR shell.connect() var 设定临时变量 dba.createCluster() dba.ge…

    数据库 2023年6月16日
    0100
  • http状态码总结

    表示临时响应并需要请求者继续执行操作的状态代码。 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。101 (切换协议) 请求…

    数据库 2023年6月6日
    056
  • go的调度

    操作系统根据资源访问权限的不同,体系架构可以分为用户空间和内核空间;内核空间主要操作访问CPU资源,IO资源,内存资源等硬件资源,为应用程序提供最基本的基础资源;用户空间是上层应用…

    数据库 2023年6月9日
    075
  • 微信登录前端开发指南

    使用场景 微信公众号内嵌H5网页调用微信登录 在微信浏览器中的网页唤起微信登录界面 详情可以查阅微信登录官方文档 链接地址 功能思路 后台先在微信给开发者提供的测试账号平台上创建应…

    数据库 2023年6月11日
    069
  • FlyAway–数据库版本管理工具

    相关博文: FlyAway官方文档: https://flywaydb.org/documentation/getstarted/how 关于SpringBoot整合并使用FlyA…

    数据库 2023年6月6日
    051
  • 2022-08-19 PreparedStatement

    PreparedStatement接口是 Statement的子接口,它表示一条预编译过的SQL语句 什么是SQL注入 SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,…

    数据库 2023年6月14日
    075
  • CenoOS 7环境下编译OpenJDK8

    一、准备工作 1.1、不再使用”$make sanity”来检查编译环境,而是改用”$./configure” 1.2、不再使用an…

    数据库 2023年6月9日
    074
  • SQL语句大全–SQL

    前言 本片博客使用mysql数据库进行数据操作,使用Navicat for mysql 这个IDE进行可视化操作。每个SQL语句都是亲身实验验证的,并且经过自己的思考的。能够保证s…

    数据库 2023年5月24日
    056
  • MySQL使用步骤

    出现mysqld: Can’t create directory ‘D:\Environment\mysql-5.7.37 \data’ (Er…

    数据库 2023年5月24日
    0137
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球