目录
1. Maven 是什么? 主要功能? 坐标? /为什么用maven?
SpingMvc中的控制器的注解一般用哪个,有没有别的注解可以替代?
2. 如何解决POST请求中文乱码问题,GET的又如何处理呢?
6.1 Spring MVC的控制器是不是单例模式,如果是,有什么问题,怎么解决?
2. ApplicationContext 接口的实现类 (近期常用):
8.4 BeanFactory和ApplicationContext有什么区别?
springmvc 九大组件,到底包括DispatcherServlet吗,核心组件又是谁_xzb5566的专栏-优快云博客
Spring 家族的组成关系
source : Spring SpringMVC SpringBoot SpringCloud概念、关系及区别_奋斗码农的博客-优快云博客
Spring主要是基于IOC反转Beans管理Bean类,主要依存于SSH框架(Struts+Spring+Hibernate)这个MVC框架,所以定位很明确,Struts主要负责表示层的显示,Spring利用它的 IOC 和 AOP 来处理控制业务(负责对数据库的操作),Hibernate主要作用是数据的持久化到数据库。
使用Spring的好处?框架能更让我们高效的编程以及更方便的维护我们的系统。
1. 轻量:Spring是轻量的,相对其他框架来说。
2. 控制反转 (IOC) :Spring通过控制反转实现了松散耦合,对象给出他们的依赖,而不是创建或查找依赖的对象们。
3. 面向切面编程(AOP):Spring支持面向切面编程,并且把业务逻辑和系统服务分开。
4. 容器:Spring包含并管理应用中对象的生命周期和配置。
5. MVC框架:Spring的WEB框架是个精心设计的框架,是WEB框架的一个很好的替代品。
6. 事务管理:Spring提供一个持续的事务管理接口,提供声明式事务和编程式事务。
7. 异常处理:Spring提供方便的API把 具体技术相关的异常 转化为 一致的unchecked异常。
SpringMVC是基于Spring的一个MVC框架,用以替代初期的SSH框架; 是一个轻量级Web框架.(spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext,使得拥有web功能)。MVC为现代web项目开发的一种很常见的模式,简言之Controller(控制器)、将View (视图、用户客户端) 与 Model (模块,业务) 拆分开构成了MVC . 通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
( 业内常见的mvc模式的开发框架有Struts1,Struts2等。spring作为专业的开发web项目的开源框架,springMvc为内部的一个模块环节,同样采取mvc设计模式。 所以在使用spring开发web项目时,作为核心环节的MVC可以使用struts1/struts2/springMVC )
Spring Boot是基于Spring的条件注册的一套快速开发整合包.实现了自动配置,降低了项目搭建的复杂度, Spring Boot的核心思想就是约定大于配置,一切自动完成。采用 Spring Boot可以大大的简化你的开发模式,所有你想集成的常用框架,它都有对应的组件支持
大多数初级人员在搭建项目时话费了很多时间也未必能搭建明白。 spring-boot就是为了解决开发人员这个痛点而诞生的,说白了就是把以前的手动配置的过程自动化封装了,提供默认的配置,借用大牛总结的特点就是: 简单易用,初学者和大牛都可以轻松上手,其中的注解会给使用者提供方便; Spring boot对第三方技术进行了很好的封装和整合,提供了大量第三方接口;可以通过依赖自动配置,不需要XML等配置文件.
三者的发展与联系:[ 依赖关系 : Spring > spring boot > spring cloud ]
Spring 最初利用“工厂模式”(DI )和“代理模式”(AOP)解耦应用组件. 大家觉得挺好用,于是按照这种模式搞了一个 MVC 框架(一些用 Spring 解耦的组件), 开发 web 应用( SpringMVC )。
然后有发现每次开发都要搞很多依赖,写很多样板代码很麻烦,于是搞了一些懒人整合包(starter ),这套就是 Spring Boot .
Spring Cloud :现在是大数据、云时代,上云是必然选择. Spring Cloud就是一套分布式服务治理的框架,既然它是一套服务治理的框架, 那么它本身不会提供具体功能性的操作, 更专注于服务之间的通讯、熔断、监控等。因此就需要很多的组件来支持一套功能。
对于springCloud框架来说,它和springBoot一样,注重的是微服务的开发,但是springCloud更关注的是全局微服务的整合和管理,相当于管理多个springBoot框架的单体微服务;(Spring Cloud是一系列框架的有序集合。它利用 Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线线、负载均衠、断路器、数据监控等,都可以用 Spring Boot的开发风格做到一键启动和部署)
Java补充
反射
使用反射, 可以动态获取当前class 信息, 比如方法的信息, 注解的信息, 方法的参数, 属性等.
反射技术的应用场景:
(1) JDBC 加载驱动连接 class.forname
(2) Spring 容器框架IOC 实例化对象 : 通过反射技术实例化bean对象.
(3) 自定义注解生效 (反射+AOP) : 通过反射技术判断当前是否有加自定义注解, 若加上之后会去做一些流程的操作.
(4) 第三方核心的框架
反射技术的使用:
Git
1. git的常用命令有哪些?
Maven
source : maven面试题_木村的博客-优快云博客_maven面试题
maven 导包问题 : https://www.jb51.net/article/191944.htm
1. Maven 是什么? 主要功能? 坐标? /为什么用maven?
maven 优点 :
去公司的时候, 公司用的就是maven. 用git往下down项目, maven管理项目.
也是因为 maven 简化了项目之间的关系, 可以进行依赖管理, 把不同的系统依赖进行统一管理. 而且可以进行依赖之间的传递和继承. 在开发测试时候的部署, 都会相对很高效.
maven缺点 :
maven用的是约定大于配置的策略, 出现问题之后不好调试的.
maven的坐标, 算是唯一标识吧, Maven 的坐标元素包括 : groupId(当前项目的所属组织)、artifactId(实际项目中的一个模块)、version(当前项目的版本)、[maven的三大坐标GAV] 、packaging、classfier 。
用三大坐标可以在仓库中和找到响应的构件jar包.
2. 依赖范围?
注意 : maven 中有直接依赖和间接依赖之分
compile:默认范围全阶段,如果未指定任何范围,则使用该范围。编译依赖项在所有(编译,测试,运行)类路径中都可用。此外,这些依赖关系会传播到依赖的项目
provided:这很像compile,但provided范围表明 JDK或者某个容器提供运行时依赖。它只在编译和测试类路径上可用,不可传递。
runtime:编译不需要依赖项,但需要执行依赖项。它在运行时和测试类路径中,但不在编译类路径中。(servlet-api)
test:测试时起作用. 只在编译测试代码和运行测试的时候需要,应用的正常运行不需要此类依赖。它不是传递的。(jdbc)
system:系统依赖范围。该依赖与三种classpath的关系和provided依赖范围完全一致。
但 使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植。
3. Maven依赖传递原则
①最短路径原则(依赖传递的路径越短越优先)
②pom文件申明/引入顺序优先 先引入的优先级高于后引入的(路径长度一样,先申明的优先)
③覆写原则(当前pom文件里申明的直接覆盖父工程传过来的)
注意 : 如果项目期待别人继承了,也看不到依赖的包,那就加上<optional>
用别人的包 , 但是不全用, 用关键字排除不要的东西 <exclusion>
<exclusions>
<exclusion>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</exclusion>
</exclusions>
4. maven依赖冲突及解决方案
source : maven依赖冲突以及解决方法 - Linyb极客之路 - 博客园
5. Maven 的生命周期?
Maven 中有三个独立的生命周期, Clean 、Default、Site.
5. 聚合和继承的区别与联系 ?
聚合 : 管理项目 <packaging>pom<packaging>
继承 : 父工程里面的jar包,都只是定义,子工程里面,才是真正的引入,只是不需要写版本号,版本号由父工程统一来管理
作用:聚合用于快速构建项目; 继承用于快速配置
作用:聚合用于快速构建项目; 继承用于快速配置
6. 如何自动化部署平台搭建?
SpringMVC
重点: IOC 和 AOP , SpringMVC的执行流程.
1. MVC 设计思想 : 主要作用: 解耦
2. Spring MVC的优点:
(1)可以支持各种视图技术,而不仅仅局限于JSP;
(2)它是基于组件技术的。全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java组件.并且和Spring提供的其他基础结构紧密集成(如 IOC容器、AOP 等);
(3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。
(4) 支持各种请求资源的映射策略,易于扩展。
(5)不依赖于Servlet API (目标虽是如此,但是在实现的时候确实是依赖于Servlet的)
3. 基本配置文件的作用
1. springmvc.xml 配置文件的作用 :
注解、扫描controller包注解;静态资源映射;视图解析(defaultViewResolver);文件上传(multipartResolver);返回消息json配置。
2. web.xml 配置文件的作用:
web.xml的加载:随Tomcat的启动而启动dispatcherServlet 类,从而加载文件Springmvc.xml
3. 建Springmvc 的步骤 :
4. 写拦截器的步骤:
4. SpringMVC 的主要执行组件
九大基本组件:
🍀 注意 : 前端控制器 DispatcherServlet不是组件, 它的作用是: 处理所有的HTTP请求和响应结果.[相当于转发器],会减少组件间耦合度。
(1)处理器映射器HandlerMapping(不需要程序员开发),
作用:根据request的URL来查找相对应的Handler处理器。因为Handler(相当于Controller)有两种形式,一种是基于类的Handler,另一种是基于方法Method的Handler(也就是我们常用的).
(2)处理器适配器HandlerAdapter
注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。
🍀 关系 :Handler是用来干活的工具,HandlerMapping用于根据需要干的活找到相应的工具,HandlerAdapter是使用工具干活的人。
(3)视图处理器ViewResolver : 进行视图的解析 根据视图逻辑名解析成真正的视图(view). View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)
(4)处理器异常处理器 HandlerExceptionResolver
(5)RequestToViewNameTranslator
(6)LocalResolver
(7)ThemeResolver
(8)MulitipartResolver
(9)FlashMapmanager
5. SpringMVC执行流程
(1) 用户发送请求至前端控制器DispatcherServlet;
(2)DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
(3)处理器映射器根据请求url找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
(4)DispatcherServlet通过HandlerAdapter处理器适配器调用处理器;
(5)HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器);
(6)Handler执行完成返回ModelAndView;
(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)DispatcherServlet将ModelAndView传给ViewReslover视图解析器进行解析;
(9)ViewReslover解析后返回具体View;
(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11)DispatcherServlet响应用户。
source : SpringMVC 组件类大全_xlxxcc的专栏-优快云博客_springmvc的组件
6. SpringMVC 注解
source :