WEB 架构和 Java 网页技术|学习笔记

简介: 快速学习 WEB 架构和 Java 网页技术

开发者学堂课程【Tomcat 服务器入门详解WEB 架构和 Java 网页技术】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/654/detail/10844


三、Java

1.历史

Java 原指的是印度尼西亚的爪哇岛,人口众多,盛产咖啡、橡胶等。

Java 语言最早是在1991年开始设计的,期初叫 Oak 项目,它初衷是跑在不同机顶盒设备中的。

1993网景公司成立。Oak 项目组很快他们发现了浏览器和动态网页技术这个巨大的市场,转向 WEB 方向。并首先发布了可以让网页动起来的 Applet 技术(浏览器中嵌入运行 Java 字节码的技术)。

在1995年,一杯爪哇岛咖啡成就了 Java 这个名字。

Sun 公司第一个 lava 公开版本1.0发布于1996年。口号是“一次编写,到处运行"(Write once,Runanywhere),跨平台运行。

1999年,SUN 公司发布了第二代 Java 平台 (Java2)。

2009年4月20日,Oracle 甲骨文公司宣布将以每股9.50美元,总计74亿美金收购SUN (计算机系统)公司。2010年1月成功收购。

2010年,Java 创始人之一的 James Gosling 离开了 Oracle,去了 Google。

2010年8月13日,Oracle 在加利福尼亚地方法院起诉 Google 侵犯版权和专利权。Oracle 声称 Google 侵犯了 Java 37个 API 和部分专利。地方法院的陪审团认为未侵犯专利,且 API 无版权。2016年5月26日,地方法院二审陪审团认定未侵犯版权,对37个 JAVAAPI 的重新实现受到合理使用的保护。

2017年 Oracle 上诉美国联邦巡回上诉法院,2018年3月X7日,判决 Oracle 胜诉,Google 应赔偿近90亿美金。

2019年1月 Google 想让美国最高法院撤销联邦法院裁决。谷歌表示裁决是"对软件业的毁灭性一击"”。现任特朗普政府支持 Oracle 公司,但微软、Mozilla、红帽支持 Google。目前案件已经受理,并将审理。

此案如果 Oracle 胜诉,将在美国形成判例,将深远广泛影响软件业。例如 POSIX接口,是商用系统 UNIX 的兼容接口规范。

2.组成

Java 包含下面部分:

语言、语法规范(开源的)。关键字 if、for、class(为语言成分,使用其来进行编程)等等

编写源代码 source code(将基础类库进行加工之后,就是源代码)

依赖库,标准库(Java 自身提供的库,又叫基础类库,好比做菜并不需要自己种蔬菜,只需要买回所需食材即可,买回的食材为半成品,即此处的核心类库)、第三方库(如 Apache 中的类库,就可以直接使用)。底层代码太难使用且开发效率低,封装成现成的库,好比净菜直接可以烧菜了,但是什么口味程序员自己定

JVM 虚拟机(基于核心类库编写源代码后运行的场所就在 JVM上)。字节码运行在 JVM 之上。将源代码编译为二进制的,并非 exe 的,是一种中间状态编码,可以被虚拟机识别。

虚拟机意为将其当做物理机,当物理机要跑一个二进制代码的信机器码格式,但此处机器码仅对于虚拟机的格式,在此的机器码叫做中间代码,又因其是二进制的,所以取名为字节码(Byte-code)。在此 Java 没有虚拟机(解释器)就无法运行,并非是就地编辑,需要一个中间代码。又名字节码。同时在v8引擎之前许多高级语言,如:JavaScript,java,php 都是在虚拟机上运行,GO 语言除外,为了性能,仅仅将内存回收交给垃圾回收。

写一遍到处运行,指的是先使用记事本等编写代码,然后编译生成 class,之后若想在 window 系统上运行就放到 window 虚拟机上,即按不同 CPU 和操作类型选择虚拟机,java 并非直接运行 .class 而是将其放到平台的虚拟机上。再任何平台上编译后字节码一样,所谓的不一样应该是 window、Linux 和 mac 的虚拟机有所差别。把字节码在上面运行,虚拟剧会将字节码转化为符合本地 cpu 运行的指令集。

 

