Java面试--框架--Spring MVC

Spring MVC

目录

  • Spring MVC
    • 1.spring mvc简介
    • 2.spring mvc实现原理
      • 2.1核心组件
      • 2.2工作流程
    • 3.RESTful 风格
    • 4.Cookie,Session
      • 4.1 会话
      • 4.2 保存会话的两种技术
    • 5.拦截器
      • 5.1过滤器、监听器、拦截器的对比
      • 5.2 过滤器的实现
      • 5.3 拦截器基本概念
      • 5.4 拦截器的实现

1.spring mvc简介

Spring MVC是一款由Spring Framework 提供的 web组件,实现mvc设计模式的一款框架,Java web开发者必会框架,前后端不分离。

MVC是一种软件架构思想,把软件按照模型,视图,控制器来划分

  • Model:模型层,指工程中的JavaBean,用来处理数据,JavaBean分成两类:
    一类称为实体类Bean:专门用来存储业务数据(返回和接收数据),比如Student,User
    一类称为业务处理Bean:指Servlet或Dao对象,专门用来处理业务逻辑和数据访问
  • View:视图层,指工程中的html,jsp等页面,作用是和用户进行交互,展示数据
  • Controler:控制层,指工程中的Servlet,作用是接收请求和响应浏览器

2.spring mvc实现原理

2.1核心组件

  • DispatcherServlet:前端控制器,负责调度其它组件,是所有组件的中心站同时也对其它组件进行了解耦。
  • HandlerMapping:dispatcherServlet收到请求,在这里找到对应的处理器进行处理。
  • HandlerInterceptor:处理器拦截器,是一个接口,用于实现一些拦截任务完成接口的调用
  • HandlerExecutionChain:这是一个执行链,包括Handler和HandlerInterceptor
  • HandlerAdapter:处理适配器,在执行业务之前,需要进行一系列的操作包括表单的数据验证、数据类型转换、把表单数据封装到POJO等,这些一系列的操作都是由HandlerAdapter完成,DispatcherServlet通过HandlerAdapter执行不同的处理器。
  • Handler:处理器完成具体的业务逻辑。
  • ModelAndView:装载了模型数据和视图信息,作为 Handler 的处理结果,返回给 DispatcherServlet。
  • ViewResolver:视图解析器,DispatcheServlet 通过它将逻辑视图解析为物理视图,最终将渲染结果响应给客户端。

2.2工作流程

a.客户端请求先被DispatcherServlet接收。
b.DispatcherServlet将请求传给HandlerMapping,映射到对应的handler返回一个执行链。
c.前端控制器调用处理适配器来调用处理器。
d.执行处理器,处理器返回一个ModleAndView给前端控制器。
e.前端控制器将ModleAndView结果返回给视图解析器。
f.视图解析器解析后返回个view,经过视图渲染,将模型数据渲染页面形成最后视图返回客户端。
在这里插入图片描述

3.RESTful 风格

  • RESTful是当前比较流行的一种互联网软件架构模型,通过统一的规范来完成不同终端的数据访问和交换,REST全称是Representaional State Transfer(资源表现层状态转换)
  • RESTful的优点:结构清晰,有统一的标准、扩展性好
  • RESTful的特点:
    1.URL传参更加简洁
    传统形式URL: http://localhost:8080/findById?id=1
    RESTful风格URL: http://localhost:8080/findById/1
    2.完成不同终端之间的资源共享,RESTful提供了一套规范,不同终端之间只要遵守这个规范,就可以实现数据交互。
    RESTful具体来说是四种表现形式,HTTP请求中四种请求类型(GET、POST、PUT、DELETE)分别表示四种常规操作,CRUD:GET用来获取资源,POST用来创建资源,PUT用来修改资源,DELETE用来删除资源。

4.Cookie,Session

4.1 会话

会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话;
有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话;
客户端, 服务端
服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了; cookie
服务器登记你来过了,下次你来的时候我来匹配你; seesion

4.2 保存会话的两种技术

