原创声明
系列文章介绍
本文是《五分钟学 Java》系列文章的一篇
本系列文章主要围绕 Java 程序员必须掌握的核心技能, 结合我个人三年多的 Java 学习和工作经历, 总结和沉淀下来的方法论, 希望能让 Java 学习这件事变得更简单, 作者目前在阿里做 Java, 忙里偷闲分享一些技术文章.
系列文章将会把一些技术学习方法, 过程, 要领与我的学习经验相结合, 更加浅显易懂, 并且我也会把我学习时用的资料, 书籍和文章拿出来分享给大家, 节省你我的时间. 所谓授人以鱼也要授人以渔, 是本系列文章希望达到的目标.
本文思维导图
什么是 Java web
不知道 Java Web 这个词是从什么时候开始出现的, 但是, 据 Java 官方记载, 只有 JavaSE 和 JavaEE 这类表述, 似乎并没有 Java Web 这么一个说法, 所以, 我更愿意认为, Java Web 是各位 Java 前辈们对于 Java 在 Web 方向应用的相关技术栈, 正如现在的 Python Web,golang Web 等等, 只不过是通过某种语言来实现 Web 应用而已.
让我们先看看百度百科对于 Java Web 的定义, Java Web, 是用 Java 技术来解决相关 Web 互联网领域的技术总和. Web 包括: Web 服务器和 Web 客户端两部分. Java 在客户端的应用有 java applet, 不过使用得很少, Java 在服务器端的应用非常的丰富, 比如 Servlet,JSP 和第三方框架等等. Java 技术对 Web 领域的发展注入了强大的动力.
乍一看来, 和我们上面锁描述的类似, 事实上, 在 Java 招聘市场上, 一个 Java 工程师, 首先也要是一个 Java Web 工程师, 因为这基本上是 Java 工程师的最低要求了, 至少你要懂得 CRUD, 懂得写一个后台管理系统, 懂得和前端联调吧. 当然了, 在这基础上, 还有很多纯后端的 Java 后端工程师, 他们负责造轮子, 开发中间件, Java Web 这么初级的东西他们才不愿意碰呢, 当然这也是后话了.
Java Web 发展了这么多年, 各种新鲜技术层出不穷, 不管是 spring 全家桶, 还是 ORM 框架, 还是各种基于 Java 开发的中间件, 都有很多新的应用和场景. 像是最典型的电商场景, 淘宝, 京东, 拼多多, 都是把 Java Web 技术做到极致的公司, 当然了, 在 Java Web 之后, 是能够支持起亿万级流量和用户的后端架构.
这样看来, Java Web 似乎还有不少名堂, 简单的可以做个后台系统, 复杂的也可以支持海量用户访问的电商平台, 那么要如何学习, 才能对 Java Web 从入门到精通呢, 不妨一起来看看下面的内容.
Java Web 到底要学习那些东西
那么, 作为一个新手 Java 工程师, 如何学习 Java Web 呢, 我先假设你只是一个 Java 小白, 学过了一些 Java 基础, 对于 Web 开发一窍不通, 那么你应该掌握的东西有哪些呢, 不怕吓到你, 真的非常多.
Java 基础知识
首先, 请先掌握好 Java 基础, 之前我在第一篇文章已经讲了, 如何学习 java 基础, 建议你先去看看那篇文章后, 再来看本文, 比较容易衔接的上.
要想搞定 Java Web,Java 基本功必须扎实, 像是面向对象基础, 集合类, 异常处理, IO 流, 多线程等技术都是经常会用到的.
前端知识
我一个后端工程师, 为啥还要懂前端知识呢? 想来还有点郁闷, 不过其实现在前后端分离的趋势已经很明显了, 很少还有哪个 Java 工程师需要懂 jsp, 也很少有 Java 工程师还在搞全栈了, 毕竟现在专业的 H5 工程师多的是, 你一个做 Java 的外行何必凑热闹.
不过作为一个学习者, 很多东西还是绕不过去的, 比如你要写一个简单的 Web 页面, 至少也要会个 html,CSS 和 JS 吧, 然后, 如果你想用点高级的语法, 可能就要上 jQuery 了, 想搞点漂亮的页面, 再上个 Bootstrap, 最后, 你还想用高大上的框架, 结果你掏出了 reactjs(不好意思这个我也不会)
对于前端知识, 我的建议是, 了解一下 HTML,JS,CSS 还是有必要的, 至少你要能大概看懂前端的代码, 其他的内容就不用太在意了, 懂得在浏览器上使用开发者工具排查请求问题就行了, 现在的前后端交互大多是用 JSON, 也不需要你去写前端代码.
HTTP 和 Web 基础知识
作为一个 Java Web 工程师, 你天天要打交道的就是 http 请求, 给你一个 url, 你要如何返回给他一个 http 的响应报文, 不过还好, Tomcat 帮你把 HTTP 报文请求和处理的问题解决了, 你只要告诉 tomcat 你要返回什么内容给前端就好了, 一般来说, 前后端用的数据格式就是 JSON.
关于这个 http 请求, 你要了解的东西就不少了, 计算机网络的基础知识要知道吧, http 协议的报文结构和常见方法你要知道吧, url 的 dns 解析你也需要懂.
这还只是基础的, Web 应用里面有两个常用的技术, 叫做 session 和 cookie,session 一般存在服务器上, 用于记住用户状态, 而 cookie 一般保存在浏览器上, 用于记录你的一些常用信息, 比如登录某个网站的账号密码, 这两个东西平时你应该不陌生, 但是 Java Web 工程师需要合理地使用这两个东西, 以实现自己的应用目的.
session 和 cookie 一般用于解决应用问题, 而网络通讯里还有一个重要的内容就是安全问题, 防止不法分子盗取信息, 诈骗盗刷. 这里就涉及到了 HTTPS 协议, 以及使用 token, 加密算法等技术来提升应用的安全性.
除此之外, 还有很多 Web 相关的技术知识, 这里不再一一列举, 毕竟这些东西, 只有真正接触到了之后, 多加实践, 才能更好地进行学习和理解.
servlet 和 jsp
绕来绕去, 还是绕不开这两个早已过气的技术, 以前我们用这两个东西是直接用, 现在我们不直接用, 框架会把 servlet 封装起来, 我们只需要写一些喜闻乐见的 controller 就可以了, 而 jsp 早就已经退出历史舞台了.
这两个东西没必要花太多时间, 毕竟现在的 Java Web 其实就是 spring 全家桶 + Web 相关技术, 接下来我们就来看看 spring 全家桶应该如何学习.
spring 全家桶
spring 全家桶主要包括 spring,springmvc 和 springboot, 当然还有 springcloud, 主要是用于分布式服务的, 我们一个小小的 Java Web 就不请它出来了. 对于前面三样技术, 很多人早就已经不陌生了.
spring 颠覆了 Java 中实例管理的方式, 实例的管理被统一到 spring 的 bean 容器中, 而很多切面型逻辑也被 AOP 这种处理方式给解放出来了, IoC 和 AOP 是 spring 最令人称道的两个特点.
而到了 springmvc 时代, 分层结构开始愈发流行, model 层用于映射数据, view 用于渲染数据和前端交互, controller 则用来分发请求. 而对于很多的 Javaweb 应用, 他们的代码结构一般也是 controller-service-dao 这样的分层结构. springmvc 制霸了 Java Web 应用很久了, 直到它的进化版 springboot 的出现.
springboot 横空出世, 直接砍掉了复杂的 spring 配置, 转而用注解的方式简化了开发流程, 并且直接吃掉了 tomcat 了, 一切从简. springboot 的出现使得 JavaWeb 的学习成本更低了, 建议新手朋友直接用 springboot 开启你的第一个 Java Web 项目, 体验一定会比用 springmvc 好得多.
当然了, spring 全家桶要细讲起来可不止这么些东西, 由于篇幅优先, 后续会单独拎出来写一篇关于如何学习 spring 全家桶的文章, 敬请期待.
数据库
不好意思, 把这个老哥给忘了, 数据库作为一切 Web 应用的基石, 没有它就没有数据, 应用就毫无价值, 当然了, 让我们天天沉迷于 CRUD 无法自拔的也是这个东西.
几乎没有哪个 Web 应用是不用数据库的, 现在市面上最流行的仍然是 MySQL 数据库, 想要做一个 Web 应用, 先学会 sql 的基本语法吧, 懂得建表, 懂得在 sql 里 CRUD, 这样你才能够回到代码里继续 CRUD(增删改查) 当然了, 关于数据库要学习的知识远不止于此, 由于篇幅优先, 后续会单独拎出来写一篇关于数据库的文章, 敬请期待.
Java Web 实用工具和技术
接下来这些内容, 都是 Java Web 周边的一些开源技术组件, 它们有的是大工程, 有的是小项目, 总之, 它们都是这个技术生态中不可缺少的一部分
1,Maven
做一个成熟的构建工具, Maven 不仅可以帮你管理依赖, 还能帮你管理工程目录, 比如我们的工程为什么目录格式都是一样的, 有 src 包也有 test 包, 这就是遵守了 maven 的规范, 这种基于约定的管理方式, 使得 maven 可以非常轻量化地帮你管理和构建项目.
2,Tomcat
Tomcat 自然是 Java Web 中的中坚力量, 毕竟大部分的 Java Web 应用都运行在 tomcat 上, 作为一个 Java Web 工程师, 还是要尽量多了解 Tomcat 的实现原理和运行原理, 这也有助于你理解 Web 应用的运行模式, 即使以后换了别的应用容器你也可以快速上手.
3, 日志组件和单元测试组件
日志组件和单元测试组件都是很实用的技术组件, 平时自己搞项目的话可能不会太在意, 但是在公司里的项目是一定要用好这两个东西的, 打好了日志, 才能够排查和监控问题, 而单元测试组件, 可以帮你检查代码的正确性, 提高代码质量, 把 bug 挡在门外.
4,ORM 框架
ORM 框架是什么, 其实就是为了更好地进行对数据库的 CRUD, 而设计出来给 Java 使用的持久层映射框架, 比如 mybatis 和 hibernate, 虽然本质上还是在写 sql, 但是我们可以直接通过对一个对象进行操作, 并且把这个操作映射成一个 sql 语句, 大大简化了我们操作数据库的流程.
进阶后端技术
刚刚我们也说过了, Java Web 应用的技术范围很广, 小项目可能用到上面这些东西就够了, 而大项目, 一些分布式应用, 要涉及的东西就太多了, 这里不展开介绍, 因为每一部分的内容都值得用一篇文章来讲, 这里就简单地给各位介绍一下, 有哪些后端技术是值得我们关注和学习的.
1, 缓存
缓存可以帮助数据库缓解读写压力, 一般用于数据库读写负载无法支撑业务场景的情况, 像是 Redis,memcache 这类缓存, 都是比较常用的, 缓存在 Web 应用中也经常使用.
2, 消息队列
消息队列用于处理多个应用的消息, 负责在分布式应用之间进行通信, 也适用于高并发大流量的场景, 比如电商购物, 下单消息太多, 下游处理不来, 通过消息队列先存储一些, 处理另外一些, 可以达到限流和削峰的目的
3, 分布式服务
分布式服务区别于本地服务, 一般用于多个应用之间的服务调用, 比如应用 A 有一个服务 S1, 应用 B 有一天个服务 S2,S1 要调用 S2, 只能通过网络传输才能实现, 分布式服务解决的就是这个问题.
除此之外, 还有像负载均衡, 反向代理, 分布式事务, 分布式数据库等复杂的应用技术, 这里不再一一列举, 如果你们感兴趣的话, 后续我会再写一篇关于如何学习分布式技术的文章.
推荐资源
这篇文章和之前的几篇不太一样, 内容比较多, 涉及的技术也很多, 主要是想把 Java Web 的整体样貌给讲清楚, 这里推荐一些相关的资源, 在精不在多.
这里只推荐 Java Web 的基础书籍, 在后面我们会有另外的文章介绍如何学习具体的某个后端技术, 比如缓存, 消息队列, 以及分布式服务等等, 到那个时候再去推荐书籍也不迟.
书籍
《深入分析 JavaWeb 技术内幕》
《Maven 实战》
《spring 实战》
《sql 必知必会》
视频
关于 Java Web 的视频应该是市面上最多的, 这里我整理了一些还算不错的视频资源分享给大家
博客
Java 技术仓库《Java 程序员复习指南》
https://github.com/h2pl/Java-Tutorial
整合全网优质 Java 学习内容, 帮助你从基础到进阶系统化复习 Java
总结
关于 Java Web 技术栈都有哪些东西, 以及如何学习 JavaWeb 技术, 我们今天就讲到这里了, 如果还有什么疑问也可以到我公众号里找我探讨, 后续会有更多的文章推出, 包括如何系统性地学习 JavaWeb, 敬请期待.
对了, 你想问我文章里提到的书籍和视频去哪找? 我已经给你准备好了
写在最后
对本系列文章有什么建议和意见, 也欢迎留言告诉我, 期待你的回馈.
来源: http://www.bubuko.com/infodetail-3447313.html