SSM必备基本知识总结!

1 篇文章 0 订阅
1 篇文章 0 订阅

1.Maven

maven是什么?

Apache Maven是一个软件项目管理和综合工具

为什么需要使用MAVEN

  • Maven之前我们经常使用Ant来进行Java项目的构建然后Ant仅是一个构建工具, 它并未对项目的中的工程依赖以及项目本身进行管理, 并且Ant作为构建工具未能消除软件构建的重复性, 因为不同的项目需要编写对应的Ant任务。
  • Maven作为后来者, 继承了Ant的项目构建功能, 并且提供了依赖关系, 项目管理的功能, 因此它是一个项目管理和综合工具, 其核心的依赖管理, 项目信息管理, 中央仓库, 约定大于配置的核心功能使得Maven成为当前Java项目构建和管理工具的标准选择。

maven优势是什么

1.依赖包管理;
2.统一的开发环境规范

install:本地仓(胖包);
depoly:私服(瘦包/公共包);

常使用 Maven 命令

mvn clean:清空输出目录(即 target 目录)
mvn compile:编译源代码
mvn package:生成构件包(一般为 jar 包或 war 包)
mvn install:将构件包安装到本地仓库
mvn deploy:将构件包部署到远程仓库

2.Bootstrap

为什么使用 Bootstrap?

  • 移动设备优先:自 Bootstrap 3 起,框架包含了贯穿于整个库的移动设备优先的样式。
  • 浏览器支持:所有的主流浏览器都支持 Bootstrap。
  • 容易上手:只要您具备 HTML 和 CSS 的基础知识,您就可以开始学习 Bootstrap。
  • 响应式设计:Bootstrap 的响应式 CSS 能够自适应于台式机、平板电脑和手机。
  • 它为开发人员创建接口提供了一个简洁统一的解决方案。
  • 它包含了功能强大的内置组件,易于定制。
  • 它还提供了基于 Web 的定制。
  • 它是开源的。

Bootstrap依赖

要想使用 Bootstrap ,那么必须先引入 jQuery(jquery.min.js)文件。

Bootstrap 四大核心组件: 网格系统,媒体查询,表格,字体图标


3.Spring

什么是Spring?

Spring是一个轻量级的IoC和AOP容器框架

Spring核心

Spring核心是:控制反转Ioc,面向切面编程Aop,容器

为什么要使用Spring?

  • 1.方便解耦,便于开发(Spring就是一个大工厂,可以将所有对象的创建和依赖关系维护都交给spring管理)
  • 2.spring支持aop编程(spring提供面向切面编程,可以很方便的实现对程序进行权限拦截和运行监控等功能)
  • 3.声明式事务的支持(通过配置就完成对事务的支持,不需要手动编程)
  • 4.方便程序的测试,spring 对junit4支持,可以通过注解方便的测试spring程序
  • 5.方便集成各种优秀的框架
  • 6.降低javaEE API的使用难度(Spring 对javaEE开发中非常难用的一些API例如JDBC,javaMail,远程调用等,都提供了封装,是这些API应用难度大大降低)
  • 7.Java源码是经典学习范例
  • Spring的源码设计精妙、结构清晰、匠心独运,处处体现着大师对Java设计模式灵活运用以及对Java即使的高深造诣,Spring框架源码无疑是Java技术的最佳实践的范例。如果想在段时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你受到意想不到的效果。

