当前位置: 首页 > news >正文

SpringMVC 面试题

1、什么是SpringMVC?

SpringMVC是一个基于Java的实现了MVC设计模式的“请求驱动型”的轻量级WEB框架,通过把model,view,controller 分离,将web层进行职责的解耦,把复杂的web应用分成逻辑清晰的几个部分,简化开发,减少出错,方便开发人员之间的配合。

2、SpringMVC的处理流程?

  1. 用户发送请求给前端控制器DispatcherServlet
  2. DispatcherServlet收到请求后,调用处理器映射器HandlerMapping,获取请求Handler
  3. 处理器映射器根据请求url找到具体的处理器Handler,生成处理器对象以及处理器拦截器(如果有就生成),然后一并返回给DispatcherServlet
  4. DispatcherServlet调用处理器适配器HandlerAdapter,请求执行Handler
  5. 处理器适配器HandlerAdapter 经过适配,调用具体处理器来处理业务逻辑
  6. Handler执行完成之后,返回ModelAndView
  7. HandlerAdapter将handler执行结果的ModelAndView返回给DispatcherServlet
  8. DispatcherServlet将ModelAndView传给视图解析器ViewResolver进行解析
  9. ViewResolver解析后将解析结果返回给DispatcherServlet
  10. DispatcherServlet调用视图View组件将数据进行渲染,并将渲染结果(静态视图)返回给DispatcherServlet
  11. DispatcherServlet响应用户的请求。

  •  DispatcherServlet:前端控制器,实现的是转发的功能,相当于一个转发器,减少了其他组件之间的耦合度
  • HandlerMapping:处理器映射器,根据请求的URL来查找处理器Handler
  • Handler:处理器,程序员开发的,执行业务逻辑
  • ViewResolver:视图解析器,用于视图的解析,根据视图逻辑名将ModelAndView解析成真正的视图(view)
  • view:视图接口,他的实现类型支持不同的视图类型,用于渲染视图。

3、springMVC 的优点:

清晰的角色分配,将复杂的web层进行解耦,降低了开发难度,更加灵活也更加容易拓展

支持各种视图技术,而不仅仅是局限于JSP

可以与spring框架很好的集成

支持各种请求资源的映射策略

4、springMVC怎么样设置重定向和转发的?

转发:直接返回转发的路径,如转发给xxx.jsp  

重定向:在返回值前加上“redirect:”

转发@RequestMapping("/add")
public String addBook(String name, String author, double price){System.out.println("---book add");return "/tips.jsp";
}@RequestMapping("/add")
public ModelAndView addBook(String name, String author, double price){System.out.println("---book add");ModelAndView modelAndView = new ModelAndView("/tips.jsp");return modelAndView;
}
重定向@RequestMapping("/add")
public String addBook(String name, String author, double price){System.out.println("---book add");return "redirect:/tips.jsp";
}@RequestMapping("/add")
public ModelAndView addBook(String name, String author, double price){System.out.println("---book add");ModelAndView modelAndView = new ModelAndView("redirect:/tips.jsp");return modelAndView;
}

5、springMVC常用的注解有哪些?

@RequestMapping: 用于处理请求url映射的注解,可以用于类或者方法上,用于类上,表示类中所有请求的响应请求方法都是以该地址作为父路径

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

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

@RequestMapping("/update")
@ResponseBody
public List<Book> update() {System.out.println("---book update");List<Book> books = new ArrayList<Book>();books.add(new Book(1,"Java","老张",2.22));books.add(new Book(2,"C++","老李",3.22));return books;
}@RequestMapping("/update")
public void update(@RequestBody Book book){System.out.println("---book update");System.out.println(book);
}

6、 SpringMVC中的控制器注解一般用哪一个?有没有别的可以替代?

一般用@Controller注解,也可以使用@RestController注解,@RestController注解相当于@Controller+@ResponseBody ,表示为表现层,一般不用其他注解代替。

