目录

一、目的

二、技术点介绍

1.主要技术点

(1)在新技术不断涌现的背景下,大型网站架构自创立以来经历了不断的重塑、优化、功能拓展,首先对大型网站架构的变迁历程进行管窥蠡测。

(2)在对上述架构变迁简单了解的基础上,下面主要总结基础技术,万丈高楼的搭建,其搭建工具无外乎几年前出现的技术,Java Web项目中涉及业务逻辑中的主要是数据库(JDBC体系为例)、Java EE技术、AJAX技术等,较为细节的技术点在后面的文章中会进行总结。


一、目的

作为一名在Java Web项目搭建方面有一定经验的码农,通过此篇文章整理一些技术点,希望对其他人而言有一定的借鉴价值,同时也巩固自己的所学,毕竟后端的技术点比较多,“笔记破万卷,代码如有神”也是很多技术大神不能否认的事实。

二、技术点介绍

后端技术庞杂,要抽丝剥茧捋出来一条好的思路把各个技术点串联起来是需要很深的功底的,说的太浅了没有营养,就像没有握住蛇的七寸,说得太深了则面对的群体就是有比较深厚技术功底的,资历尚浅的看了之后未免有点云里雾里的感觉,而我今天这篇文章,主要还是想站在一个有一丢丢知识积累的人来看待相关技术点。

首先明确的是作为一个Java Web项目,在基础科学没有发生巨变的背景下,目前的技术、架构是不会短时间发生太大变化的,但很多变化是身处洪流的我们应该有所察觉的,比如计算机内存成本的降低对于很多大型项目来说十分友好,从而应运而生了很多的新技术。互联网行业是攀爬更高技术阶梯的先锋,而代码工作者作为该行业内的一枚炮弹,不能只是从炮口出去还打偏了,只留下一个浅浅的弹坑,至少在变成炮灰之前,飞翔划过的空气、雨滴是值得的。

1.主要技术点

(1)在新技术不断涌现的背景下,大型网站架构自创立以来经历了不断的重塑、优化、功能拓展,首先对大型网站架构的变迁历程进行管窥蠡测。

  • 初代的架构是将提供服务的程序、文件、数据库放在同一台服务器上面,即在本机的Apach Tomcat上部署应用,同时连接本机的MySQL或是Oracle数据库。缺点:较高的访问量会导致服务器负载过高,响应速度降低。
  • 由应用服务器、文件服务器、数据库服务器构成,将不同的处理逻辑进行区分,一定程度上提高了并发量,能够为文件、数据提供更大的存储空间。缺点:在面对更大的访问量时,应用服务器和资源服务器的交互仍然是制约响应速度的瓶颈。
  • 使用缓存技术,缓存技术可以部署在在用户端(网页缓存等)或是服务器端(服务器内的本地缓存、远程缓存),此处讨论后者,缓存的使用减少了应用服务器与资源服务器的交互,进而提高了响应速度。缺点:在面对更大的访问量时,单台服务器的负载仍然过高,响应速度会降低。
  • 使用负载均衡技术,负载均衡服务器协调多个应用服务器,后者争夺访问资源服务器。缺点:在面对更大的访问量时,服务器争夺资源服务器,降低整体响应速度。
  • 对数据库进行读写分离,主数据库服务器对外提供数据写入服务,从服务器提供数据读取操作,一主多从。缺点:在较高的访问量时,对应用服务器的负载仍很高,对资源服务器的连接仍然是瓶颈。
  • 集群(物理范畴属于一个群体),增大资源投入以提高并发访问能力。缺点:仍然是访问量的增长对系统的挑战。附:微服务、分布式、集群三者关系
  • 使用CDN(网络加速技术)和反向代理网络(代理技术)更加高效地将用户请求分发到不同的集群上。缺点:用户访问量增加仍在压榨整个系统的运行效率。附:知乎关于CDN和反向代理的讨论
  • 分布式文件系统和分布式数据库系统(对文件、数据库依据业务进行拆分)进一步提高应用服务器对资源的获取速度。缺点:业务复杂性不断提高使得整个架构的复杂性、耦合度不断提高。
  • 使用NoSQL技术(应用服务器和资源服务器之间)、进行业务拆分(不同业务板块划分到不同的应用服务器)形成分布式服务。缺点:整个服务体系变得前所未有的庞大,各个业务之间的关系错综复杂,保障整个体系的健康有序运行挑战巨大。