Spring的特点

  • 非侵入式
  • 所谓非侵入式是指,Spring 框架的 API 不会在业务逻辑上出现,即业务逻辑是 POJO。由于业务逻辑中没有Spring 的 API,所以业务逻辑可以从 Spring 框架快速的移植到其他框架, 即与环境无关。
  • 容器
  • Spring 作为一个容器,可以管理对象的生命周期、对象与对象之间的依赖关系。可以通过配置文件,来定义对象,以及设置与其他对象的依赖关系。
  • IoC
  • 控制反转(Inversion of Control),即创建被调用者的实例不是由调用者完成,而是由 Spring 容器完成,并注入调用者。当应用了 IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。即,不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
  • AOP
  • 面向切面编程(AOP,Aspect Orient Programming),是一种编程思想,是面向对象编程 OOP 的补充。很多框架都实现了对 AOP 编程思想的实现。Spring 也提供了面向切面编程的丰富支持,允许通过分离应用的业务逻
  • 辑与系统级服务(例如日志和事务管理)进行开发。应用对象只实现它们应该做的——完成业务逻辑——仅此
  • 而已。它们并不负责其它的系统级关注点,例如日志或事务支持。
  • 我们可以把日志、安全、事务管理等服务理解成一个“切面”,那么以前这些服务一直是直接写在业务逻辑
  • 的代码当中的,这有两点不好:首先业务逻辑不纯净;其次这些服务被很多业务逻辑反复使用,完全可以剥
  • 离出来做到复用。那么 AOP 就是这些问题的解决方案, 可以把这些服务剥离出来形成一个“切面”,以期复
  • 用,然后将“切面”动态的“织入”到业务逻辑中,让业务逻辑能够享受到此“切面”的服务。

什么是IOC?

IOC:控制反转,指得是将对象的创建权反转给Spring。作用是实现了程序的解耦合。

Spring IOC 如何实现

  • Spring 中的 org.springframework.beans 包和 org.springframework.context 包构成了 Spring 框架 IoC 容器的基础。
  • BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。ApplicationContext 接口对 BeanFactory(是一个子接口)进行了扩展,在 BeanFactory 的基础上添加了其他功能,比如与 Spring 的 AOP 更容易集成,也提供了处理 message resource 的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对 Web 应用的 WebApplicationContext。
  • org.springframework.beans.factory.BeanFactory 是 Spring IoC 容器的具体实现,用来包装和管理前面提到的各种 bean。BeanFactory 接口是 Spring IoC 容器的核心接口。

什么是AOP

AOP,面向切面编程,是一种编程思想,是面向对象编程OOP的补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理。

Spring AOP 实现原理

  • Spring AOP 中的动态代理主要有两种方式,JDK 动态代理 和 CGLIB 动态代理。JDK 动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK 动态代理的核心是 InvocationHandler 接口和 Proxy 类。
  • 如果目标类没有实现接口,那么 Spring AOP 会选择使用 CGLIB 来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,CGLIB 是通过继承的方式做的动态代理,因此如果某个类被标记为 final,那么它是无法使用 CGLIB 做动态代理的。

什么是DI?

DI:依赖注入,需要有IOC环境,在Spring创建Bean对象时,动态的将依赖对象注入到Bean对象中去。依赖注入最大的好处就是解耦合。

DI有三种注入方式:1.构造函数;2.属性;3.注解;

ioc和di的区别:

IOC是一种思想,DI是这一种技术,DI是对IOC的实现;

JUnit

单元测试(接口测试);
还有其他测试:集成测试/验收测试/回归测试/压力测试;
回归测试:已经测试过的流程再测试一次

JUnit 特点

  • JUnit 是用于编写和运行测试的开源框架。
  • 提供了注释,以确定测试方法。
  • 提供断言测试预期结果。
  • 提供了测试运行的运行测试。
  • JUnit 测试让您可以更快地编写代码,提高质量
  • JUnit 是优雅简洁。它是不那么复杂以及不需要花费太多的时间。
  • JUnit 测试可以自动运行,检查自己的结果,并提供即时反馈。没有必要通过测试结果报告来手动梳理。
  • JUnit 测试可以组织成测试套件包含测试案例,甚至其他测试套件。
  • Junit 显示测试进度的,如果测试是没有问题条形是绿色的,测试失败则会变成红色。

为什么要进行日志分级?

提高开发的运行效率

Log4j 日志级别

  • fatal(致命的)
  • error
  • warn
  • info
  • debug
  • trace(堆栈)

Spring 框架中用到了哪些设计模式

  • 代理模式:在 AOP 和 Remoting 中被用的比较多。
  • 单例模式:在 Spring 配置文件中定义的 Bean 默认为单例模式。
  • 模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
  • 前端控制器:Spring 提供了 DispatcherServlet 来对请求进行分发。
  • 视图帮助(View Helper ):Spring 提供了一系列的 JSP 标签,高效宏来辅助将分散的代码整合在视图里。
  • 依赖注入:贯穿于 BeanFactory / ApplicationContext 接口的核心理念。
  • 工厂模式:BeanFactory 用来创建对象的实例。

