快速入门 Java 后端开发的正确姿式

这篇文章本是个人收费专栏里的一篇文章,发现有不少人会付费阅读这篇文章,所以决定将其免费分享出来,但愿能够将其扩散帮到更多想快速入门Java的开发人员。html

------------- 如下是正文----------------前端

前面三篇文章咱们已经聊完了如何快速入门 Android、iOS、Web 前端开发,本篇轮到最后一个端——Java 后端了。Java 后端有着很是庞大的生态圈,也涉及到不少复杂的问题,如分布式事务、分布式查询、微服务、高并发、容灾、容器化等等,涉及到的技术栈和框架就更多了。不过,咱们目前只是为了快速入门,咱们只会学习最必要的那些知识,能支撑到咱们进行实际项目的开发便可。那么,咱们须要学习的核心知识主要包括 JavaServletJDBCMySQLRedisSpringMyBatis 等。Java 基础部分在聊入门 Android开发时已经讲过,这里就不重复讲了。java

开发工具

先聊下 Java 后端的开发工具吧,我推荐使用 IntelliJ IDEA,这是被公认为最好用的 Java 开发工具,熟悉 Android Studio 的 Android 开发人员对它应该不陌生,其强大的功能和特性能够说是完虐 EclipseMyEclipse,尤为我最喜欢它的智能代码提示功能。IDEA 用熟了以后绝对大大提高开发效率,目前咱们公司开发人员也是全面转向 IDEA 了。这里我向你们推荐一套很详细的中文专题教程,该教程在 github 上是开源的,也常常更新,如下是地址:mysql

若是英文比较好,建议仍是直接阅读官方的帮助文档:git

Servlet

Servlet 是 Java Web 的底层技术,虽然如今由于有 Spring 框架,咱们已经不须要直接编写 Servlet 了,但做为底层技术,咱们仍是要了解其原理,这样咱们才能更好地理解在其之上的 Spring 框架等。github

Servlet 其实就是 Server Applet —— 服务器小程序,即运行在服务器上的一个小程序,也是一个基于 Java 技术的 Web 组件。编写一个 Servlet,实际上也是按照 Servlet 规范编写一个 Java 类。只是这个 Java 类是不能独立运行的,它并无 main 函数,它必须被部署到 Servlet 容器中,由容器来实例化和调用 Servlet 的方法。Servlet 容器也称为 Web 容器,目前主要就是 TomcatJetty,二者各有优劣,Jetty 更知足公有云的分布式环境的需求,而 Tomcat 更符合企业级环境。咱们大部分时候仍是处于开发企业级应用阶段,所以,仍是优先选择 Tomcat。web

目前 Servlet 规范已经演进到 4.0 版本,相比以前的版本,主要是新增了对 HTTP/2 的支持。另外,3.0 版本相比以前的 2.5 版本,最重要的则是新增了对 WebSocket 的支持,3.0 版本以前的 Servlet 只支持 HTTP 请求。那么,对于目前的 Servlet 来讲,须要学习哪些知识点呢?此次,我先把核心的知识点罗列出来,后面再来推荐一些相关的学习资源。redis

  • 环境配置:包括开发环境部署环境,要熟悉这两种环境的搭建,开发环境主要就是 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,尤为是最后两个类 HttpServletRequestHttpServletResponse 必需要很是熟悉,这是在实际开发中会频繁使用到的。
  • 过滤器:Servlet 过滤器能够拦截请求和响应,并进行一些处理。主要用于对用户请求进行鉴权、作日志记录、对数据进行过滤或替换、对数据进行解码或解密等等,多个过滤器能够组成一条过滤器链。
  • 监听器:Servlet 监听器主要用来监听 ServletContext、HttpSession、ServletRequest 对象的生命周期事件,以及这些对象的属性改变事件。
  • WebSocket:须要注意的是,网上有些继承 WebSocketServlet 的实现方式已是 Deprecated(过时)的,根据 Oracle 发布的 Java 的 WebSocket 的 JSR356规范所展现的实现方式有两种,一种是使用 @ServerEndpoint 注解,另外一种是继承 javax.websocket.Endpoint 类,推荐使用注解。关于 WebSocket 的开发入门能够看这篇文章:java WebSocket开发入门WebSocket

关于对 HTTP/2 的支持,目前还没大范围使用,相关资料也是很是少,能够之后再了解。spring

接着,再来推荐一些学习资源。首推 Head First 的一本书**《Head First Servlets & JSP》**,仍是保持一向通俗易懂的做风,很是适合入门。不过,其中,第 7/8/9 三章关于 JSP 的内容能够略过,毕竟 JSP 早已通过时不用了。第 14 章讲模式部分则很是值得看,应该说是每一个人都必看,当你理解了里面所讲的内容后,才有可能设计出一个更好的系统。sql

