引言

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

关注公众号:编程火箭车。在【粉丝福利】中点击【面题大全】,其中的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. vue3中watch的写法大合集。

    VUE2的watch是一个属性写法是 watch:{ data1(newVal,oldVal){ 同步/异步操作 } } VUE3的watch则是一个函数,写法是 注意数据必须是响应式的 let nu ...

  2. 【原创】Ubuntu Pro 中的RealTime linux(Real-time Ubuntu/PREEMPT-RT/ubuntu官方PREEMPT-RT)

    [原创]Ubuntu Pro 订阅中的realtime linux(Real-time Ubuntu/PREEMPT-RT) 目录 [原创]Ubuntu Pro 订阅中的realtime linux( ...

  3. 标准正态分布表—R语言

    正态分布是最重要的一种概率分布.正态分布概念是由德国的数学家和天文学家Moivre于1733年首次提出的,但由于德国数学家Gauss率先将其应用于天文学家研究,故正态分布又叫高斯分布.高斯这项工作对后 ...

  4. CentOS8 搭建Kubernetes

    CentOS8 搭建Kubernetes 主机名 IP 组件 k8s-master 192.168.40.128/24 kubeadm.kubelet.kubectl.docker-ce k8s-no ...

  5. 虚拟机安装linux操作系统中IP设置

    问题描述:用虚拟机安装linux操作系统时,不选择分配IP,系统默认会分配动态IP,如果是临时搭建,就可以默认动态IP,也可以使用连接工具连接虚拟机.但如果是长期使用,选择使用固定的IP会更好,需要手 ...

  6. Terraform 系列-Terraform 简介

    系列文章 Terraform 系列文章 前言 最近在使用 Terraform 来置备 OCI 的 Always Free Tier, 发现它非常好用.总结学习下:Terraform 的基础知识. 什么 ...

  7. 【Spring5】数据库事务操作

    Spring针对事务的操作 事务的概念:事务是数据库最基本的单元,逻辑上的一组操作,要么都成功,如果有一个操作失败则都失败. 事务的特性:ACID 原子性.一致性.隔离性.持久性 JavaEE环境三层 ...

  8. Java学习笔记13

    1.Date类 1.1 概述 ​ java.util.Date类表示特定的瞬间,精确到毫秒. 1.2 构造方法 Date类有多个构造方法,部分已经过时. 方法 作用 public Date() 从此刻 ...

  9. Golang爬虫:使用正则表达式解析HTML

    之前所写的爬虫都是基于Python,而用Go语言实现的爬虫具有更高的性能. 第一个爬虫 使用http库,发起http请求 package main import ( "fmt" & ...

  10. Java线程中断机制

    在阅读AQS源码以及juc包很多基于AQS的应用源码过程中,会遇到很多interrupted相关的方法,这里复习一下java线程中断相关. 要点:使用interrupt()中断一个线程,该方法只是标记 ...