五分钟学Java:如何才能学好Java Web里这么多的技术
原创声明
本文作者:黄小斜
转载请务必在文章开头注明出处和作者。
系列文章介绍
本文是《五分钟学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”即可免费领取对应的资源。
写在最后
对本系列文章有什么建议和意见,也欢迎留言告诉我,期待你的回馈。
五分钟学Java:如何才能学好Java Web里这么多的技术的更多相关文章
- 五分钟学Java:如何学习Java面试必考的JVM虚拟机
原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 为什么要学习JVM虚拟机 最近的你有没有参加Java面试呢?你有没有发现,Java ...
- 五分钟学Java:如何学习Java面试必考的网络编程
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 简介 Java作为一门后端语言,对于网络编程的支持是必不可少的,但是,作为一个经常CRUD的Java工程师,很多时候都不 ...
- 五分钟学Java:可变参数究竟是怎么一回事?
在逛 programcreek 的时候,我发现了一些专注基础但不容忽视的主题.比如说:Java 的可变参数究竟是怎么一回事?像这类灵魂拷问的主题,非常值得深入地研究一下. 我以前很不重视基础,觉得不就 ...
- 五分钟学Java:打印Java数组最优雅的方式是什么?
在逛 Stack Overflow 的时候,发现了一些访问量像安第斯山一样高的问题,比如说这个:打印 Java 数组最优雅的方式是什么?访问量足足有 220W+,想不到啊,这么简单的问题竟然有这么多 ...
- 五分钟学Java:一篇文章搞懂spring和springMVC
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 什么是Spring,为什么你要学习spring? 你第一次接触spring框架是在什么时候?相信很多人和我一样,第一次了 ...
- 五分钟学Java:一篇文章带你搞懂spring全家桶套餐
原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 什么是Spring,为什么你要学习spring? 你第一次接触spring框架是在 ...
- 五分钟学后端技术:如何学习Redis、memcache等常用缓存技术
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 什么是缓存 计算机中的缓存 做后端开发的同学,想必对缓存都不会陌生了,平时我们可能会使用Redis,MemCache这类 ...
- 五分钟学GIS | 快速生成地图瓦片秘籍
什么是地图瓦片? 地图瓦片是包含了一系列比例尺.一定地图范围内的地图切片文件.地图瓦片按照金字塔结构组织,每张瓦片都可通过级别.行列号唯一标记.在平移.缩放地图时,浏览器根据金字塔规则,计算出所需的瓦 ...
- 怎样才能自学好Java?
经常有初学Java的同学问:怎么样才能学好Java?自学Java难吗? 我认为自学Java并不难.相对于其他语言来说,因为Java95年才出来,所以相对比较新,旧的语言中一些不合适的东西在Java里面 ...
随机推荐
- OSI体系结构(七层)
OSI体系结构,意为开放式系统互联.国际标准组织(国际标准化组织)制定了OSI模型.这个模型把网络通信的工作分为7层,分别是物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 1至4层被认为 ...
- vivado操作基本问题
1.zynq开发板的构造以及推崇的设计理念 设计推崇的理念是设计有知识产权的可重用的IP模块. 2.操作过程中遇到的问题以及解决方法 (1)综合速度慢解决方案: 我们都知道Vivado编译起来相当的慢 ...
- freeRadius日志关闭
vim /etc/raddb/radiusd.conf #file = ${logdir}/radius.log file = /dev/null vim /etc/raddb/modules/det ...
- 将本地的一个项目托管到自己的GitHub仓库
GitHub作为全球最大的代码托管平台,功能十分强大.我们可以在上面建立一个仓库来托管我们的代码图片等资源.因为使用markdown语法来写博客所以在插入图片时需要一个图片外链地址,起初去网上找了一个 ...
- win7 任务栏 无法固定文件夹和文件 解决方法
2010年开始使用win7,一直都在用一个功能,把常用的文件夹和文件都直接锁定到任务栏,方便使用. 最近这个功能一直有问题,开始只是重启以后,以前固定的文件没有了,这个也懒的去弄它,没了在添加一次. ...
- java对象POJO和JavaBean的区别
"Plain Ordinary Java Object",简单普通的java对象.主要用来指代那些没有遵循特定的java对象模型,约定或者框架的对象.POJO的内在含义是指那些:有 ...
- VI.应用-Trajectory Data Mining
$textbf{Trajectory Data Mining: An Overview}$ 很好的一篇概述,清晰明了地阐述了其框架,涉及内容又十分宽泛.值得细读. 未完成,需要补充. $textbf{ ...
- Microsoft Translator:消除面对面交流的语言障碍
Translator:消除面对面交流的语言障碍" title="Microsoft Translator:消除面对面交流的语言障碍"> James Simm ...
- grpc调试工具
grpcurl 和 grpcui 都是调试grpc的利器,前者用于命令行,类似curl工具:后者是以web的形式进行调试的,类似postman工具. 有了这两款工具,我们不用写任何客户端代码,也能方便 ...
- 如何优化自己的JS代码
尽管接触大大小小项目N多个,但是刚入行两年, 撸码还是没有完全成一定的规律:最近受到很多启发,打算沉淀沉淀自己的代码: 之前很多页面的很多js脚本本分代码,更注重效果,事件久后没有发展 性能也是很关键 ...