Tomcat(一)web技术和JAVA

By | 2019年 11月 23日

1. web技术

一个进程更像是资源的容器,真正干活的是线程。进程中可以有多个线程,cpu是分时的,cpu将时间片分配给进程下的线程,线程的时间片用完之后,cpu切换到另一个进程。只不过时间片非常短,感觉上就是同时在运行一样。

每一个运行的程序都是一个进程,每一个进程都是这么想的:我将独占整个操作系统,所有的IO都应该为我服务。同一个进程内,多个线程之间共享进程的资源。进程与进程之间通讯就没有这个方便了。

ip地址是主机之间路由,局域网是mac地址,到了主机要寻找某个进程,就需要进程绑定某个端口,通过端口来与该进程通信,如果找不到该端口,则通信失败。

客户端与服务器往往都是在不同主机上,它们属于不同的进程,这些进程需要通信,跨主机的进程间通信需要使用网络编程。最常见的网络编程接口:socket

socket称之为套接字,翻译过来为插座,说的就是网络通讯的两端。一端被动接收另一端请求心提供计算和数据的称为服务器(Server),另一端发起请求称为客户端(Client),这种编程模式称为Client/Server编程模式,简称C/S

1.1. http

1990年,http协议和浏览器诞生。在应用层使用文本跨网络在不同进程间传输数据,最后在浏览器渲染出来。起初并没有浏览器这个概念,作者只是为了http协议而开发的客户端,用来演示http协议的传输。

网页是怎么到浏览器的呢?首先要建立TCP连接,客户端发起url请求,也就是浏览器的那串地址,服务器根据url定位到在磁盘上的html文件,读取html文件到内核空间,再复制到用户空间,进程获得html文件,发到发送缓冲区,通过网络发送出去。浏览器收到响应报文,并解析html呈现在浏览器上。

1.2. 动态网页与静态网页

静态网页:根据用户在浏览器输入的url(网址),寻找存放在服务器磁盘上的HTML文件并返回给客户端,浏览器对该html文件进行渲染最终呈现。

动态网页:相对于静态网页而言的。当浏览器请求服务器的某个页面时,服务器返回的并不是直接存放在磁盘上的html文件,而是一些变量、函数,通过函数查找数据库,返回的内容再发送给浏览器,最终到浏览器的内容还是html文本,再由浏览器进行渲染。最终呈现的效果是一样的,只不过换了一种方式。

通用网关接口(cgi),通过浏览器输入url直接映射到一个服务器端的脚本程序执行,这个脚本可以查询数据库并返回结果给浏览器端。这种将用户请求使用程序动态生成的技术,称为动态网页技术。

先后出现了ASP、PHP、JSP等技术,这些技术的使用不同语言编写的程序都运行在服务器端,所以称为WEB后端编程。有一部分程序员还是要编写HTML、CSS、JavaScript,这些代码运行在浏览器端,称为WEB前端编程。合起来称为Browser/Server编程,即B/S编程。

浏览器内的两大核心:渲染引擎和js引擎

2. 开发语言

语言:人与人交流的沟通表达方式
计算机语言:人与计算机之间交互沟通的语言

2.1. 语言分类

  • 面向机器语言
    • 机器指令或对应的助记符
    • 汇编语言
  • 面向过程语言
    • 做一件事情,列出个步骤,第一步做什么,第二步做什么,如果A则B等等
    • 问题规模小,可以步骤化,按部就班
    • 如C语言
  • 面向对象语言
    • 一种认识世界、分析世界的方法论,将万事万物抽象为对象
    • 类是抽象的概念,是万事万物的抽象,是一类事物的共同特征
    • 对象是类的具象,是一个实体
    • 问题规模大,复杂系统

2.2. 常见语言

  • C语言
    • 面向过程编程,只有函数
    • 操作系统编程,单片机编程等领域
  • C++
    • 底层高性能开发
    • 面向对象,学习难度极大
  • java
    • web开发领域第一,延伸领域极多,库丰富
    • 大数据领域生态完整
  • python
    • 入门门槛低,非专业程序员容易接受
    • python语法简洁,
    • 运维开发
  • javascript
    • 网景公司发明的动态脚本语言,前端开发第一语言
    • javascript是前后端全吃的全栈语言
    • 前端执行的js代码,需要从服务器发送到浏览器端,在浏览器端使用js引擎执行
  • go
    • c语言之父参与设计
    • 静态编译型语言,但结合了动态解释性语言的特点
    • 充分利用多核,适合高并发场景

2.3. 后端资源分类

  • 静态资源
    • 图片:一旦创建好,图片文件不再改变。图片数目多,占用磁盘空间多,一般使用单独的图片服务器
    • HTML、CSS、JavaScript:这些文本是文本的,有前端工程师可以修改,但修改次数较少,一段时间都不变
  • 动态资源
    • 内容有后台程序动态生成,比如查询数据库,将查询结果生成为HTML

2.4. 后台应用架构

  • 单体架构
    • jsp、servlet
    • 打包成一个jar、war部署
    • 服务器有开源的tomcat、jetty。商用的有jboss、weblogic、websphere、glassfish
  • Dubbo
    • 分布式服务框架
    • 将单体程序分解成多个功能服务模块,模块间使用Dubbo框架提供的高性能RPC通信
    • 阿里开源贡献给了ASF,目前已经是apache的顶级项目
    • 内部协调使用zookeeper,实现服务注册、服务发现、服务治理
  • Spring cloud 微服务
    • 将单体应用拆分为粒度更小的单一功能服务
    • RPC通信
    • 需要更高的运维水平,服务太多了需要服务治理

3. JAVA

历史发展

1991年开始设计,起初叫Oak项目,它的初衷是跑在不同机顶盒设备中

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

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

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

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

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

2010年1月成功收购。
2010年,Java创始人之一的James Gosling离开了Oracle,去了Google。

3.1. 组成

Java包含下面部分:
1. 语言、语法规范:关键字if、for、class等等
2. 源代码:source code
3. 依赖库,标准库、第三方库。底层代码太难使用开发效率低,封装成现成的,好比净菜直接可以烧了,但是什么口味程序员自己定
4. JVM虚拟机。字节码运行在JVM之上java code(.java)

byte code(.class)

JVM
↙↓↘
win linux mac

3.2. Java动态网页技术

servlet
本质就是一段Java程序

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {
    private String message;
    public void init() throws ServletException
    {
        message = "Hello World";
    }
    public void doGet(HttpServletRequest request,HttpServletResponse response)
    throws ServletException, IOException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<h1>" + message + "</h1>");
    }
    public void destroy()
    {
    }
}

在Servlet中最大的问题是,HTML输出和Java代码混在一起,如果网页布局要调整,就是个噩梦。

jsp(Java Server Pages)
提供一个HTML,把它变成一个模板,也就是在网页中预留以后填充的空,以后就变成了填空了。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
<%
out.println("你的 IP 地址 " + request.getRemoteAddr());
%>
</body>
</html>

JSP是基于Servlet实现,JSP将表现和逻辑分离,这样页面开发人员更好的注重页面表现力更好服务客户。

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

JRE:它是Java Runtime Environment缩写,指Java运行时环境, 包含 JVM + Java核心类库
JDK:它是Java Development Kit,即 Java 语言的软件开发工具包。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注