7、springMVC 和 structs2 的区别有哪些、

  1. 入口:springMVC入口是一个servlet(前端控制器,dispatchServlet),structs2的入口是一个filter过滤器
  2. 开发方式:springMVC基于方法开发,一个url对应一个方法,请求参数传递到方法的形参,structs2是基于类开发,传递参数通过类的属性
  3. Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。
     

8、SpringMVC中的拦截器

SpringMVC中的拦截器就类似于servlet-api中的过滤器,可以对控制器的请求进行拦截,实现相关的预处理和后处理。拦截器在SpringMVC配置文件里面进行配置,不会拦截SpringMVC放行的资源(jsp、HTML、css等)

8.1 创建拦截器,实现HandlerInterceptor接口,重写预处理和后处理方法

public class MyInterceptor1 implements HandlerInterceptor {//预处理方法public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("--------------预处理");Enumeration<String> keys = request.getParameterNames();while (keys.hasMoreElements()){String key = keys.nextElement();if("bookId".equals(key)){return true;}}response.setStatus(400);return false;}//后处理方法public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {modelAndView.addObject("tips","这是通过拦截器的后处理添加的数据");System.out.println("--------------后处理");}
}

8.2 配置拦截器

<mvc:interceptors><mvc:interceptor><mvc:mapping path="/book/query"/><mvc:mapping path="/book/add"/><mvc:mapping path="/student/**"/><mvc:exclude-mapping path="/student/add"/><bean class="com.qfedu.utils.MyInterceptor1"/></mvc:interceptor>
</mvc:interceptors>

8.3 拦截器链,将多个拦截器按照一定的顺序构成一个执行链。 

10、SpringMVC的异常处理?

在系统运行过程中,可能由于运行环境,用户操作,资源不足等各方面导致系统出现异常,我们通常不希望将这些异常呈现给用户,因此可以在服务器进行特点的处理,当异常发生时,呈现给用户一个统一的,可读的异常提示界面。

10.1 HTTP状态异常统一处理方式

首先创建一个用于提示异常的界面 404.jsp ,然后在web.xml中进行配置

<error-page><error-code>404</error-code><location>/404.jsp</location>
</error-page>

10.2  Java代码异常的统一处理方式

还是先创建异常处理界面 err.jsp

然后在web.xml中进行配置,可以定义异常类型

<error-page><exception-type>java.lang.NumberFormatException</exception-type><location>/err.jsp</location>
</error-page>

 或者定义异常处理类进行统一处理,@ExceptionHandler注解

@ControllerAdvice
public class MyExceptionHandler {@ExceptionHandler(NullPointerException.class)public String nullHandler(){return "/err1.jsp";}@ExceptionHandler(NumberFormatException.class)public String formatHandler(){return "/err2.jsp";}
}

11 SpringMVC的控制器是不是单例模式?如果是,有什么问题,怎么解决?

是单例模式,在多线程访问的时候,有线程安全问题,解决方案是在控制器中避免写可变状态变量,如果需要使用这些可变状态,可以使用ThredLocall机制进行解决,为每个线程单独生成一份变量副本,独立操作。。

12 如果在拦截请求中,想拦截get方式提交的方法,怎么配置?

可以在@RequestMapping注解里面加上method=RequestMethod.GET。

13 控制器如何接收前端传入的数据?

13.1 接收请求行的传值 ----- @RequestParam注解

/*接收请求行数据*/
@RequestMapping("/add")
public void addBook(@RequestParam("name") String a,@RequestParam("author") String b,@RequestParam("price") double c){System.out.println("---book add");System.out.println(a);System.out.println(b);System.out.println(c);
}

 13.2 接收请求头的传值  ---- @RequestHeader

@RequestMapping("/list")
public void listBooks(@RequestHeader("token") String token){System.out.println("---book list");
}

13.3 接收请求体  ---- @RequestBody

@RequestMapping("/update")
public void update(@RequestBody Book book){System.out.println("---book update");System.out.println(book);
}

相关文章:

SpringMVC 面试题