4.SpringMVC

什么是三层架构

三层架构是指:视图层 View、服务层 Service,与持久 层 DAO。它们分别完成不同的功能。

  • View 层:用于接收用户提交请求的代码
  • Service 层:系统的业务逻辑主要在这里完成
  • DAO 层:直接操作数据库的代码

什么是 MVC 模式

MVC,即 Model 模型、View 视图,及 Controller 控制器

  • Model:模型,承载数据,并对用户提交请求进行计算的模块。其分为两类,一类称为数据承载 Bean,一类称为业务处理 Bean。所谓数据承载 Bean 是指实体类,专门用户承载业务数据的,如 Student、User 等。而业务处理 Bean 则是指 Service 或 Dao 对象, 专门用于处理用户提交请求的。
  • View:视图,为用户提供使用界面,与用户直接进行交互。
  • Controller:控制器,用于将用户请求转发给相应的 Model 进行处理,并根据 Model 的计算结果向用户提供相应响应。

SpringMVC是什么?

SpringMVC 是 Spring 框架的一部分,是一个展示层框架;目的是帮助WEB接口的开发

SpringMVC 和Spring关系
父子关系

Spring MVC 启动流程

在 web.xml 文件中给 Spring MVC 的 Servlet 配置了 load-on-startup,所以程序启动的时候会初始化 Spring MVC,在 HttpServletBean 中将配置的 contextConfigLocation 属性设置到 Servlet 中,然后在 FrameworkServlet 中创建了 WebApplicationContext,DispatcherServlet 根据 contextConfigLocation 配置的 classpath 下的 xml 文件初始化了 Spring MVC 总的组件。

Spring MVC 运行流程

  • Spring MVC 将所有的请求都提交给 DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。
  • DispatcherServlet 查询一个或多个 HandlerMapping,找到处理请求的 Controller.
  • DispatcherServlet 请求提交到目标 Controller
  • Controller 进行业务逻辑处理后,会返回一个 ModelAndView
  • Dispatcher 查询一个或多个 ViewResolver 视图解析器,找到 ModelAndView 对象指定的视图对象
  • 视图对象负责渲染返回给客户端。

json优势

数据量少
直接对应到实体
可读性比较高

5.Mybatis

什么是Mybatis?

MyBatis 是一款优秀的持久层框架

MyBatis 的特点

  • 在 XML 文件中配置 SQL 语句,实现了 SQL 语句与代码的分离,给程序的维护带来了很大便利。
  • 因为需要程序员自己去编写 SQL 语句,程序员可以结合数据库自身的特点灵活控制 SQL 语句,因此能够实现比 Hibernate 等全自动 ORM 框架更高的查询效率,能够完成复杂查询。
  • 简单,易于学习,易于使用,上手快。

MyBatis 与 Hibernate

Hibernate 框架是提供了全面的数据库封装机制的 “全自动” ORM,即实现了 POJO 和数据库表之间的映射,以及 SQL 的自动生成和执行。

相对于此,MyBatis 只能算作是 “半自动” ORM。其着力点,是在 POJO 类与 SQL 语句之间的映射关系。也就是说,MyBatis 并不会为程序员自动生成 SQL 语句。具体的 SQL 需要程序员自己编写,然后通过 SQL 语句映射文件,将 SQL 所需的参数,以及返回的结果字段映射到指定 POJO。因此,MyBatis 成为了“全自动”ORM 的一种有益补充。

Spring 整合 MyBatis

  • 在 pom.xml 文件中增加 MyBatis 相关依赖;
  • 创建一个名为 spring-mybatis-config.xml 的配置文件;
  • 创建一个名为 spring-context-mybatis.xml 的 Spring 配置文件;

MyBatis 动态 SQL

常用的动态 SQL 标签有 if、where、choose、foreach 等;

注意事项