总结来看:上述网络架构变迁的驱动力是电子商务等新兴产业在不断利用技术解决业务需求,但是可以结合身边实例来看,较高层次的架构是如今很多小微产业转型用不到的,后几种架构在大型国企等资金雄厚企业信息化转型的路上仍然获利空间丰厚,在较高层次掌握架构的变迁可以一定程度预见、规划自己的职业生涯。

附:简书用户分布式架构探讨

(2)在对上述架构变迁简单了解的基础上,下面主要总结基础技术,万丈高楼的搭建,其搭建工具无外乎几年前出现的技术,Java Web项目中涉及业务逻辑中的主要是数据库(JDBC体系为例)、Java EE技术、AJAX技术等,较为细节的技术点在后面的文章中会进行总结。

  • 1)JDBC体系(图片转载)

流程:在JDBC API中调用驱动程序管理器,驱动程序管理器针对不同的参数调用对应数据库的驱动程序(主要分为四类),由后者连接数据库并进行相应的操作。

基于代码进行上述过程实践:略

  • 2)Java EE技术

Java EE技术是利用Java进行Java Web项目搭建的理论和框架基础:主要表现在分层、组件两个思想。

其分层思想基于已有的软件工程思想,将一个系统按照功能分成了四个独立的层,即数据层(EIS层)、业务层、表示层和客户层。每一层又定义了相应的组件开发规范(数据层除外),通过组件来实现各层的功能。企业在开发应用系统时,可以根据系统的需求选择其中的几层进行组件开发,然后再将这些组件组合起来就可以实现系统的功能了。

组件可以定义为一种自治的、提供外部公共接口的、动态可用的事物处理过程,组件可以用来构建其他组件或应用程序。可见,组件是对可重用代码的一种封装,这些代码可以用来执行应用程序的一些功能。

组件与函数、对象有些相似,因为它们都是对一定功能的实现和封装,但是它们的区别也是明显的。组件与函数的区别在于函数是无状态的,即函数调用不能保存上一次调用结束后的任何信息,而组件则能够保存客户调用的信息;组件与对象的区别在于组件提供了动态可用的接口、属性和操作,而对象则是静态的。组件部署于容器中,后者为前者提供必要的运行环境。

Java EE核心技术包括JSP、Servlet 、JDBC和EJB(现在使用少)。

  • 3)Servlet技术

Servlet是运行在Web服务器端的java程序。Servlet基于HTTP协议,能动态地生成Web页面。Servlet运行在Web容器中,Servlet容器是一个编译好的可执行程序,它是web服务器与servlet间的媒介。负责管理servlet的生命周期及servlet与其他组件传递信息。

Java中相关接口、类之间的关系

  • Servlet接口:主要定义了Servlet的生命周期方法。

void init(ServletConfig config):被Servlet容器调用,用来初始化Servlet;

void service(ServletRequest req, ServletResponse res):被Servlet容器调用,让该Servlet可以接收和响应请求,该方法内调用了doGet()和doPost()方法;

doGet():对客户端GET方式提交进行响应;

doPost():对客户端POST方式提交进行响应;

void destroy():Servlet停止服务时被servlet的容器调用,进行对象销毁;

ServletConfig getServletConfig():返回一个包含该Servlet的初始化和启动参数的ServletConfig 对象;

String getServletInfo():返回这个Servlet对象的信息如作者,版本和版权。

  • ServletConfig:为Servlet提供了使用容器服务的若干重要方法。从一个Servlet被实例化后,对任何客户端在任何时候访问有效。一个Servlet的ServletConfig对象不能被另一个Servlet访问。

public String getInitParameter(String name):该方法返回Servlet指定初始化参数的值。这些初始化参数在web.xml文件中配置,如果指定参数不存在,返回null。

public Enumeration getInitParameterNames():该方法返回一个String类型的Enumeration列表对象,该对象包括Servlet的所有初始化参数名。如果Servlet没有初始化参数,则返回一个null的Enumeration列表对象。

  • HttpServlet :是 GenericServlet 类的子类。HttpServlet 类为 Servlet 接口提供了与HTTP协议相关的通用实现。在开发Java Web应用时,自定义的Servlet类一般都扩展HttpServlet类。

    • Servlet的生命周期

      生命周期里主要包含四个过程:创建实例-初始化(使用init()方法)-处理客户端请求(调用serveice()方法)-销毁 (destroy()方法)

      • Servlet Filter

        Servlet过滤器是服务器与客户端请求和响应的中间层组件。有非常强大的功能,在实际应用中也起到了很重要的作用,主要体现在以下几方面:

        对请求的访问进行预处理,如防止乱码、添加必要的安全信息等;

        对被过滤资源进行身份验证,实现一定程度上的权限控制;

        对请求进行合理的转发指派,降低服务器负载,提高服务效率。

  • Servlet 会话管理(Cookie和Session)

