原创声明
本文作者:黄小斜
转载请务必在文章开头注明出处和作者。
系列文章介绍
本文是《五分钟学Java》系列文章的一篇
本系列文章主要围绕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,敬请期待。
对了,你想问我文章里提到的书籍和视频去哪找?我已经给你准备好了
文中提到的资源都可以免费领取,在我的公众号【程序员黄小斜】回复“JavaWeb”即可免费领取对应的资源。
写在最后
对本系列文章有什么建议和意见,也欢迎留言告诉我,期待你的回馈。
有疑问加站长微信联系(非本文作者)