【Java基础】-【SpringMVC】

这篇具有很好参考价值的文章主要介绍了【Java基础】-【SpringMVC】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是MVC?

MVC是一种设计模式,在这种模式下软件被分为三层,即Model(模型)、View(视图)、Controller(控制器)。

  1. M:Model,模型层,指工程中的JavaBean,作用是处理数据
  2. V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据
  3. C:Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器将软件分层的好处是,可以将对象之间的耦合度降低,便于代码的维护。

DAO层是做什么的?

dao专门用于访问数据库,具体实现技术有很多,常用的有Spring JDBC、Hibernate、JPA、MyBatis等

Spring MVC的执行流程

  1. 用户通过浏览器发起HttpRequest请求到前端控制器 (DispatcherServlet)。
  2. DispatcherServlet 将用户请求发送给处理器映射器 (HandlerMapping)。
  3. 处理器映射器 (HandlerMapping)会根据请求,找到负责处理该请求的处理器,并将其封装为处理器执行链 返回 (HandlerExecutionChain) 给 DispatcherServlet
  4. DispatcherServlet 会根据 处理器执行链 中的处理器,找到能够执行该处理器的处理器适配器(HandlerAdaptor) --注,处理器适配器有多个
  5. 处理器适配器 (HandlerAdaptoer) 会调用对应的具体的 Controller
  6. Controller 将处理结果及要跳转的视图封装到一个对象 ModelAndView 中并将其返回给处理器适配器 (HandlerAdaptor)
  7. HandlerAdaptor 直接将 ModelAndView 交给 DispatcherServlet ,至此,业务处理完毕
  8. 业务处理完毕后,我们需要将处理结果展示给用户。于是DisptcherServlet 调用 ViewResolver,将 ModelAndView 中的视图名称封装为视图对象
  9. ViewResolver 将封装好的视图 (View) 对象返回给 DIspatcherServlet
  10. DispatcherServlet 调用视图对象,让其自己 (View) 进行渲染(将模型数据填充至视图中),形成响应对象 (HttpResponse)
  11. 前端控制器 (DispatcherServlet) 响应 (HttpResponse) 给浏览器,展示在页面上。

用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller调用相应的Model层处理请求(Controller调用service处理业务逻辑,service调用DAO操作数据库,DAO将数据库处理结果返回给service,service再返回给Controller),处理完毕将结果返回到Controller,Controller再根据请求处理的结果找到相应的View视图,渲染数据后最终响应给浏览器

Spring MVC常用注解

@RequestMapping:

  1. 作用:处理请求地址映射,也就是说,将其中的处理器方法映射到url路径上。
  2. 属性:
    (1)method:是让你指定请求的方法,比如常用的有get和post。
    (2)value:是指请求的实际地址,如果是多个地址就用{}来指定。
    (3)produces:指定返回的内容类型,当request请求头中的Accept类型中包含指定的类型才可以返回的。
    (4)consumes:指定处理请求的提交内容类型,比如一些json、html、text等的类型。
    (5)headers:指定request中必须包含那些的headed值时,它才会用该方法处理请求的。
    (6)params:指定request中一定要有的参数值,它才会使用该方法处理请求。

@RequestParam:

  1. 作用:将请求参数绑定到你的控制器的方法参数上,是Spring MVC中的接收普通参数的注解。
  2. 属性:
    (1)value是请求参数中的名称。
    (2)required是请求参数是否必须提供参数,它的默认是true,意思是表示必须提供。

@RequestBody:

  1. 作用:如果作用在方法上,表示该方法的返回结果是直接按写入的Http responsebody中(一般在异步获取数据时使用的注解)。
  2. 属性:
    (1)required:是否必须有请求体。它的默认值是true,在使用该注解时,值得注意的当为true时get的请求方式是报错的,如果你取值为false的话,get的请求是null。

@PathVaribale:用于绑定url中的占位符,但是spring3.0以后,url才开始支持占位符的,它是Spring MVC支持的rest风格url的一个重要的标志。

Spring MVC的拦截器

拦截器会对处理器进行拦截,以增强处理器的功能。Spring MVC中,所有的拦截器都需要实现HandlerInterceptor接口,该接口包含如下三个方法:preHandle()postHandle()afterCompletion()。这些方法的执行流程如下图:
【Java基础】-【SpringMVC】
通过上图可以看出,Spring MVC拦截器的执行流程如下:

  1. 执行preHandle方法,它会返回一个布尔值。如果为false,则结束所有流程,如果为true,则执行下一步。
  2. 执行处理器逻辑,它包含控制器的功能。
  3. 执行postHandle方法。
  4. 执行视图解析和视图渲染。
  5. 执行afterCompletion方法。