Cookie是Web服务器保存在用户硬盘上的一段文本,Web服务器将它作为响应头域的一部分发送到浏览器。浏览器收到包含Cookie的响应后,会把Cookie的内容用key-value对的形式写入到一个客户端专门存放Cookie的文本文件中(不同浏览器、OS存放位置不同)。之后,当再次访问同一网络时,浏览器将它原封不动的返回服务器可以再次读取Cookie中存放的数据。

使用这种方法,网站可以维护客户的连接。这种用途可以体现在如下几点:在电子商务中标识用户,实现短期跟踪用户;记录用户名和用户密码,允许用户下次自动登陆;定制站点,记录用户的偏好;定向广告,记录用户感兴趣的主题,并显示与之相关的广告。

Session是指在一段时间内,单个客户与web服务器的一连串的交互过程。在一个Session中客户可能会多次请求访问同一个网页,也有可能请求访问各种不同的服务器资源,例如,用户登陆购物网站后,可能浏览多件物品,其间与系统交互并连续访问多个不同的网页,直到最后确认购买并付款。整个过程就是 个Session,其间用户的状态需要跟踪并保持。

Session存在于服务器端,不在网络上传送。它的好处是可以用来记录客户端私有的信息,并且在时间范围内不会消失。Session的使用可以分为三个步骤:获得一个session;存储数据到session或从session读取数据;销毁session。

  • 4)JSP技术

JSP是基于Java语言,运行在服务器端的动态网页技术,采用浏览器/服务器开发模式。

JSP的特点

内嵌在HTML中:以较为简单直接的方式将程序代码内嵌在HTML中,降低了程序设计的难度。

丰富的内置对象:JSP中包含相关的对象与指令,提供了设计主从式网络程序的功能,简化了编写servlet程序的过程。

整合Java平台:JSP程序中可运用Java所提供的各类包,以这些包为基础,扩充了JSP程序的本身的处理范围与能力。

JSPASP相比

JSP和ASP相比具有两方面的优点。

动态部分用Java编写,而不是VB Script或其他Microsoft语言,不仅功能更强大而且更易于使用。

JSP应用可以移植到其他操作系统和非Microsoft的Web服务器上。

JSPServlet相比

JSP并没有增加任何本质上不能用Servlet实现的功能。但是,在JSP中编写静态HTML更加方便,不必再用 println语句来输出每一行HTML代码。

借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计专家进行HTML设计,同时留出供Servlet程序员插入动态内容的空间。

JSPJavaScript相比

JavaScript能够在客户端动态地生成HTML。虽然JavaScript很有用,但它只能处理以客户端环境为基础的动态信息。

另外,由于是在客户端运行,JavaScript不能访问服务器端资源,比如数据库、目录信息等。

JSP生命周期

  • 5)AJAX技术

AJAX是Asynchronous JavaScript and XML(异步JavaScript和XML)的缩写,是一种运用JavaScript和可扩展标记语言XML,在网络浏览器和服务器之间传送或接收数据的技术。

AJAX的工作原理相当于在用户和服务器之间加了一个中间层,使用户请求与服务器响应异步化,这样把以前的一些服务器负担的工作转交给客户端,利用客户端闲置的处理能力来处理,减轻服务器和带宽的负担。

使用传统的Web应用模型时,客户端用户行为触发一个连接到Web服务器的HTTP请求时,用户要等待服务器完成处理后,再返回一个HTML页面到客户端。

AJAX模型下,应用可以仅向服务器发送并取回必需的数据,在服务器和浏览器之间交换的数据大量减少,响应更快。同时很多处理工作可以在客户端完成,可以大大减少Web服务器处理时间,而在服务器处理时用户无须等待。

AJAX不是一项全新的技术,它只不过是一道包括JavaScript、XHTML、CSS、DOM、XML和XSTL、XMLHttpRequest在内的大杂烩。它使用XHTML和CSS标准化呈现,使用DOM实现动态显示和交互,使用XML和XSLT进行数据交换和处理,使用XMLHttpRequest进行异步数据读取,最后用JavaScript绑定和处理所有数据。

