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

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

全新精讲视频/面试题,初学者电子书籍/开发工具/开发源码/学习笔记/学习手册

下载地址:Java技术讨论QQ群:639714511

加入交流群

 

Servlet
Servlet 是 Java Web 的底层技术,虽然现在因为有 Spring 框架,我们已经不需要直接编写 Servlet 了,但作为底层技术,我们还是要了解其原理,这样我们才能更好地理解在其之上的 Spring 框架等。
Servlet 其实就是 Server Applet —— 服务器小程序,即运行在服务器上的一个小程序,也是一个基于 Java 技术的 Web 组件。编写一个 Servlet,实际上也是按照 Servlet 规范编写一个 Java 类。只是这个 Java 类是不能独立运行的,它并没有 main 函数,它必须被部署到 Servlet 容器中,由容器来实例化和调用 Servlet 的方法。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,尤其是最后两个类 HttpServletRequestHttpServletResponse 必须要非常熟悉,这是在实际开发中会频繁使用到的。
  • 过滤器:Servlet 过滤器可以拦截请求和响应,并进行一些处理。主要用于对用户请求进行鉴权、做日志记录、对数据进行过滤或替换、对数据进行解码或解密等等,多个过滤器可以组成一条过滤器链。
  • 监听器:Servlet 监听器主要用来监听 ServletContext、HttpSession、ServletRequest 对象的生命周期事件,以及这些对象的属性改变事件。

关于对 HTTP/2 的支持,目前还没大范围使用,相关资料也是非常少,可以以后再了解。
接着,再来推荐一些学习资源。首推 Head First 的一本书**《Head First Servlets & JSP》**,还是保持一贯通俗易懂的作风,非常适合入门。不过,其中,第 7/8/9 三章关于 JSP 的内容可以略过,毕竟 JSP 早已经过时不用了。第 14 章讲模式部分则非常值得看,应该说是每个人都必看,当你理解了里面所讲的内容后,才有可能设计出一个更好的系统。
另外,我的 Servlet 入门书籍**《Servlet/JSP深入详解——基于Tomcat的Web开发》也是本不错的入门书,只是太老旧已经停印了,所以在亚马逊、京东、当当等都买不到了,要看只能到网上找电子版了。比较新的一本书叫《Servlet、JSP和Spring MVC学习指南》**,2016年底出版,不过我没看过,不知道怎么样。

JDBC
JDBC = Java DataBase Connectivity(Java 数据库连接),是一套访问数据库的标准 Java API。通过调用这套 API,就可以连接到数据库,可以执行 SQL 语句,对数据库里的数据进行处理。不过,JDBC API 只是一套规范接口,真正与数据库进行连接的则是 JDBC 驱动程序,不同的数据库采用不同的 JDBC 驱动程序。
和 Servlet 一样,因为有更方便的框架,我们也不直接使用 JDBC 的 API 进行数据库编程了。不过,Hibernate 和 MyBatis 框架的底层还是 JDBC,因此,我们还是要了解 JDBC 的基本原理,才能更快地上手 MyBatis 等框架。好在这部分的内容很少,所以我们只需要投入很少时间就可以掌握了
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 等等

对于 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 Boot 和 Spring Framework。其中,Spring Framework 是我们要学习的核心框架,但也不是要了解这个项目的全部内容,只先了解一些基础的东西,能够支撑到我们进行入门级的开发就足够了。
那么,先来聊聊 Spring Framework,目前最新版本是 Spring Framework 5.0。Spring Framework 包含有20多个模块,包括 spring-corespring-aopspring-beansspring-contextspring-jdbcspring-webspring-webmvcspring-websocket 不过,一般我们不需要将所有模块都引入到项目中,根据所需去引入即可。
学习 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
接着,再来了解下 Spring Boot,Spring Boot 能够简化基于 Spring 的应用的搭建和开发,Spring Cloud 就是基于 Spring Boot 的。Spring Boot 从根本上来说就是一些库的集合,这些库的 artifactId 一般都是以 spring-boot-starter- 为前缀。

要相对系统地入门 Spring,我推荐评价最高的两本书:《Spring实战(第4版)》和《精通Spring 4.x:企业应用开发实战》。两本书都是基于 Spring 4 的,基于 Spring 5 的书籍还没有,不过这对于入门来说并没什么影响。另外,《精通Spring 4.x:企业应用开发实战》这本书中还加了 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 进行优化则比较方便了。

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

【Java练手项目十二】基于SpringBoot的车牌识别系统(附项目地址)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值