Spring MVC拦截器的开发步骤如下:

  1. 开发拦截器:实现handlerInterceptor接口,从三个方法中选择合适的方法,实现拦截时要执行的具体业务逻辑。
  2. 注册拦截器:定义配置类,并让它实现WebMvcConfigurer接口,在接口的addInterceptors方法中注册拦截器,并定义该拦截器匹配哪些请求路径。

怎么去做请求拦截?

如果是对所有的请求(如访问静态资源的请求)进行拦截,则可以使用Filter。
如果是对Controller进行拦截,则可以使用Spring MVC的拦截器。
如果是对除了Controller之外的其他Bean的请求进行拦截,则可以使用Spring AOP。

其他

cookie和session的区别

  1. 存储位置不同:cookie存放于客户端;session存放于服务端。
  2. 存储容量不同:单个cookie保存的数据<=4KB,一个站点最多保存20个cookie;而session并没有上限。
  3. 存储方式不同:cookie只能保存ASCII字符串,并需要通过编码当时存储为Unicode字符或者二进制数据;session中能够存储任何类型的数据,例如字符串、整数、集合等。
  4. 隐私策略不同:cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是不安全的;session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。
  5. 生命周期不同:可以通过设置cookie的属性,达到cookie长期有效的效果;session依赖于名为JSESSIONID的cookie,而该cookie的默认过期时间为-1,只需关闭窗口该session就会失效,因此session不能长期有效。
  6. 服务器压力不同:cookie保存在客户端,不占用服务器资源;session保管在服务器上,每个用户都会产生一个session,如果并发量大的话,则会消耗大量的服务器内存。
  7. 浏览器支持不同:cookie是需要浏览器支持的,如果客户端禁用了cookie,则会话跟踪就会失效;运用session就需要使用URL重写的方式,所有用到session的URL都要进行重写,否则session会话跟踪也会失效。
  8. 跨域支持不同:cookie支持跨域访问,session不支持跨域访问。

cookie和session各自适合的场景

  1. 对于敏感数据,应存放在session里,因为cookie不安全。
  2. 对于普通数据,优先考虑存放在cookie里,这样会减少对服务器资源的占用。

session的工作原理

session依赖于cookie。当客户端首次访问服务器时,服务器会为其创建一个session对象,该对象具有一个唯一标识SESSIONID。并且在响应阶段,服务器会创建一个cookie,并将SESSIONID存入其中。客户端通过响应的cookie而持有SESSIONID,所以当它再次访问服务器时,会通过cookie携带这个SESSIONID。服务器获取到SESSIONID后,就可以找到与之对应的session对象,进而从这个session中获取该客户端的状态。

get请求与post请求的区别

  1. GET在浏览器回退时是无害的,而POST会再次提交请求。
  2. GET产生的URL地址可以被Bookmark,而POST不可以。
  3. GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  4. GET请求只能进行url编码,而POST支持多种编码方式。
  5. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  6. GET请求在URL中传送的参数是有长度限制的,而POST没有。
  7. 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  8. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  9. GET参数通过URL传递,POST放在Request body中。

get请求的参数能放到body里面吗?

GET请求是可以将参数放到BODY里面的,官方并没有明确禁止,但给出的建议是这样不符合规范,无法保证所有的实现都支持。这就意味着,如果你试图这样做,可能出现各种未知的问题,所以应该当避免。

post不幂等是为什么?

HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。幂等性属于语义范畴,正如编译器只能帮助检查语法错误一样,HTTP规范也没有办法通过消息格式等语法手段来定义它。
POST所对应的URI并非创建的资源本身,而是资源的接收者。比如:POST http://www.forum.com/articles的语义是在http://www.forum.com/articles下创建一篇帖子,HTTP响应中应包含帖子的创建状态以及帖子的URI。两次相同的POST请求会在服务器端创建两份资源,它们具有不同的URI。所以,POST方法不具备幂等性。

页面报400错误是什么意思?

400状态码标识请求的语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。通常情况下,是本次请求中包含有错误的参数,此时应该排查前端传递的参数。

请求数据出现乱码该怎么处理?

服务端出现请求乱码的原因是,客户端编码与服务器解码方案不一致,可以有如下几种解决办法:

  1. 将获得的数据按照客户端编码转成BYTE,再将BYTE按服务端编码转成字符串,这种方案对各种请求方式均有效,但是十分的麻烦。
  2. 在接受请求数据之前,显示声明实体内容的编码与服务器一致,这种方式只对POST请求有效。
  3. 修改服务器的配置文件,显示声明请求路径的编码与服务器一致,这种方式只对GET请求有效。