1、什么是SpringMVC&#xff1f; SpringMVC是一个基于Java的实现了MVC设计模式的“请求驱动型”的轻量级WEB框架&#xff0c;通过把model&#xff0c;view&#xff0c;controller 分离&#xff0c;将web层进行职责的解耦&#xff0c;把复杂的web应用分成逻辑清晰的几个部分&am…...

布局三八女王节,巧借小红书数据分析工具成功引爆618

对于小红书“她”经济来说&#xff0c;没有比三八节更好的阵地了。伴随三八女王节逐渐临近&#xff0c;各大品牌蓄势待发&#xff0c;这场开春后第一个S级大促活动&#xff0c;看看品牌方们可以做什么&#xff1f; 洞察流量&#xff0c;把握节点营销时机 搜索小红书2023年的三…...

RISCV学习(1)基本模型认识

笔者来聊聊ARM的函数的调用规则 1、ARM函数调用规则介绍 首先介绍几个术语&#xff0c; AAPCS&#xff1a;Procedure Call Standard for the ARM ArchitectureAPCS&#xff1a;ARM Procedure Call StandardTPCS&#xff1a;Thumb Procedure Call StandardATPCS&#xff1a;AR…...

【java代码审计】命令注入

1 成因 开发者在某种开发需求时&#xff0c;需要引入对系统本地命令的支持来完成某些特定的功能&#xff0c;此时若未对用户的输入做严格的过滤&#xff0c;就可能发生命令注入。 2 造成命令注入的类或方法 Runtime类&#xff1a;提供调用系统命令的功能 ①Runtime.getRuntim…...

速锐得适配北汽EX系列电动汽车CAN总线应用于公务分时租赁

过去的几年&#xff0c;我们看到整个分时租赁业务出现断崖式下跌&#xff0c;这是我们看到这种市场情况&#xff0c;是必然&#xff0c;也是出乎意料。原本很多融资后的出行公司、大牌的出行服务商的分时租赁业务&#xff0c;受各种影响不得不转型成其他出行服务。例如&#xf…...

已解决ERROR: Failed building wheel for opencv-python-headless

已解决ERROR: Failed building wheel for opencv-python-headless Failed to build opencv-python-headless ERROR: Could not build wheels for opencv-python-headless, which is required to install pyproject.toml-based projects报错信息亲测有效 文章目录报错问题报错翻…...

每日获取安全资讯的网站,国内外共120个

国内 FreeBuf&#xff08;https://www.freebuf.com/&#xff09; 安全客&#xff08;https://www.anquanke.com/&#xff09; 雷锋网安全&#xff08;https://www.leiphone.com/category/security&#xff09; 先知社区&#xff08;https://xz.aliyun.com/&#xff09; CSDN安全…...

HUN工训中心:开关电路和按键信号抖动

工训中心的牛马实验 1.实验目的&#xff1a; 1) 认识开关电路&#xff0c;掌握按键状态判别、开关电路中逻辑电平测量、逻辑值和逻辑函数电路。 2) 掌握按键信号抖动简单处理方法。 3) 实现按键计数电路。 2.实验资源&#xff1a; HBE硬件基础电路实验箱、示波器、万用表…...

WordPress 主题 SEO 标题相关函数和过滤器教程wp_get_document_title()

WordPress 4.4.0 版本开始&#xff0c;加入了 wp_get_document_title(); 这个函数&#xff0c;而 wp_title(); 已经 deprecated 不推荐使用。因此&#xff0c;如果想要启用 WordPress 主题标题功能&#xff0c;在不安装 WordPress SEO 插件的情况下&#xff0c;可以使用以下代码…...

Qt 事件机制

【1】事件 事件是可以被控件识别的操作。如按下确定按钮、选择某个单选按钮或复选框。 每种控件有自己可识别的事件&#xff0c;如窗体的加载、单击、双击等事件&#xff0c;编辑框&#xff08;文本框&#xff09;的文本改变事件等等。 事件就是用户对窗口上各种组件的操作。…...

【Python】Numpy--np.linalg.eig()求对称矩阵的特征值和特征向量