在 mapper 的动态 SQL 中若出现大于号(>)、小于号(<)、大于等于号(>=),小于等于号(<=)等符号,最好将其转换为实体符号。否则,XML 可能会出现解析出错问题。
特别是对于小于号(<),在 XML 中是绝对不能出现的。否则,一定出错。

MyBatis中井号与美元符号的区别

  • #{变量名}可以进行预编译、类型匹配等操作,#{变量名}会转化为jdbc的类型
  • select * from tablename where id = #{id}
  • 假设id的值为12,其中如果数据库字段id为字符型,那么#{id}表示的就是’12’,如果id为整型,那么id就是12,并且MyBatis会将上面SQL语句转化为jdbc的select * from tablename where id=?,把?参数设置为id的值。
  • ${变量名}不进行数据类型匹配,直接替换
  • select * from tablename where id = ${id}
  • 如果字段id为整型,sql语句就不会出错,但是如果字段id为字符型, 那么sql语句应该写成
  • select * from table where id = ’ ${id}’。
  • #方式能够很大程度防止sql注入。
  • $方式无法防止sql注入。
  • $方式一般用于传入数据库对象,例如传入表名。
  • 尽量多用#方式,少用$方式

6.前后端分离的优势

  • 1、可以实现真正的前后端解耦,前端服务器使用nginx。前端/WEB服务器放的是css,js,图片等等一系列静态资源(甚至你还可以css,js,图片等资源放到特定的文件服务器,例如阿里云的oss,并使用cdn加速),前端服务器负责控制页面引用&跳转&路由,前端页面异步调用后端的接口,后端/应用服务器使用tomcat(把tomcat想象成一个数据提供者),加快整体响应速度。(这里需要使用一些前端工程化的框架比如nodejs,react,router,react,redux,webpack)
  • 2、发现bug,可以快速定位是谁的问题,不会出现互相踢皮球的现象。页面逻辑,跳转错误,浏览器兼容性问题,脚本错误,页面样式等问题,全部由前端工程师来负责。接口数据出错,数据没有提交成功,应答超时等问题,全部由后端工程师来解决。双方互不干扰,前端与后端是相亲相爱的一家人。
  • 3、在大并发情况下,我可以同时水平扩展前后端服务器,比如淘宝的一个首页就需要2000+台前端服务器做集群来抗住日均多少亿+的日均pv。(去参加阿里的技术峰会,听他们说他们的web容器都是自己写的,就算他单实例抗10万http并发,2000台是2亿http并发,并且他们还可以根据预知洪峰来无限拓展,很恐怖,就一个首页。。。)
  • 4、减少后端服务器的并发/负载压力。除了接口以外的其他所有http请求全部转移到前端nginx上,接口的请求调用tomcat,参考nginx反向代理tomcat。且除了第一次页面请求外,浏览器会大量调用本地缓存。
  • 5、即使后端服务暂时超时或者宕机了,前端页面也会正常访问,只不过数据刷不出来而已。
  • 6、也许你也需要有微信相关的轻应用,那样你的接口完全可以共用,如果也有app相关的服务,那么只要通过一些代码重构,也可以大量复用接口,提升效率。(多端应用)
  • 7、页面显示的东西再多也不怕,因为是异步加载。
  • 8、nginx支持页面热部署,不用重启服务器,前端升级更无缝。
  • 9、增加代码的维护性&易读性(前后端耦在一起的代码读起来相当费劲)。
  • 10、提升开发效率,因为可以前后端并行开发,而不是像以前的强依赖。
  • 11、在nginx中部署证书,外网使用https访问,并且只开放443和80端口,其他端口一律关闭(防止黑客端口扫描),内网使用http,性能和安全都有保障。
  • 12、前端大量的组件代码得以复用,组件化,提升开发效率,抽出来!

前后端分离的思想:

1.解耦:前端泛化(PC/移动/APP/H5/小程序)
2.动静分离:动(java代码,后端代码),静(HTML/css/js/图片/压缩包/APP包)
Tomcat:1500并发(并发低原因:servlet容器/遵循api3.0规范)
nginx/apache 2~10w并发
3为了一次解决多个前端需求

  • 9
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值