暂对Java Web架构变迁和相关技术进行上述探讨,后续细节和更多技术栈持续更新

关于Java Web项目的技术点探讨相关推荐

  1. Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)

    概述 web 服务器.项目.资源概述 web 服务器:可以被浏览器访问到的服务器 常见的 web 服务器: tomcat:中小型的服务器软件,免费开源,支持 JSP 和 Servlet apache ...

  2. 02)java web项目 使用spi技术 去除web.xml

    上一篇提到原理是使用了java的SPI技术 java web项目是在容器运行,如tomcat,weblogic等 了解Tomcat的SPI机制 Tomcat容器在启动时会扫描项目中META-INF/s ...

  3. 做一个完整的Java Web项目太难了,因为这些你不会!

    作者:元素侠Jason 链接:https://blog.csdn.net/JasonLiuLJX 最近自己做了几个Java Web项目,有公司的商业项目,也有个人做着玩的小项目,写篇文章记录总结一下收 ...

  4. maven + spring mvc 创建Java web项目

    本篇文章,我们会教你通过maven和spring mvc创建一个Java web项目.关于maven如何创建普通的Java项目,上一篇文章已经作了说明. 开发环境: 1.jdk 1.7 2.Maven ...

  5. Java Web项目,Android和微信小程序的初始页面配置

    Java Web项目 我们在Eclipse里开了Java Web项目之后,Run As Tomcat或者Apache服务器,本地运行,如果直接用http://localhost:8080访问项目,会发 ...

  6. 做一个完整的Java Web项目需要掌握的技能

    转自:  https://blog.csdn.net/JasonLiuLJX/article/details/51494048 ------------------------------------ ...

  7. Java Web项目的保存和刷新

    如何配置计算机以保存并刷新Java Web项目? 当您向开发人员提出此问题时,答案以"哦,好吧--"开头,并以某种可行的方式继续描述. 每个人都有自己的方式. 首先–为什么需要这个 ...

  8. 使用Intellij idea新建Java Web项目(servlet) 原理及初步使用

    准备 JDK       (配置JDK_HOME\bin   和 CLASSPATH)   注:JDK8下载已经需要注册了,请使用JDK11(现在是官方长期支持的版本)     对于我们新手来说,JD ...

  9. sts中给项目添加服务器,sts创建java web项目

    sts创建java web项目 [2021-02-03 01:57:35]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(" ...

最新文章

  1. windows auzre 笔记-1
  2. python修改类属性值_python编程入门到实践:直接修改属性的值和通过方法修改属性的值...
  3. freebasic 编译linux,免费BASIC编译器下载
  4. 算法题26 复杂链表的复制
  5. boost::geometry::box_view用法的测试程序
  6. mysql编辑前200行_巧妙使用SQL Server编辑前200行功能
  7. Lucene.Net 2.3.1开发介绍 —— 一、接触Lucene.Net
  8. 留言列表模板HTML代码
  9. 可视化实验五:大数据可视化工具—NodeXL
  10. 微信推送封面尺寸_微信公众号封面图片尺寸是多少?为什么显示有大图有小图?...
  11. 线性代数——向量的乘法计算
  12. mac php fpm.pid,php-fpm的常用配置和优化
  13. web 视频演示,MP4小视频免费下载
  14. 算法_数学问题_Question10_马克思手稿中的数学(java实现)
  15. 获取flask的app.route装饰器所有url
  16. 乙炔黑-离子液体复合修饰玻碳电极(AB-ILs/GCE)|离子液体修饰改性的多壁碳纳米管(MWNTs)
  17. 在线淘礼金免单采集网网站源码
  18. 百度api识别身份证信息
  19. [弱校联萌2016]2016弱校联盟十一专场10.5
  20. 计算机房系统进入方法,学校机房电脑系统恢复的方法

热门文章

  1. python中byte类型_详解python string类型 bytes类型 bytearray类型
  2. 基于二代征信报告的信用评估模型实践
  3. 网易两份凉拌面「面经」
  4. 计算机组装和维护_如何构建自己的计算机,第二部分:组装在一起
  5. Sams Teach Yourself MySQL in 10 Minutes
  6. python闰月计算_Python实现150年公历农历换算
  7. mysql 夸机房_Mysql跨机房同步方案
  8. 第四篇:mig IP的仿真
  9. 类似qq聊天表情实现
  10. youtube和QQvideo的视频网页引用代码干嘛那么复杂!!