Java 后端开发 快速入门需要学习的核心知识主要包括 Java、Servlet、JDBC、MySQL、Redis、Spring、MyBatis 等。
0、开发工具
推荐使用idea,当然其他的也可以考虑。可以通过以下路径获取
https://github.com/judasn/IntelliJ-IDEA-Tutorial
1、JAVA
2、Servlet
Servlet 是 Java Web 的底层技术,虽然现在因为有 Spring 框架,我们已经不需要直接编写 Servlet 了,但作为底层技术,我们还是要了解其原理,这样我们才能更好地理解在其之上的 Spring 框架等。
Servlet 其实就是 Server Applet —— 服务器小程序,即运行在服务器上的一个小程序,也是一个基于 Java 技术的 Web 组件。
Servlet 容器也称为 Web 容器,目前主要就是 Tomcat 与 Jetty,Jetty 更满足公有云的分布式环境的需求,而 Tomcat 更符合企业级环境。通常我们使用Tomcat。
目前 Servlet 规范已经演进到 4.0 版本,相比之前的版本,主要是新增了对 HTTP/2 的支持。另外,3.0 版本相比之前的 2.5 版本,最重要的则是新增了对 WebSocket 的支持,3.0 版本之前的 Servlet 只支持 HTTP 请求。那么,对于目前的 Servlet 来说,需要学习哪些知识点呢?这次,我先把核心的知识点罗列出来,后面再来推荐一些相关的学习资源。
环境配置:包括开发环境和部署环境,要熟悉这两种环境的搭建,开发环境主要就是 JDK 和 IDEA 的安装配置,部署环境则是 Web 容器 Tomcat 的安装配置。另外,Java Web 普遍使用 Maven 作为构建工具,所以也要了解下 Maven 的用法。虽然 Gradle 比 Maven 更先进,但在 Java 后端大部分项目目前依然还在使用 Maven。
生命周期:要了解 Servlet 的生命周期,并了解 Servlet 容器对 Servlet 实例是如何管理的。
API:Servlet 的常用 API 要熟悉,主要包括 Servlet 接口、ServletConfig、ServletContext、RequestDispatcher、ServletRequest、ServletResponse、HttpServlet、HttpServletRequest、HttpServletResponse,尤其是最后两个类 HttpServletRequest、HttpServletResponse 必须要非常熟悉,这是在实际开发中会频繁使用到的。
过滤器:Servlet 过滤器可以拦截请求和响应,并进行一些处理。主要用于对用户请求进行鉴权、做日志记录、对数据进行过滤或替换、对数据进行解码或解密等等,多个过滤器可以组成一条过滤器链。
监听器:Servlet 监听器主要用来监听 ServletContext、HttpSession、ServletRequest 对象的生命周期事件,以及这些对象的属性改变事件。
WebSocket:需要注意的是,网上有些继承 WebSocketServlet 的实现方式已经是 Deprecated(过期)的,根据 Oracle 发布的 Java 的 WebSocket 的 JSR356规范所展示的实现方式有两种,一种是使用 @ServerEndpoint 注解,另一种是继承 javax.websocket.Endpoint 类,推荐使用注解。关于 WebSocket 的开发入门可以看这篇文章:java WebSocket开发入门WebSocket
-
Servlet 教程:https://www.runoob.com/servlet/servlet-tutorial.html
3、JDBC
JDBC = Java DataBase Connectivity(Java 数据库连接),是一套访问数据库的标准 Java API。通过调用这套 API,就可以连接到数据库,可以执行 SQL 语句,对数据库里的数据进行处理。不过,JDBC API 只是一套规范接口,真正与数据库进行连接的则是 JDBC 驱动程序,不同的数据库采用不同的 JDBC 驱动程序。
- JDBC 教程:www.yiibai.com/jdbc/
JDBC 的核心接口和类就只有几个:Driver、DriverManager、Connection、Statement、ResultSet、SQLException。要了解这几个接口和类的用法,以及了解使用 JDBC 的流程,简单来说就是五个步骤:
注册 JDBC 驱动程序;
建立与数据库的连接;
执行 SQL 语句;
获取结果数据;
清理资源。
另外,也要了解下对事务的处理,包括事务的提交和回滚。以及了解如何对 SQL 进行批量处理。所有这些内容在上面的 JDBC 教程中都有讲述,我就不展开说了。
4、数据库
数据库分为关系型数据库和非关系型数据库两大类。关系型数据库主要就是 MySQL、Oracle、DB2、PostgreSQL 等,标准数据查询语言 SQL 就是一种基于关系型数据库的语言。非关系型数据库也称 NoSQL(Not only SQL),主要包括 Redis、MongoDB、HBase 等。如今,很多项目都会使用一种以上的数据库,其中,Redis 可以说是必选的。另外,MySQL 作为最流行的关系型数据库,开源而且入门简单,因此我们就先熟悉这两个数据库。
对于 MySQL,目前我们也还不需要去研究比较深入的东西,比如存储引擎、存储过程、触发器、事务隔离级别、分布式事务、锁机制等等,最初级的主要了解以下内容:
- 安装配置:这不用说,最最基本的
- SQL:对 SQL 肯定要非常熟悉,这也是最基本的
- 数据类型:要了解 MySQL 有哪些数据类型,以及不同数据类型之间有哪些差异
- 约束:了解并熟悉各种约束的用法,包括主键约束、非空约束、唯一性约束、自增约束、默认值约束等
- 索引:索引很重要,必须要懂,当然,如何用好索引也是门学问
- 函数:了解一些常用的函数,如 count、sum、avg、max、min、now 等等
对于 Redis,因为是基于内存的,所以性能非常高,很多项目用它作缓存。虽然是一个 key - value 数据库,但 value 可以是字符串(String)、哈希(Map)、列表(List)、集合(Sets)、有序集合(Sorted Sets) 等类型。推荐一个菜鸟的简明教程,可以简单入门:
- Redis教程:https://www.runoob.com/redis/redis-tutorial.html
5、Spring
我们入门只先了解两个项目:Spring Boot 和 Spring Framework。其中,Spring Framework 是我们要学习的核心框架,但也不是要了解这个项目的全部内容,只先了解一些基础的东西,能够支撑到我们进行入门级的开发就足够了。
那么,先来聊聊 Spring Framework,目前最新版本是 Spring Framework 5.0。Spring Framework 包含有20多个模块,包括 spring-core、spring-aop、spring-beans、spring-context、spring-jdbc、spring-web、spring-webmvc、spring-websocket 等等,具体列表可以查看 Spring Framework 的 Github 项目。不过,一般我们不需要将所有模块都引入到项目中,根据所需去引入即可。
学习 Spring Framework,有两个核心设计思想是要掌握的,就是 控制反转(Inversion of Control,简称 IoC) 和 面向切面编程(Aspect Oriented Programming,简称 AOP)。说到控制反转,还有一个概念也要理解,叫 依赖注入(Dependency Injection,简称 DI),区别就是,控制反转是一种设计思想,而依赖注入则是其中一种实现的方式,还有另一个实现方式叫依赖查找(Dependency Lookup)。不过,大部分都是采用依赖注入,Spring 使用的也是依赖注入的方式。另外,Spring 核心还有一个控制反转容器(IoC Container),主要就是通过配置文件以及利用反射在运行时创建所需要的实现类。要理解这几个概念,推荐看知乎上的一个回答,深入浅出,非常好理解:
- Spring IoC有什么好处呢? - Sevenvidia的回答
AOP 同样也是一种设计思想,主要是为了分离出一些非业务逻辑的代码,如日志记录、性能统计,安全控制,事务处理,异常处理等。在 Spring 底层是通过动态代理的方式实现了 AOP 的内部机制,另外,上层也支持 AspectJ 的注解方式。AOP 中还有几个相关概念需要理解:Aspect、Joint point、Pointcut、Advice、Weave、Introduction、Target Object、AOP Proxy。那么,为了帮助大家理解 AOP 这些概念和原理,以及 Spring 中要如何使用 AOP,我找了两篇文章分享给大家学习:
- AOP概念,原理,应用介绍
- Spring中AOP的配置从1.0到5.0的演进
接着,再来了解下 Spring Boot,Spring Boot 能够简化基于 Spring 的应用的搭建和开发,Spring Cloud 就是基于 Spring Boot 的。Spring Boot 从根本上来说就是一些库的集合,这些库的 artifactId 一般都是以 spring-boot-starter- 为前缀。使用 Spring Boot 搭建项目也是非常简单的,我就分享《Spring Cloud微服务实战》一书的作者翟永超博客的两篇文章给大家吧:
- Spring Boot快速入门
- 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程
要相对系统地入门 Spring,我推荐评价最高的两本书:《Spring实战(第4版)》和《精通Spring 4.x:企业应用开发实战》。两本书都是基于 Spring 4 的,基于 Spring 5 的书籍还没有,不过这对于入门来说并没什么影响。另外,《精通Spring 4.x:企业应用开发实战》这本书中还加了 Spring Boot 的章节。Spring Framework 的官方文档也可以看,内容毕竟是最新也是最详细的,只是内容太多了,据说有600多页,所以一时半会是看不完的,一般也不推荐初学者直接看官方文档,只建议对某些点理解得还不是很深的情况下可以去翻来看看,加深理解。Spring Boot 的官方文档也是一样。
6、MyBatis
前面我们知道,Java 访问数据库的标准 API 是 JDBC,只是,直接使用 JDBC API 进行编码操作数据库的话,代码非常繁琐,可扩展性非常低,因此,才会衍生出 Hibernate、MyBatis、SpringJDBC 等对 JDBC 进行了封装的 ORM 框架,以简化开发。那么,为什么选择 MyBatis,而不是 Hibernate 或 SpringJDBC 呢?主要是因为目前最流行的还是 MyBatis,另外 MyBatis 也容易上手。
先来了解下 ORM 这个概念,ORM = Object Relational Mapping,称为对象关系映射,即业务实体对象和关系数据库之间建立起一种映射关系,最简单的映射关系就是:一个类对应一张数据表,类的每个实例对应表中的一条记录,类的每个属性则对应表的每个字段。Hibernate 是一个标准的 ORM 框架,在实体类和数据库之间建立了完整的映射关系,基本不需要开发人员自己写 SQL,内部会自动生成 SQL 语句,因此,对于数据量非常大的应用,想要优化 SQL 语句就比较困难。MyBatis 则是一个半自动化的 ORM 框架,不同于 Hibernate 提供了从实体类到数据库表的全套映射机制,SQL 是自动生成的;而 MyBatis 则只是在实体类和 SQL 之间建立映射关系,并不自动生成 SQL 语句,因此,开发人员是需要自己写 SQL 的。这样,对 SQL 进行优化则比较方便了。
要了解 MyBatis 的用法,直接看官方文档即可,内容不多,且还有中文版本,以下是链接地址:
- MyBatis 官方文档:www.mybatis.org/mybatis-3/z…
实战
前面的内容非常多,要通过实战项目将所有知识点全部串起来还真的比较难,主要是如今已经找不到项目会直接编写 Servlet 和 JDBC 了,而这两块是 Java Web 的底层技术,必须要理解透彻。那么,我们只能拆开来学习,Servlet 和 JDBC 原生部分,建议就按照书籍上的 Demo 去练习,主要目的是要通过编码对那些核心的知识点形成深刻理解。Spring、MyBatis、数据库这些,则可以通过一些开源项目进行学习,我找到一个基于 Spring Boot 的不错的学习项目,推荐给大家:
- springboot-learning-example
里面的每个小项目都非常简单,建议重点看 springboot-mybatis-redis 这个小项目,最贴合我们需要学习的内容。因为项目太简单,建议对其进行扩展,比如,自己多增加一个表,并通过增加新的 REST 接口对其进行增删改查;或者添加用户注册登录功能,并使用过滤器对用户作统一鉴权;或者再添加对 WebSocket 的支持。最好是将其扩展成一个相对完整的 Java Web 项目,比如做一个简化的电商项目,不需要界面,只需要提供接口。当你能完成这个完整的 Java Web 项目之后,也算真正入门了。