Java|Java 后端开发 快速入门知识
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 过滤器可以拦截请求和响应,并进行一些处理。主要用于对用户请求进行鉴权、做日志记录、对数据进行过滤或替换、对数据进行解码或解密等等,多个过滤器可以组成一条过滤器链。
- 【Java|Java 后端开发 快速入门知识】监听器: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
- JDBC 教程:www.yiibai.com/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教程:https://www.runoob.com/redis/redis-tutorial.html
那么,先来聊聊 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的配置从1.0到5.0的演进
- Spring Boot快速入门
- 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程
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…
- springboot-learning-example
推荐阅读
- PHP开发API离不开签名验证,你是如何设计()
- JavaScript|JavaScript 设计模式 —— 单例模式
- java|若依框架使用数据权限
- Java|ruoyi使用AOP控制数据权限案例
- iOS开发之swift网络请求框架Alamofire
- [译]Quartz.net官方开发指南|[译]Quartz.net官方开发指南 第一课(使用Quartz.net)
- JavaWeb--Cookie与Session
- springBoot|SpringBoot整合Spring Security+JWT实现前后端分离登录权限处理
- Java学习|Java学习 (九)基础篇 包机制&JavaDoc
- 面试官问(Java 序列化和反序列化为什么要实现 Serializable 接口(什么鬼??))