引言

面试题==知识点,这里所记录的面试题并不针对于面试者,而是将这些面试题作为技能知识点来看待。不以刷题进大厂为目的,而是以学习为目的。这里的知识点会持续更新,目录也会随时进行调整。

关注公众号:编程火箭车。在【粉丝福利】中点击【面题大全】,其中的Java面试题在线实时更新、查看。


一、面试题导航

点这里进入JavaWeb编程面试题——导航

面试题持续更新中…...

二、面试题目

1.Spring MVC是什么?

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

2.Spring MVC有哪些优点?

  • 灵活性:Spring MVC 可以很好地与其他 Spring 框架组件集成,也可以与其他框架和技术进行集成。

  • 易于测试:Spring MVC 通过依赖注入的机制轻松实现了针对控制器的单元测试,使开发人员随时可以测试自己的代码。

  • 高可维护性:Spring MVC 采用了 MVC 设计模式,将应用程序划分为Model、View和Controller三个部分,这使得应用程序的各个部分之间的耦合性较低,使得应用程序高可维护性受益。

  • 支持多种视图技术:Spring MVC 支持多种视图技术,如 JSP、FreeMarker、Velocity、Thymeleaf 等。开发人员可以根据自己的需求和技能选择最适合自己的视图技术。

  • 支持注解:Spring MVC 支持使用注解进行配置,并采用了统一的注解方式,简化了配置过程。

  • 安全性:Spring MVC 可以集成 Spring Security 框架,提供了安全的访问控制和身份验证。

  • 可定制性:Spring MVC 框架中的各个组件都可以通过继承、接口实现、AOP 等方式进行个性化定制,定制出符合自己需求的框架。

  • RESTful支持:Spring MVC 内置对 RESTful 架构支持很好,是构建 RESTful Web 服务的首选框架之一。

总之,Spring MVC 具有高度的灵活性和定制性,使得开发人员可以根据自己的业务需求来选择最适合自己的配置和设计方式。此外,Spring MVC 还具有高性能、安全、可维护、易于测试等诸多优点,这使得它在 Web 应用程序开发中得到了广泛的应用。

3.Spring MVC有哪些组件?

Spring MVC 的核心组件:

  • DispatcherServlet:中央控制器,将请求转发到具体的控制类。

  • Controller:具体处理请求的控制器。

  • HandlerMapping:映射处理器,负责映射中央处理器转发给 Controller 时的映射策略。

  • ModelAndView:服务层返回的数据和视图层的封装类。

  • ViewResolver:视图解析器,解析具体的视图。

  • Interceptors:拦截器,负责拦截我们定义的请求然后做处理工作。

4.请简单说一下SpringMVC的请求处理过程?

(1)发起请求到前端控制器(DispatcherServlet)。

(2)前端控制器请求 HandlerMapping 查找 Handler,可以根据 xml 配置、注解进行查找。

(3)处理器映射器 HandlerMapping 向前端控制器返回 Handler。

(4)前端控制器调用处理器适配器去执行 Handler。

(5)处理器适配器去执行 Handler。

(6)Handler 执行完成给适配器返回 ModelAndView。

(7)处理器适配器向前端控制器返回 ModelAndView,ModelAndView 是SpringMVC 框架的一个底层对象,包括 Model 和 view。

(8)前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(jsp)。

(9)视图解析器向前端控制器返回 View。

(10)前端控制器进行视图渲染,视图渲染将模型数据(在 ModelAndView 对象中)填充到 request 域。

(11)前端控制器向用户响应结果。

5.Spring 和 Spring MVC 的关系?

最开始只有 Spring,提供 IOC 和 AOP 核心功能,后来出现了 MVC、Security、Boot 等。原来的 Spring 就变成了现在的 Spring Core。

Spring MVC 就是一个 MVC 框架,其实大范围上来说属于 Spring,Spring MVC 是一个类似于 Struts 的 MVC 模式的 Web 开发框架,Spring MVC 是基于 Spring 功能之上添加的 Web 框架,Spring 跟 SpringMVC 可以理解为父子容器的关系,想用 Spring MVC 必须先依赖 Spring。

Spring MVC 是控制层,用来接收前台传值,调用 service 层和持久层,返回数据再通过 Spring MVC 把数据返回前台。

6.Spring MVC 和 Struts2 的区别有哪些?

  • Spring MVC 的入口是一个 servlet 即前端控制器,而 struts2 入口是一个 filter 过虑器。

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

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

7.SpringMVC怎么样设置重定向和转发?

  • 在返回值前面加 forward: 就可以让结果转发,如:"forward:user?name=admin"

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

