引言

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

关注公众号:编程火箭车。在【粉丝福利】中点击【面题大全】,其中的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. 可视化—AntV G6 紧凑树实现节点与边动态样式、超过X条展示更多等实用小功能

    通过一段时间的使用和学习,对G6有了更一步的经验,这篇博文主要从以下几个小功能着手介绍,文章最后会给出完整的demo代码. 目录 1. 树图的基本布局和使用 2. 根据返回数据的属性不同,定制不一样的 ...

  2. 前端根据后端返回的数据流导出excel

    首先在utils.js里面声明exportMethod函数,该函数的作用是通过发axios post请求后端导出接口,请求成功后: 1. 在成功函数里面先新建一个a标签: const link = d ...

  3. 2023年这个星球共同话题chatgpt,火爆全球的chatgpt到底是啥?会抢谁的饭碗?如何避免沦为ChatGPT时代的废物

    2023年初到现在这个星球人人谈chatgpt,火爆全球的#chatgpt 到底是啥?会抢谁的饭碗?如何避免沦为ChatGPT时代的废物 ChatGPT的横空出世迅速点燃了外界的关注.推出仅两个月后, ...

  4. Service Mesh之Istio基础入门

    技术背景 分布式服务治理 所谓分布式服务治理就是对服务不断增长的复杂度的管控和管理:管控及管理包含网络拓扑变动.网络延时.通信安全.API网关.服务注册和发现.服务熔断容错.服务超时重试.服务部署.数 ...

  5. 软件开发定律:海勒姆定律(Hyrum's Law)

    hi,我是熵减,见字如面. 在软件开发中,你是否遇到过这种情况: 你正在开发一个购物车的功能,需要在用户添加商品到购物车时,将商品的信息存储到数据库中.你设计了一个简单的方法,如下所示: public ...

  6. 在Kubernetes(k8s)中部署 jenkins

    在Kubernetes(k8s)中部署 jenkins YAML配置文件 由于jenkins需要持久化存储,通过nfs动态供给pvc存储卷. 可以参考我之前的文档:https://cloud.tenc ...

  7. jinjia2基本用法

    前言这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题 于是乎,我自己开发了一款面试宝典,希望 ...

  8. ChatGPT,我彻彻底底沦陷了!

    当谈到人工智能技术的时候,我们会经常听到GPT这个术语.它代表"Generative Pre-trained Transformer",是一种机器学习模型,采用了神经网络来模拟人类 ...

  9. day30:TCP&UDP:socket

    目录 1.TCP协议和UDP协议 2.什么是socket? 3.socket正文 1.TCP基本语法 2.TCP循环发消息 3.UDP基本语法 4.UDP循环发消息 4.黏包 5.解决黏包问题 1.解 ...

  10. CommunityToolkit.Mvvm8.1 IOC依赖注入控制反转(5)

    本系列文章导航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址 ...