cookie:客户端技术 (响应,请求)。请求时客户端会携带一个cookie,响应时服务端返回一个cookie。
session:服务器技术,利用这个技术,可以保存用户的会话信息?服务端会给每一个用户创建一个session对象,会话没有关闭session就一直存在,一般也会设置失效时间。

Session和cookie的区别:

  • Cookie是把用户的数据写给用户的浏览器,浏览器保存 (可以保存多个)
  • Session把用户的数据写到用户独占Session中,服务器端保存 (保存重要的信息,减少服务器资源的浪费,Session对象由服务创建;

使用场景:
保存一个登录用户的信息;购物车信息;在整个网站中经常会使用的数据,我们将它保存在Session中;

5.拦截器

5.1过滤器、监听器、拦截器的对比

  • Servlet:处理Reequest请求和Response响应。继承HttpServlet类,在对请求和响应加入更多逻辑处理。在spring boot项目不用我们显示处理servlet了,底层已经嵌入了servlet容器处理http请求。
  • 过滤器(Filter):对Request请求起到过滤作用,作用在Servlet之前,如果配置为/*可以为所有的资源(servlet、js/css静态资源等)进行过滤处理
  • 监听器(Listener):实现了javax.servlet.ServletContextListener接口的服务器端组件,它随Web应用的启动而启动,只初始化一次,然后一直监视,随Web应用的停止而销毁
    作用一:做初始化工作,web应用中spring容器启动ContextLoaderListener
    作用二:监听web中的特定事件,比如HttpSession,ServletRequest的创建和销毁;变量的创建、销毁和修改等可以在某些动作 前后增加处理,实现监控,比如说统计在线人数,利用HttpSessionListener等
  • 拦截器(Interceptor):是Spring MVC、Struts等表现层框架自己的,不会拦截jsp/html/css/image等的访问,只会拦截访问的控制器方法(Handler)
    servlet、filter、listener是配置在web.xml中,interceptor是配置在表现层框架自己的配置文件中,在Handler业务逻辑执行之前拦截一次,在Handler逻辑执行完但是还没有跳转页面之前拦截一次,在跳转页面后拦截一次。

5.2 过滤器的实现

过滤器是作用在servlet之前,对访问的所有资源进行过滤处理。
比如 Shiro安全框架技术就是用Filter来实现的
Filter:过滤器,用来过滤网站的数据;处理中文乱码, 登录验证,网关过滤(有些请求需要过滤),过滤脏话等….
工作中还会学到很多类型的过滤器。

public class CharacterEncodingFilter implements Filter {//初始化:web服务器启动,就以及初始化了,随时等待过滤对象出现!public void init(FilterConfig filterConfig) throws ServletException {System.out.println("CharacterEncodingFilter初始化");}//Chain : 链/*1. 过滤中的所有代码,在过滤特定请求的时候都会执行2. 必须要让过滤器继续同行chain.doFilter(request,response);*/public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=UTF-8");System.out.println("CharacterEncodingFilter执行前....");chain.doFilter(request,response); //让我们的请求继续走,如果不写,程序到这里就被拦截停止!System.out.println("CharacterEncodingFilter执行后....");}//销毁:web服务器关闭的时候,过滤器会销毁public void destroy() {System.out.println("CharacterEncodingFilter销毁");}}

5.3 拦截器基本概念

Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。

要使用Spring MVC中的拦截器,就需要对拦截器类进行定义和配置。通常拦截器类可以通过两种方式来定义。

  • 通过实现HandlerInterceptor接口
  • 继承HandlerInterceptor接口的实现类(如:HandlerInterceptorAdapter)来定义。

5.4 拦截器的实现

public class MyInterceptor implements HandlerInterceptor {/*** 在目标Handler(方法)执行前执行* 返回true:执行Handler方法* 返回false:阻止目标Handler方法执行* @param request* @param response* @param handler* @return* @throws Exception*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("目标Handler执行前执行MyInterceptor---->preHandle方法...");return true;}/*** 在目标Handler(方法)执行后,视图生成前执行* @param request* @param response* @param handler* @param modelAndView* @throws Exception*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("目标Handler执行后,视图执行前执行MyInterceptor---->postHandle方法...");}/*** 在目标方法执行后,视图生成后执行* @param request* @param response* @param handler* @param ex* @throws Exception*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("目标Handler执行后,视图执行后执行MyInterceptor---->afterCompletion方法...");}
}

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/877465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用unittest和pytest进行python脚本的单元测试

1. 关于unittest和pytest unittest是python内置的支持单元测试的模块,他提供了核心类,TestCase,让单元测试 代码的编写不再是从0开始,不再是作坊式,而是标准化,模板化,工厂化。 pytest是第三方…

【深度解析】WRF-LES与PALM微尺度气象大涡模拟

查看原文>>>【深度解析】WRF-LES与PALM微尺度气象大涡模拟 针对微尺度气象的复杂性,大涡模拟(LES)提供了一种无可比拟的解决方案。微尺度气象学涉及对小范围内的大气过程进行精确模拟,这些过程往往与天气模式、地形影响和…

Linux - 模拟实现 shell 命令行解释器

目录 简介 shell 的重要性 解释为什么学习 shell 的工作原理很重要 模拟实现一个简单的 shell 循环过程 1. 获取命令行 2. 解析命令行 3. 建立一个子进程(fork) 4. 替换子进程(execvp) 5. 父进程等待子进程退出(wai…

合宙LuatOS AIR700 IPV6 TCP 客户端向NodeRed发送数据

为了验证 AIR700 IPV6 ,特别新建向NodeRed Tcp发送的工程。 Air700发送TCP数据源码如下: --[[ IPv6客户端演示, 仅EC618系列支持, 例如Air780E/Air600E/Air780UG/Air700E ]]-- LuaTools需要PROJECT和VERSION这两个信息 PROJECT "IPV6_SendDate_N…

Jupyter安装指南:最简便最详细的步骤

一.介绍 JupyterNotebook 是一个款以网页为基础的交互计算环境,可以创建Jupyter的文档,支持多种语言,包括Python, Julia, R等等。一般来说,如果是使用R语言的话,使用Rstudio居多,使用Python的话&#xff0…

开源的数据库增量订阅和消费的中间件——Cancl

目录 工作原理 MySQL主备复制原理 Canal 工作原理 主要功能和特点 应用场景 实验准备 安装JDK11 下载MySQL8.0 配置canal.admin 配置canal-deployer 测试数据读取 新增一台主机用做被同步的目标机器测试 官方地址:https://github.com/alibaba/canal?ta…

【gitlab】gitlab-ce:17.3.0-ce.0 1:使用docker engine安装

ce版本必须配置代理。 极狐版本可以直接pull 社区版GitLab不支持Alibaba Cloud Linux 3,本操作以Ubuntu/Debian系统为例进行说明,其他操作系统安装说明,请参见安装社区版GitLab。 docker 环境重启 sudo systemctl daemon-reload sudo systemctl restart docker脚本安装 安裝…

宝塔面板实现定时任务删除 logs文件 加条件删除 只删除一个月前的日志

我们在开发中难免用到了日志功能,随着日志越来越多导致占用我们的内存 下面是一个简单的 使用宝塔面板里面的定时任务来实现删除日志案例 第一步 首先我的日志文件目录 都在log文件夹里面, 每个月生成一个日志文件夹 文件夹命名是年月来命名的 第二…

探索深度学习的力量:从人工智能到计算机视觉的未来科技革命

目录 1. 引言 2. 人工智能的历史背景 3. 深度学习的崛起 3.1 深度神经网络的基本原理 4. 计算机视觉的发展现状 4.1 传统计算机视觉与深度学习的结合 5. 深度学习在计算机视觉中的应用 5.1 图像分类 5.2 目标检测 6. 深度学习引领的未来科技创新与变革 7. 结论 引言…

【vue3+Typescript】手撸了一个轻量uniapp导航条

最近公共组件写到导航条,本来打算拿已有的改。看了下uniapp市场上已有的组件,一是不支持vue3typescript,二是包装过重。索性自己手撸了一个导航条,不到100行代码全部搞定,因为自己的需求很简单: 1&#xf…

pycharm2023.1破解

下载解压文件,文件夹 /jetbra 复制电脑某个位置 注意: 补丁所属文件夹需单独存放,且放置的路径不要有中文与空格,以免 Pycharm 读取补丁错误。 点击进入 /jetbra 补丁目录,再点击进入 /scripts 文件夹,双…

javaer快速入门 goweb框架 gin

gin 入门 前置条件 安装环境 配置代理 # 配置 GOPROXY 环境变量,以下三选一# 1. 七牛 CDN go env -w GOPROXYhttps://goproxy.cn,direct# 2. 阿里云 go env -w GOPROXYhttps://mirrors.aliyun.com/goproxy/,direct# 3. 官方 go env -w GOPROXYhttps://goproxy.…

鸿蒙内核源码分析——(自旋锁篇)

本篇说清楚自旋锁 读本篇之前建议先读系列篇 进程/线程篇. 内核中哪些地方会用到自旋锁?看图: 概述 自旋锁顾名思义,是一把自动旋转的锁,这很像厕所里的锁,进入前标记是绿色可用的,进入格子间后,手一带&#xff0c…

10分钟学会LVM逻辑卷

华子目录 前言认识LVMLVM基本概念LVM整体流程LVM管理命令pvs,vgs,lvs命令pvs基本用法选项示例 vgs基本用法选项示例 lvs基本用法 pvcreate,vgcreate,lvcreate命令pvcreate示例 vgcreate基本用法示例选项 lvcreate基本用法示例 pvr…

Python爬虫入门教程(非常详细)适合零基础小白

一、什么是爬虫? 1.简单介绍爬虫 爬虫的全称为网络爬虫,简称爬虫,别名有网络机器人,网络蜘蛛等等。 网络爬虫是一种自动获取网页内容的程序,为搜索引擎提供了重要的数据支撑。搜索引擎通过网络爬虫技术,将…

【电路笔记】-无源衰减器总结

无源衰减器总结 文章目录 无源衰减器总结1、概述2、L-型无源衰减器设计3、T-型无源衰减器设计4、桥接 T 型衰减器设计5、π型无源衰减器设计无源衰减器是一个纯电阻网络,可用于控制输出信号的电平。 1、概述 无源衰减器是一种纯电阻网络,用于削弱或“衰减”传输线的信号电平…

Element UI中报dateObject.getTime is not a function解决方法~

1、错误信息。 2、该报错原因是Element UI中日期组件的校验规则是type: "date",而一般我们从后台拿到的数据是字符串型的,不满足预期,就会报错。 3、解决方法。 去掉日子组件中的type: "date"校验规则即可。 rules: {newName: [{…

EasyCVR视频汇聚平台:深度解析GB/T 28181协议下的视频资源整合与应用

随着安防技术的快速发展和智慧城市建设的推进,视频监控系统作为公共安全、城市管理、企业运营等领域的重要基础设施,其重要性和应用范围不断扩大。在这一过程中,GB/T 28181作为国家标准中关于视频监控设备通信协议的规范,正逐渐受…

C2M商业模式分析与运营平台建设解决方案(四)

C2M商业模式以消费者需求驱动生产制造,实现个性化与效率的双赢。本解决方案将围绕构建智能化、数据驱动的运营平台,通过精准把握市场需求、优化生产流程、强化供应链管理,打造高效、敏捷、柔性的C2M运营体系,助力企业快速响应市场…

华为AR1220配置GRE隧道

1.GRE隧道的配置 GRE隧道的配置过程,包括设置接口IP地址、配置GRE隧道接口和参数、配置静态路由以及测试隧道连通性。GRE隧道作为一种标准协议,支持多协议传输,但不提供加密,并且可能导致CPU资源消耗大和调试复杂等问题。本文采用华为AR1220路由器来示例说明。 配置…