走进JavaWeb技术世界1:JavaWeb的由来和基础知识

简介: 本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.com 本文是微信公众号【Java技术江湖】的《走进JavaWeb技术世界》其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有侵权,请联系作者。

本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

https://github.com/h2pl/Java-Tutorial

喜欢的话麻烦点下Star哈

文章首发于我的个人博客:

www.how2playlife.com

本文是微信公众号【Java技术江湖】的《走进JavaWeb技术世界》其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有侵权,请联系作者。

该系列博文会告诉你如何从入门到进阶,从servlet到框架,从ssm再到SpringBoot,一步步地学习JavaWeb基础知识,并上手进行实战,接着了解JavaWeb项目中经常要使用的技术和组件,包括日志组件、Maven、Junit,等等内容,以便让你更完整地了解整个JavaWeb技术体系,形成自己的知识框架。为了更好地总结和检验你的学习成果,本系列文章也会提供每个知识点对应的面试题以及参考答案。

如果对本系列文章有什么建议,或者是有什么疑问的话,也可以关注公众号【Java技术江湖】联系作者,欢迎你参与本系列博文的创作和修订。

什么是 Java Web

如果你是70、80后的程序员,你一定要看一看这篇文章,保证满满的回忆。如果你是90后,那你更要看看这篇文章,因为你能找到java web发展的历史。

言归正传,Java语言能长期霸占语言排行榜一个重要的原因就是强大的web开发能力,web开发是java的基石(在EJB推出的时候当时的Sun用基石来描述EJB),所以了解java web开发原理是非常重要的。如果仅仅跟大家聊java web开发原理未免有点单薄,今天我将把java web开发包含的主体内容跟头条的读者一起分享一下(一直计划写关于java web的文章,一直也没时间写,今天就当时开个头吧)。

Web开发的历史

web开发的历史其实并不久远,要搞清楚java web开发的特点(主要是优点),首先要了解web开发的历史(简单的回归一下)。早期的web是非常简单的结构,用户发出请求(request),服务器给出回应(response),这个时期的web应用,我们称为web site(网站),特点是一些列静态内容的集合。看一个图示:

图中的服务器保持了一系列html脚本来响应用户的请求,可以说这个时期的web应用还是比较简单的,但是却确立了两个重要的对象:一个request(代表请求),另一个是response(代表回应)。如果把web开发的历史比喻成一部美国大片的话,那么request和response绝对是这部大片的那女主角,而且每一部都是不可或缺的主角(简单的说就是死不了)。

看到这个图,不知道第一批从事web开发的80后是否和我一样,已经有点感触了,当年为了搞清楚这个结构,曾经连续多少个通宵做实验(实验环境比较恶劣)。没关系,这仅仅是个开始,我想当你看完这篇文章的时候,你会泪流满面的(相信我)。为了配合一下这张结构图,在web发展过程中,有一个小插曲,就是在web site向web application发展的过程中,出现了一个小“玩意儿”,就是applet,很多人了解java都是从使用java applet开始的(70,80后那一批程序员)。当时风靡校园(我当时在读大一)的网易聊天室,哎呀那个火啊(大家回忆一下你在学校机房上网时的兴奋),这个聊天室就是采用了applet构建的,当时applet给静态页面一个动态交互的可能,着实火了一段时间。现在知道applet的程序员,你已经暴露年龄了。看一张图片吧:

我想这个时候,泪点低的70、80后已经有点湿润了吧。湿润的,自觉在这里停留一分钟,对着屏幕来张合影,发个朋友圈。

过了这个插曲,真正的三层web开发来了,一个里程碑式的web处理方式CGI,看一张图:

CGI的推出,使得web开发正式进入了动态处理时代,服务器能与客户有真正意义上的交流了,有能存储数据的数据库了,虽然CGI的使用周期并不长,但是一定要纪念一下它,毕竟它是里程碑式的变革。java web技术正是踩着CGI的肩膀来到了广大程序员的面前,java web解决了CGI的性能问题。CGI是以进程为单位管理请求的,而java web则是以线程为单位,处理能力更强,占用的资源更少,这个核心的组件就是Servlet。看一组资源占用图,先看CGI的:

再看一下java web中的servlet资源图:

孰优孰劣一目了然,Servlet解决相同数量的请求,却占用较少的系统资源,这就是为什么广大程序员抛弃了CGI转向java web的原因。

另外,开发一个Servlet并不复杂,看一个Servlet编写的HelloWorld应用:

这个代码结构是不是很亲切,是不是很有Coding的感觉,其实Servlet就是个java 类而已,只不过增加了几个限制而已,所以开发一个Servlet并不复杂。然后就是把它部署到web服务器上(Tomcat这个老人家现在身体依然硬朗!),然后就等待客户的请求就可以了。这是Servlet的三层部署图:

java web开发的技术体系还包括javabean和jsp,采用MVC结构来组合这三个技术是java web开发的基础内容,先看一下MVC的功能图:

再看一下组合使用Servlet+javaBean+JSP的Model2开发结构:

这个结构是标准的Java web开发结构,现在是不是很少能看到这么“干净”的描述图了?以上就是标准的java web 开发的历史描述,当然这并不是说这些内容已经过时了,反而它一直是官方的标准解决方案。只不过web发展迎来了另一个阶段,繁荣的开源架构时代来了。。。

开源框架时代

这个时代的典型代表就是Struts、Spring和Hibernate,简称SSH。

严格的说,这部分内容并不是官方解决方案,但是这些方案却得到了广大程序员的拥护,一方面原因是EJB的方案太重了,另一方面开源架构使用起来非常方便和灵活,所以从03年以后这些开源框架得到了普通的使用。