如何在SpringBoot框架下实现一个定时任务?

Spring给我们提供了可执行定时任务的线程池ThreadPoolTaskScheduler,该线程池提供了多个可以与执行定时任务的方法,如下图。在Spring Boot中,只需要在配置类中启用线程池注解,就可以直接使用这个线程池了。
【Java基础】-【SpringMVC】

调用接口时要记录日志,该怎么设计?

可以定义一个记录日志的组件,并通过AOP将其织入到这个接口的调用中。

Spring Boot JPA

JPA即Java Persistence API,它是一个基于O/R映射的标准规范。也就是说它指定以了标准规则,不提供实现,软件提供商可以按照标准规范来实现,而使用者只需按照规范中定义的方式来使用,不用和软件提供商打交道。JPA主要实现有Hibernate、EclipseLink、OpenJPA等,我们使用JPA来开发,无论是采用哪一种实现方式都一样。文章来源地址https://www.toymoban.com/news/detail-413032.html

到了这里,关于【Java基础】-【SpringMVC】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java SSM教师工作量管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

    一、源码特点     java SSM 教师工作量管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,spring+springMVC+mybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysq

    2024年02月04日
    浏览(58)
  • java SSM网上小卖部管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

    一、源码特点     java SSM网上小卖部管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,spring+springMVC+mybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源 代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysq

    2024年01月23日
    浏览(56)
  • JSP SSM 成果展示系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

    一、源码特点      JSP SSM 冬奥建设成果展示系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,spring+springMVC+mybatis),对理解JSP java编程开发语言有帮助,系统具有完整的 源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为

    2024年02月09日
    浏览(60)
  • java基础之设计模式(单例模式,工厂模式)

    是一种编码套路 单例模式 一个类只能创建一个实例 饿汉式 直接创建唯一实例 缺点: 有可能浪费空间 懒汉式 在获取实例是创建唯一对象 缺点: 线程效率慢 懒汉式-进阶版 在懒汉式的基础上,利用同步代码块结合二次校验提高执行效率 工厂模式 是一种底层技术,通常用于底层框

    2024年01月18日
    浏览(46)
  • Java 基础:设计模式之工厂方法模式

    工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一个创建对象的通用接口,但将实际创建逻辑推迟到子类中实现。这种模式允许客户端使用抽象接口来创建特定类型的对象,而无需了解具体的实现细节。以下是工厂方法模式的详细分析: 一. 定义与目的

    2024年04月29日
    浏览(41)
  • JSP SSM 学生综合测评管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

    一、源码特点      JSP SSM 学生综合测评管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,spring+springMVC+mybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为M

    2024年02月07日
    浏览(60)
  • 设计模式篇章(4)——十一种行为型模式

    这个设计模式主要思考的是如何分配对象的职责和将对象之间相互协作完成单个对象无法完成的任务,这个与结构型模式有点像,结构型可以理解为静态的组合,例如将不同的组件拼起来成为一个更大的组件;而行为型更是一种动态或者具有某个动作触发的事件,具有一定行

    2024年01月21日
    浏览(48)
  • Java基础十 - 设计模式

    1. 创建 饿汉式 懒汉式 2. 区别 1. 创建及概念 概念 创建 写一个接口用于获取消息  声明3个人的类    测试 输出: 1. 概念 2. 创建 说明: 1. 简介 说白了就是把创建对象和使用分离,降低耦合 2. 上代码 创建Car的接口,实名有哪些方法 未完待续~~~~

    2024年02月13日
    浏览(34)
  • 策略模式,一种广泛应用于各种情况的设计模式(设计模式与开发实践 P5)

    定义:定义一系列算法,把它们一个个封装起来,并且可以互相替换 例如,我们要计算年终奖,年终奖根据绩效 A、B、C 来计算最终数值 最初我们很容易想到用 分支 if 来解决这个问题,如果绩效 = A 则工资 x 2,如果绩效 = B 则工资 x 3 如果经常使用这样的分支结构,你会发现

    2024年02月07日
    浏览(43)
  • 【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式

    🍎 个人博客: 个人主页 🏆 个人专栏: JAVA ⛳️   功不唐捐,玉汝于成 目录 前言 正文 懒汉式(Lazy Initialization): 双重检查锁定(Double-Checked Locking): 结语 我的其他博客 在软件设计中,单例设计模式是一种重要的设计思想,它确保了一个类只有一个实例,并提供了一

    2024年01月15日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包