另外,个人 Servlet 入门书籍**《Servlet/JSP深刻详解——基于Tomcat的Web开发》也是本不错的入门书,只是太老旧已经停印了,因此在亚马逊、京东、当当等都买不到了,要看只能到网上找电子版了。比较新的一本书叫《Servlet、JSP和Spring MVC学习指南》**,2016年末出版,不过我没看过,不知道怎么样。

菜鸟有一套简明教程,其实也是翻译自国外的一套英文教程,也能够简单看看,有个基本认识。如下是地址:

视频资源方面,我找到一份 Servlet 3.0 特性专题视频,也分享给你们:

JDBC

JDBC = Java DataBase Connectivity(Java 数据库链接),是一套访问数据库的标准 Java API。经过调用这套 API,就能够链接到数据库,能够执行 SQL 语句,对数据库里的数据进行处理。不过,JDBC API 只是一套规范接口,真正与数据库进行链接的则是 JDBC 驱动程序,不一样的数据库采用不一样的 JDBC 驱动程序。

和 Servlet 同样,由于有更方便的框架,咱们也不直接使用 JDBC 的 API 进行数据库编程了。不过,HibernateMyBatis 框架的底层仍是 JDBC,所以,咱们仍是要了解 JDBC 的基本原理,才能更快地上手 MyBatis 等框架。好在这部分的内容不多,因此咱们只须要投入不多时间就能够掌握了。也找了一份在线的 JDBC 教程分享给你们,如下是地址:

JDBC 的核心接口和类就只有几个:DriverDriverManagerConnectionStatementResultSetSQLException。要了解这几个接口和类的用法,以及了解使用 JDBC 的流程,简单来讲就是五个步骤:

  1. 注册 JDBC 驱动程序;
  2. 创建与数据库的链接;
  3. 执行 SQL 语句;
  4. 获取结果数据;
  5. 清理资源。

另外,也要了解下对事务的处理,包括事务的提交和回滚。以及了解如何对 SQL 进行批量处理。全部这些内容在上面的 JDBC 教程中都有讲述,我就不展开说了。另外,我在上面介绍的**《Servlet/JSP深刻详解——基于Tomcat的Web开发》**一书中也有一个章节专门讲了 JDBC,也能够看一看。

数据库

咱们知道,数据库分为关系型数据库非关系型数据库两大类。关系型数据库主要就是 MySQLOracleDB2PostgreSQL 等,标准数据查询语言 SQL 就是一种基于关系型数据库的语言。非关系型数据库也称 NoSQL(Not only SQL),主要包括 RedisMongoDBHBase 等。现在,不少项目都会使用一种以上的数据库,其中,Redis 能够说是必选的。另外,MySQL 做为最流行的关系型数据库,开源并且入门简单,所以咱们就先熟悉这两个数据库。

先介绍下关系型数据库设计工具吧,非关系型数据库好像没什么专门的设计工具就不介绍了。首先,Windows 下无疑 PowerDesigner 是最强大也是最流行的,惋惜的是它并无推出 Mac 版本。Mac 下我推荐使用 Navicat,既是好用的关系数据库客户端,也是不错的数据库建模工具,建模完成后能够导出为一个 SQL 文件,很方便。

对于 MySQL,目前咱们也还不须要去研究比较深刻的东西,好比存储引擎、存储过程、触发器、事务隔离级别、分布式事务、锁机制等等,最初级的主要了解如下内容:

  • 安装配置:这不用说,最最基本的
  • SQL:对 SQL 确定要很是熟悉,这也是最基本的
  • 数据类型:要了解 MySQL 有哪些数据类型,以及不一样数据类型之间有哪些差别
  • 约束:了解并熟悉各类约束的用法,包括主键约束、非空约束、惟一性约束、自增约束、默认值约束等
  • 索引:索引很重要,必需要懂,固然,如何用好索引也是门学问
  • 函数:了解一些经常使用的函数,如 count、sum、avg、max、min、now 等等

这些基础方面的知识就不用推荐什么学习资源了,网上随便找一大把。不过,对于掌握这些基础知识以后的深刻学习,我推荐两本书:《高性能 MySQL》《MySQL 技术内幕:InnoDB 存储引擎》。另外,官方文档也是必不可少的,只是内容比较多。

对于 Redis,由于是基于内存的,因此性能很是高,不少项目用它做缓存。虽然是一个 key - value 数据库,但 value 能够是字符串(String)、哈希(Map)、列表(List)、集合(Sets)、有序集合(Sorted Sets) 等类型。推荐一个菜鸟的简明教程,能够简单入门:

书籍方面,推荐看**《Redis实战》**,是一本很是不错且广受好评的入门书籍。

另外,Redis 的 Java 库叫 Jedis,也要简单了解下其用法。

Spring

Spring 发展到现在,已经成为一个很庞大的生态圈,咱们所了解的 Spring Framework 只是整个 Spring 生态圈的一个核心项目,除此以外还有不少其余项目,包括 Spring BootSpring CloudSpring DataSpring For Android 等 20 多个项目,你能够在 Spring 官网看到全部项目。不过,咱们入门只先了解两个项目:Spring BootSpring Framework。其中,Spring Framework 是咱们要学习的核心框架,但也不是要了解这个项目的所有内容,只先了解一些基础的东西,可以支撑到咱们进行入门级的开发就足够了。