下面我简单描述一下这三个框架:

Struts基于MVC结构的解决方案,分为struts1(已经淘汰了,用过Struts1的程序员已经老了)和struts2两个版本,和Python一样,这两个版本不兼容,目前Struts2的最新版本是2.5.14.1,简单的说Struts就是构建了现成的MVC框架,程序员往这个框架里加代码就可以了,使用起来非常方便。

Hibernate框架完成了面向对象与面向关系的映射,让java程序以面向对象的方式操作面向关系的数据库。整体结构基于DAO进行扩展,很多操作只需要配置一下就可以了,极其方便。

Spring提供了javaBean的容器,池化了javabean,提高了性能,而且核心代码不到2M,小巧且强大。

关于这三个框架我在头条将写专门的文章介绍,今天就不再进行扩展了。

今天看到这个问题,有感而发,原来我们80后真的老了,80后的程序员,看到这篇文章,有没有所感触?关注我吧,我们一起回忆,再一起继续奋斗!

Java Web基础知识

一、HTTP协议

HTTP(超文本传输协议),它是一种主流B/S架构中应用的通信协议。具有以下特点:

1、无状态

服务端不会记录客户端每次提交的请求,服务器一旦相应客户端之后,就会结束本次的通信过程。客户端下一次的请求是一个新的 连接,和上一次通信没有任何关系。

2、简单灵活

HTTP是基于请求(request)和响应(response)的模型

3、支持客户端与服务端

支持主流的B/S架构的通信以及C/S架构的通信。

注意:C/S架构可选的协议有多种,例如:TCP/IP,UDP,HTTP

​ 而B/S架构通常只支持HTTP协议

二、服务器

1、概念

服务器通常由硬件和软件部分构成,统一对用户提供多种不同的服务。

1、硬件:包括响应的CPU、内存、磁盘等等

2、软件:包括操作系统、运行环境、服务器软件、数据库等等

2、web服务器

web服务器是提供服务端程序运行的一个环境,它本身也是一个软件。

例如:将我们编写HTML文件放入到web服务器中,那么外界就可以通过浏览器访问我们的html页面

常见的web服务器有Apache,Tomcat、Jetty、Nginx等等。

而Tomcat、Jetty这些web服务器更准确的说是一个Servlet容器。

三、JavaWeb项目结构

项目根目录,例如:myweb、ch01     通常存放静态资源文件(如:html等等)
  WEB-INF   这个目录是当前项目私有的一个文件夹,只能提供给项目内部访问,对于客户端来说是访问不到了,通常这个目录下存放的是Java源代码、编译后的字节码文件以及Servlet的核心配置文件web.xml
    src 存放java源代码的目录
    classes 存放编译后的字节码文件
    lib lib目录存放当前项目所需要的jar文件
    JSP 用于存放JSP动态页面
    web.xml 项目的配置文件,用于配置Servlet的请求映射、过滤器、监听器等等信息。每一个web项目都对应一个web.xml配置文件
  META-INF   配置应用程序、扩展程序、类加载服务等等

参考文章

https://blog.csdn.net/shanhanyu/article/details/80515791
https://www.jianshu.com/p/d9b770a78da1
https://www.cnblogs.com/albertrui/p/8427661.html
https://blog.csdn.net/qq_41911570/article/details/83279327

微信公众号

个人公众号:程序员黄小斜

微信公众号【程序员黄小斜】新生代青年聚集地,程序员成长充电站。作者黄小斜,职业是阿里程序员,身份是斜杠青年,希望和更多的程序员交朋友,一起进步和成长!专注于分享技术、面试、职场等成长干货,这一次,我们一起出发。

关注公众号后回复“2020”领取我这两年整理的学习资料,涵盖自学编程、求职面试、算法刷题、Java技术学习、计算机基础和考研等8000G资料合集。

技术公众号:Java技术江湖

微信公众号【Java技术江湖】一位阿里 Java 工程师的技术小站,专注于 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!

关注公众号后回复“PDF”即可领取200+页的《Java工程师面试指南》强烈推荐,几乎涵盖所有Java工程师必知必会的知识点。

相关文章
|
5天前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
18 7
|
7天前
|
移动开发 前端开发 Java
过时的Java技术盘点:避免在这些领域浪费时间
【10月更文挑战第14天】 在快速发展的Java生态系统中,新技术层出不穷,而一些旧技术则逐渐被淘汰。对于Java开发者来说,了解哪些技术已经过时是至关重要的,这可以帮助他们避免在这些领域浪费时间,并将精力集中在更有前景的技术上。本文将盘点一些已经或即将被淘汰的Java技术,为开发者提供指导。
38 7
|
3天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
13 3
|
3天前
|
SQL 监控 Java
Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
7 2
|
5天前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
在Java应用开发中,数据库操作常成为性能瓶颈。频繁的数据库连接建立和断开增加了系统开销,导致性能下降。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接,显著减少连接开销,提升系统性能。文章详细介绍了连接池的优势、选择标准、使用方法及优化策略,帮助开发者实现数据库性能的飞跃。
16 4
|
3天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
8 1
|
3天前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
12 1
|
5天前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
21 2
|
7天前
|
前端开发 Java API
过时Java技术的退役:这些技能你不再需要掌握!
【10月更文挑战第22天】 在快速变化的技术领域,一些曾经流行的Java技术已经逐渐被淘汰,不再适用于现代软件开发。了解这些过时的技术对于新手开发者来说尤为重要,以避免浪费时间和精力学习不再被行业所需的技能。本文将探讨一些已经或即将被淘汰的Java技术,帮助你调整学习路径,专注于那些更有价值的技术。
21 1
|
8天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。