【Python】Numpy–np.linalg.eig()求对称矩阵的特征值和特征向量 文章目录【Python】Numpy--np.linalg.eig()求对称矩阵的特征值和特征向量1. 介绍2. API3. 代码示例1. 介绍 特征分解&#xff08;Eigendecomposition&#xff09;&#xff0c;又称谱分解&#xff08;Spectral d…...

医疗床头卡(WIFI方案)

一、产品特性 7.5寸墨水屏显示WIFI无线通信&#xff0c;极简部署&#xff0c;远程控制按键及高亮LED指示灯指示800*480点阵屏幕锂电池供电&#xff0c;支持USB充电DIY界面支持文本/条码/二维码/图片超低功耗/超长寿命&#xff0c;一次充电可用一年基于现有Wifi环境&#xff0c…...

[YOLO] yolo博客笔记汇总(自用

pip下载速度太慢&#xff0c;国内镜像&#xff1a; 国内镜像解决pip下载太慢https://blog.csdn.net/weixin_51995286/article/details/113972534​​​​​​​ YOLO v2和V3 关于设置生成anchorbox&#xff0c;Boundingbox边框回归的过程详细解读 YOLO v2和V3 关于设置生成an…...

Linux 常用 API 函数

文章目录1. 系统调用与库函数1.1 什么是系统调用1.2 系统调用的实现1.3 系统调用和库函数的区别2. 虚拟内存空间3. 错误处理函数4. C 库中 IO 函数工作流程5. 文件描述符6. 常用文件 IO 函数6.1 open 函数6.2 close 函数6.3 write 函数6.4 read 函数6.5 lseek 函数7. 文件操作相…...

【转载】bootstrap自定义样式-bootstrap侧边导航栏的实现

bootstrap自带的响应式导航栏是向下滑动的&#xff0c;但是有时满足不了个性化的需求: 侧滑栏使用定位fixed 使用bootstrap响应式使用工具类 visible-sm visible-xs hidden-xs hidden-sm等对不同屏幕适配 侧滑栏的侧滑效果不使用jquery方法来实现&#xff0c;使用的是css3 tr…...

奇瑞x华为纯电智选车来了,新版ADS成本将大幅下降

作者 | 德新 编辑 | 于婷HiEV获悉&#xff0c;问界M5将在4月迎来搭载高阶辅助驾驶的新款&#xff0c;而M9将在今年秋天发布。 奇瑞一侧&#xff0c;华为将与奇瑞首先推出纯电轿车&#xff0c;代号EH3。新车将在奇瑞位于芜湖江北新区的智能网联超级二工厂组装下线。目前超级二工…...

机器学习的特征归一化Normalization

为什么需要做归一化&#xff1f; 为了消除数据特征之间的量纲影响&#xff0c;就需要对特征进行归一化处理&#xff0c;使得不同指标之间具有可比性。对特征归一化可以将所有特征都统一到一个大致相同的数值区间内。 为了后⾯数据处理的⽅便&#xff0c;归⼀化可以避免⼀些不…...

程序员看过都说好的资源网站,看看你都用过哪些?

程序员必备的相关资源网站一.图片专区1.表情包&#xff08;1&#xff09;发表情&#xff08;2&#xff09;逗比拯救世界&#xff08;3&#xff09;搞怪图片生成&#xff08;4&#xff09;哇咔工具2.图标库&#xff08;1&#xff09;Font Awesome&#xff08;2&#xff09;iconf…...

Win11的两个实用技巧系列之设置系统还原点的方法、安全启动状态开启方法

Win11如何设置系统还原点?Win11设置系统还原点的方法很多用户下载安装win11后应该如何创建还原点呢&#xff1f;现在我通过这篇文章给大家介绍一下Win11如何设置系统还原点&#xff1f;在Windows系统中有一个系统还原功能可以帮助我们在电脑出现问题的时候还原到设置的时间上&…...

【Linux】项目的自动化构建-make/makefile

&#x1f4a3;1.背景会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的 规则来指定&#xff0c;哪些文件需要先编译&#xff…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...