图片5.png图片6.png

由于操作系统 ABI (应用程序二进制接口)不一样,采用编译方式,需要为不同操作系统编译二进制程序。

被淘汰的 Applet 技术:

有一个浏览器,在其中装一个 java 虚拟机(含义 jre),在其中嵌入一个 java 运行的代码,但是并非 .java 而是 .class,而 .class 在服务器端,浏览器发起请求到服务器端后会被编译为 class 然后再返回浏览器中的虚拟机运行环境中运行,其中存在较大的安全性,所以被淘汰。

1995年,Java 发布 Applet 技术,Java程序在后台编译成字节码,发送到浏览器端,在浏览器中运行一个 Applet 程序,这段程序是运行在另外一个 JVM 进程中的。

但是这种在客户端运行 Java 代码的技术,会有很大的安全问题。1997年 CGl 技术发展起来,动态网页技术开始向后端开发转移,在后端将动态内容组织好,拼成 HTML 发回到浏览器端。


四、Java 动态网页技术

1.servlet

最早并没有动态网页技术,而有 servlet。

本质就是一段 Java 程序

代码如下:

//导入需要使用的包和库

import java.io.* ;

import javax.servlet.* ;

import javax.servlet.http.*;

//类扩展为 HTTP 的 Servlet

public class Helloworld extends HttpServlet {

//初始化

private String message;

public void init() throws ServletException

{

message = "Hello world";

}

//一个 http 请求接受之后,会找到 get 方法后请求以下 doGet 方法。将来的信息封装到 request 中,加工后的信息即响应后的报文放在 response。

public void doGet(HttpservletRequest request,

HttpservletResponse response)

throws ServletException,IOException

{//但并非都需要更改,更改其中的响应状态码等等即可。

response . setContentType( "text/html");//设置响应报文的类型,将得到的 html 链接放在响应报文的头部

Printwriter out = response.getwriter();//编写 Printwriter类,向缓存区写,从 response 中拿一个 Writer 对象

out.printin("

" + message + "

");//调用其打印,向 writer 对象中写入字符串"

" + message + "

"

}

//到此全部完成,我们只需要更改状态码,其余的会自动封装。以上为一个 get 请求到来后,直接调用函数,而 throws ServletException,IOException 中的内容全部动态实现。

若这块数据要调用数据库,也可以直接实现先调用业务层,再去调用数据访问层,数据访问再去调用 model,最后返回再将数据嵌入,类似于字符串的拼接。

//在此可以发现,不论函数多么复杂,最后都是字符串的拼接,因为 http 是纯文本的。

public void destroy()

{

}

问题

在 Servlet 中最大的问题是需要一行一行打印 HTML 输出和 Java 代码混在一起,太过繁琐,同时在改版需要等待美工完成后更改代码,多次重复的更改使得效率大大降低。

如果网页布局要调整,就是个噩梦。

2. jsp (Java Server Pages)

为了更加简单,提高效率就出现了 jsp。在 jsp 不必再写过多的 print 而是采用提供一个 HTML,把它变成一个模板,也就是在网页中预留以后填充的空,以后就变成了填空了。

<%page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

< !DOCTYPE html>

jsp 例子

动态可更换的代码,后面的内容是服务器端动态生成字符串,最后拼接在一起。在此基本上都是调用函数,不使用视图层,大多使用业务逻辑层

<%  

out.print1n("你的 IP 地址“ +request.getRemoteAddr( ));

%>

改进:

jsp几乎都是填充工作,可以将业务逻辑层先写好,之后美工再将填充模版合在一起,比之前的方法更加简单。

Jsp本质仍然是 servlet,仅仅不过是将其通过工具来实现 print,省略了手写。

在之后的 AJAX 中真正实现了前后分析,页面也不再编写完全交给前端,后端纯粹变为编写内容,当调用接口时就给与 JSON,不再关心放置的场所。

而<% out.print1n("你的 IP 地址“ +request.getRemoteAddr( ));

%>也不再是 Java 代码,会变为前端在浏览器中运行的js 。

图解补充

image.png

                 

           浏览器

                                                                                         Tomcat

 

浏览器当中会在 nginx 中部署 html、css 和 js 三样,当发起一个 url 请求访问nginx 发现只访问静态时,就会将静态的 html5 拖回浏览器,同理的其中还要访问css 和 js,有了 js 后就可以发起新的 ajax 得到 JavaScript 代码后,有可能是直接发起,也可能为正在准备中的等待模式会发出请求,请求到达 Nginx 后会再来到业务服务器去请求代理。

找到业务服务器:tomcat,tomcat 因为是 Java 编写的,回去访问数据库,然后将数据库内容转化为 json,再给 neginx 返回给浏览器的 Ajax 再将其插入到 html5 中。在此就不需要任何的页面和 html 文件。都存在 nginx,同时其中的 nginx 和 tomcat 一个为前端一个为后端,称为前后端分离。

完成过程

发起一个请求访问到 tomcat 中的j sp,jsp 先将模板找到,发现需要数据,先在后访问将数据找到插入进来形成一个大的 html 的 string,将字符串在服务器端将其封装。

与之前的前后端分离不同,前后端分离是由客户端插入到网页中去,为动态变化。

JSP 是基于 Servlet 实现,JSP 将表现(html) 和逻辑分离,这样页面开发人员更好的注重页面逻辑层即可,最后将数据调用即可,表现力更好服务客户。

如何转换

JSP 先转换为 Servlet 的源代码 .java 文件(Tomcat 中使用 Jasper 转换成 .java),然后再编译成 .class 文件,最后就可以在 JVM 中运行了。

相关文章
|
1月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
7天前
|
自然语言处理 JavaScript Java
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS架构介绍
HarmonyOS采用分层架构设计,从下至上分为内核层、系统服务层、框架层和应用层。内核层支持多内核设计与硬件驱动;系统服务层提供核心能力和服务;框架层支持多语言开发;应用层包括系统及第三方应用,支持跨设备调度,确保一致的用户体验。
123 81
|
25天前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
146 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
60 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
1月前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####
|
2月前
|
Cloud Native 持续交付 云计算
云原生技术在现代IT架构中的转型力量####
本文深入剖析了云原生技术的精髓,探讨其在现代IT架构转型中的关键作用与实践路径。通过具体案例分析,展示了云原生如何赋能企业实现更高效的资源利用、更快的迭代速度以及更强的系统稳定性,为读者提供了一套可借鉴的实施框架与策略。 ####
28 0
|
2月前
|
运维 Kubernetes Docker
深入理解容器化技术及其在微服务架构中的应用
深入理解容器化技术及其在微服务架构中的应用
68 1
|
2月前
|
监控 Java 微服务
从零构建微服务架构:一次深度技术探索之旅####
本文作为一篇深度技术分享,引领读者踏上自底向上搭建微服务架构的征途,旨在通过实战经验剖析,揭示微服务转型背后的技术挑战与解决方案。不同于常规摘要仅概述内容,本文摘要将直接以故事化手法,简述作者从单体应用困境出发,逐步迈向微服务化的心路历程,涵盖关键决策点、技术选型考量及实践收获,激发读者对微服务架构设计与实现的浓厚兴趣。 ####
|
2月前
|
Cloud Native 持续交付 云计算
深入理解云原生技术及其在现代IT架构中的应用
在数字化浪潮的推动下,云原生技术已成为企业转型的关键。本文将通过浅显易懂的语言和生动的比喻,带领读者探索云原生的核心概念、优势以及如何在企业中实现云原生架构。我们将一起揭开云原生的神秘面纱,了解它如何助力企业快速适应市场变化,提升业务的灵活性和创新能力。
|
2月前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
41 3