那么,先来聊聊 Spring Framework,目前最新版本是 Spring Framework 5.0。Spring Framework 包含有20多个模块,包括 spring-corespring-aopspring-beansspring-contextspring-jdbcspring-webspring-webmvcspring-websocket 等等,具体列表能够查看 Spring Framework 的 Github 项目。不过,通常咱们不须要将全部模块都引入到项目中,根据所需去引入便可。

学习 Spring Framework,有两个核心设计思想是要掌握的,就是 控制反转(Inversion of Control,简称 IoC)面向切面编程(Aspect Oriented Programming,简称 AOP)。说到控制反转,还有一个概念也要理解,叫 依赖注入(Dependency Injection,简称 DI),区别就是,控制反转是一种设计思想,而依赖注入则是其中一种实现的方式,还有另外一个实现方式叫依赖查找(Dependency Lookup)。不过,大部分都是采用依赖注入,Spring 使用的也是依赖注入的方式。另外,Spring 核心还有一个控制反转容器(IoC Container),主要就是经过配置文件以及利用反射在运行时建立所须要的实现类。要理解这几个概念,推荐看知乎上的一个回答,深刻浅出,很是好理解:

AOP 一样也是一种设计思想,主要是为了分离出一些非业务逻辑的代码,如日志记录、性能统计,安全控制,事务处理,异常处理等。在 Spring 底层是经过动态代理的方式实现了 AOP 的内部机制,另外,上层也支持 AspectJ 的注解方式。AOP 中还有几个相关概念须要理解:AspectJoint pointPointcutAdviceWeaveIntroductionTarget ObjectAOP Proxy。那么,为了帮助你们理解 AOP 这些概念和原理,以及 Spring 中要如何使用 AOP,我找了两篇文章分享给你们学习:

接着,再来了解下 Spring Boot,Spring Boot 可以简化基于 Spring 的应用的搭建和开发,Spring Cloud 就是基于 Spring Boot 的。Spring Boot 从根本上来讲就是一些库的集合,这些库的 artifactId 通常都是以 spring-boot-starter- 为前缀。使用 Spring Boot 搭建项目也是很是简单的,我就分享《Spring Cloud微服务实战》一书的做者翟永超博客的两篇文章给你们吧:

要相对系统地入门 Spring,我推荐评价最高的两本书:《Spring实战(第4版)》《精通Spring 4.x:企业应用开发实战》。两本书都是基于 Spring 4 的,基于 Spring 5 的书籍尚未,不过这对于入门来讲并没什么影响。另外,《精通Spring 4.x:企业应用开发实战》这本书中还加了 Spring Boot 的章节。Spring Framework 的官方文档也能够看,内容毕竟是最新也是最详细的,只是内容太多了,听说有600多页,因此一时半会是看不完的,通常也不推荐初学者直接看官方文档,只建议对某些点理解得还不是很深的状况下能够去翻来看看,加深理解。Spring Boot 的官方文档也是同样。

MyBatis

前面咱们知道,Java 访问数据库的标准 API 是 JDBC,只是,直接使用 JDBC API 进行编码操做数据库的话,代码很是繁琐,可扩展性很是低,所以,才会衍生出 HibernateMyBatisSpringJDBC 等对 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 的用法,直接看官方文档便可,内容很少,且还有中文版本,如下是连接地址:

实战入门

前面的内容很是多,要经过实战项目将全部知识点所有串起来还真的比较难,主要是现在已经找不到项目会直接编写 Servlet 和 JDBC 了,而这两块是 Java Web 的底层技术,必需要理解透彻。那么,咱们只能拆开来学习,Servlet 和 JDBC 原生部分,建议就按照书籍上的 Demo 去练习,主要目的是要经过编码对那些核心的知识点造成深入理解。Spring、MyBatis、数据库这些,则能够经过一些开源项目进行学习,我找到一个基于 Spring Boot 的不错的学习项目,推荐给你们:

里面的每一个小项目都很是简单,建议重点看 springboot-mybatis-redis 这个小项目,最贴合咱们须要学习的内容。由于项目太简单,建议对其进行扩展,好比,本身多增长一个表,并经过增长新的 REST 接口对其进行增删改查;或者添加用户注册登陆功能,并使用过滤器对用户做统一鉴权;或者再添加对 WebSocket 的支持。最好是将其扩展成一个相对完整的 Java Web 项目,好比作一个简化的电商项目,不须要界面,只须要提供接口。当你能完成这个完整的 Java Web 项目以后,也算真正入门了。

思考与实践

若是用 Gradle 做为构建工具,要如何配置?与 Android 的配置有何不一样?SpringJDBC 要怎么使用?与 MyBatis 比较如何?经过项目实战去感觉这些知识点的差别吧。


扫描如下二维码便可关注订阅号。

相关文章
相关标签/搜索