8.SpringMVC返回JSON数据的注解?

@ResponseBody

9.SpringMVC还有什么方式返回JSON数据?

使用 JSON 工具将对象序列化成 JSON,常用工具 Jacksonfastjsongson

利用 HttpServletResponse,然后获取 response.getOutputStream()response.getWriter()

10.SpringMVC Controller中的常用注解?

@Controller @RequestMapping @GetMapping @PostMapping @Autowired @ResponseBody @RequestBody @RequestParam @PathVariable @Validated

11.SpringMVC常用注解都有哪些?

  • @requestMapping:用于请求 url 映射。

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

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

  • @Controller:控制器的注解,表示是表现层,不能用用别的注解代替。

12.SpringMVC 是线程安全的么?

  • SpringMVC 是线程安全的,因为 SpringMVC 是基于方法拦截处理请求,参数的变量全部是局部变量,并且 Spring 容器中的 Bean 默认也是单例模式,所以一般情况下不会产生线程安全问题。

  • 如果非得要在 SpringMVC 中定义成员变量,设置为只读状态或者无状态也不会有线程安全问题。

  • 如若非得在 Controller 中定义带状态的对象,并且多线程可以操作,则两种方式解决线程安全问题。

    • 在 Controller 中使用 ThreadLocal 变量,对于 SpringMVC 中的数据共享,是通过 ThreadLocal 实现,ThreadLocal 相当于一个 Map 集合,只不过 key 实现线程对象,value 是共享数据,针对共享数据进行线程隔离,同一个变量,不同的线程访问,会得到不同的结果,互相不干扰。

    • 在 Spring 配置文件 Controller 中声明 scope="prototype",每次都创建新的 Controller。

13.过滤器和拦截器的区别?

执行顺序 :过滤前 - 拦截前 - Action 处理 - 拦截后 - 过滤后。

  • 拦截器是基于Java的反射机制的,而过滤器是基于函数回调。

  • 拦截器不依赖与Servlet容器,过滤器依赖与Servlet容器。

  • 拦截器只能对处理器(Controller、Action)请求起作用,而过滤器则可以对几乎所有的请求起作用。

  • 拦截器可以访问上下文对象,而过滤器不能访问。

  • 在Servlet的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

14.@PathVariable和@RequestParam的区别?

在 Spring MVC 中,@PathVariable@RequestParam 都是用来从访问的 URL 中接收传递的参数的注解,但它们使用方式和处理的参数种类不同。

  • @PathVariable 注解用于解析 URL 中的占位符参数,即获取 URL 中的某一部分作为参数,比如获取 URL 中的 ID,如下面的示例:
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
//处理id参数
}

在这个例子中,@PathVariable 注解将 URL 中的 id 参数映射到方法参数上,方法中的参数 id 将获取 URL 路径上的 {id} 值。

  • @RequestParam 注解用于获取请求中的查询参数,即获取 URL 中问号?后面的参数,如下面的示例:
@GetMapping("/users")
public List<User> getUsers(@RequestParam("page") int page, @RequestParam("size") int size) {
//处理page和size参数
}

在这个例子中,@RequestParam("page") 将从请求 URL 中获取名为 page 的参数值,并将其映射到方法中的 page 参数上。这个注解还可以指定参数的默认值、是否必需等。

综上所述,@PathVariable 用于接收 URL 中的占位符参数,@RequestParam 用于接收 URL 上的查询参数,两者的使用方式和处理的参数种类不同。


关注公众号:编程火箭车

我们定期发布编程相关的文章、资讯、活动等内容。帮助编程爱好者、初学者或初级程序员快速入门、打牢基础。欢迎大家关注,和我们一起探索编程的精彩世界。我们定期发布编程相关的文章、资讯、活动等内容。帮助编程爱好者、初学者或初级程序员快速入门、打牢基础。欢迎大家关注,和我们一起探索编程的精彩世界。

JavaWeb编程面试题——Spring Web MVC的更多相关文章

  1. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中的spring web MVC模块

    spring framework中的spring web MVC模块 1.概述 spring web mvc是spring框架中的一个模块 spring web mvc实现了web的MVC架构模式,可 ...

  2. Spring REST实践之Spring Web MVC

    Spring概要 Spring Framework提供了依赖注入模型和面向切面编程,简化了基础型代码的编写工作以及更好的能够与其它框架和技术整合起来.Spring Framework由data acc ...

  3. Spring Web MVC(一)

    [toc] 概述 Spring的web框架围绕DispatcherServlet设计. DispatcherServlet的作用是将请求分发到不同的处理器. Spring的web框架包括可配置的处理器 ...

  4. 初试 spring web mvc

    作为一名code需要了解更多的知识,编程方面的东西太多了,是个逐渐积累的过程.最近学习一下spring web mvc,写下我个人的一些经验. 1.准备jar包.spring mvc 已经到了版本4, ...

  5. Unit03: Spring Web MVC简介 、 基于XML配置的MVC应用 、 基于注解配置的MVC应用

    Unit03: Spring Web MVC简介 . 基于XML配置的MVC应用 . 基于注解配置的MVC应用 springmvc (1)springmvc是什么? 是一个mvc框架,用来简化基于mv ...

  6. 菜鸟学习Spring Web MVC之二

    有文章从结构上详细讲解了Spring Web MVC,我个菜鸟就不引据来讲了.说说强悍的XP环境如何配置运行环境~~ 最后我配好的环境Tomcat.Spring Tool Suites.Maven目前 ...

  7. 4.Spring Web MVC处理请求的流程

  8. 1.Spring Web MVC有什么

    Spring Web MVC使用了MVC架构模式的思想,将web层进行职责解耦. 同样也是基于请求驱动的,也就是使用请求-响应模型.它主要包含如下组件: DispatcherServlet :前端控制 ...

  9. Spring Boot——2分钟构建spring web mvc REST风格HelloWorld

    之前有一篇<5分钟构建spring web mvc REST风格HelloWorld>介绍了普通方式开发spring web mvc web service.接下来看看使用spring b ...

  10. Features of Spring Web MVC

    21.1.1 Features of Spring Web MVC Spring Web Flow Spring Web Flow (SWF) aims to be the best solution ...

随机推荐

  1. 关于MySQL建立库表时大写自动转换为小写的解决方案

    mysql 5.6以上windows对大小写敏感要在my.ini中的[mysqld]下面设置lower_case_table_names = 2 网上有的要改成0 亲测报错 [○・`Д´・ ○]

  2. 使用golang+antlr4构建一个自己的语言解析器(完结篇)

    Goland 中Antlr4插件 在goland中安装Antlr4插件,用于识别输入的字符在在语法文件中生成的语法树的样子,大概就是如下的摸样 下载步骤: 1.点击文件中的设置选项 2.在插件目录下输 ...

  3. Defi开发简介

    Defi开发简介 介绍 Defi是去中心化金融的缩写, 是一项旨在利用区块链技术和智能合约创建更加开放,可访问和透明的金融体系的运动. 这与传统金融形成鲜明对比,传统金融通常由少数大型银行和金融机构控 ...

  4. [PKM] 家庭数据中心

    1 NAS(Network Attached Storage/网络附属存储) 1.1 NAS的定义 NAS(Network Attached Storage:网络附属存储):具备资料存储功能的装置.按 ...

  5. [数据库/Java]数据库开发过程中产生的MySQL错误代码及其解决方案

    前言 吐槽一下,均是这两天遇到的破烂事儿,搞定了也好,以后出现此类问题也就放心些了. 下列遇到的问题大都是因为MySQL从5.x版本升级到8.0.11(MySQL8.0涉及重大改版)后,跟着连带着出现 ...

  6. HTTP.sys漏洞的检测和修复(附补丁包下载)

    关于这个 HTTP.sys 漏洞,查了一些资料,没有一个写的比较全的,下面我来整理下. 这个漏洞主要存在Windows+IIS的环境下,任何安装了微软IIS 6.0以上的Windows Server ...

  7. MySQL主从复制原理剖析与应用实践

    vivo 互联网服务器团队- Shang Yongxing MySQL Replication(主从复制)是指数据变化可以从一个MySQL Server被复制到另一个或多个MySQL Server上, ...

  8. 涨姿势了,有意思的气泡 Loading 效果

    今日,群友提问,如何实现这么一个 Loading 效果: 这个确实有点意思,但是这是 CSS 能够完成的? 没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元 ...

  9. JAVASE和JAVAEE的区别

    JAVASE和JAVAEE的区别 JavaEE: Java Enterprise Edition,Java企业版,多用于企业级开发,包括web开发等等.企业版本帮助开发和部署可移植.健壮.可伸缩切安全 ...

  10. 深入理解 Redis 新特性:Stream

    该数据结构需要 Redis 5.0.0 + 版本才可用使用 概述 Redis stream 是 Redis 5 引入的一种新的数据结构,它是一个高性能.高可靠性的消息队列,主要用于异步消息处理和流式数 ...