Web和Java技术

JavaScript

Javascript 简称JS,是一种动态的弱类型脚本解释性语言,和HTML、CSS并称三大WEB核心技术,得到了几乎主流浏览器支持。

静态网页技术

早期的HTML设计之初,只能HTML,里面可以显示文字、图片,使用CSS来控制颜色、字体大小等。再后来引入了JavaScript就可以是网页可以人机交互、可以让元素动起来。但这都不是内容的动态变化。

动态网页技术

网页的内容是后端根据用户从浏览器端提交的请求不同,通过后台的程序将内容临时拼凑好,生成HTML,返回到浏览器端,通过浏览器端渲染呈现。常见的有ASP、JSP、PHP、Nodejs等。

开发语言分类

面向机器语言

  • 机器指令或对应的助记符,与自然语言差异太大
  • 汇编语言

面向过程语言

  • 做一件事情,排出个步骤,第一步干什么,第二步干什么,如果
    出现情况A,做什么处理,如果出现了情况B,做什么处理
  • 问题规模小,可以步骤化,按部就班处理
  • C语言

面向对象语言

  • 一种认识世界、分析世界的方法论。将万事万物抽象为各种对象
  • 类是抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合
  • 对象是类的具象,是一个实体
  • 问题规模大,复杂系统

按照与自然语言的差异分类

低级语言

  • 机器语言、汇编语言都是面向机器的语言,都是低级语言。不同机器是不能通用的,不同的机器需要不同的机器指令或者汇编程序

高级语言

  • 接近自然语言和数学语言的计算机语言

常见语言

C语言

  • 面向过程编程,只有函数
  • 操作系统编程、单片机编程等领域

C++语言

  • 底层高效开发
  • 面向对象,学习难度极大,目前标准发展有点乱

Java

  • WEB开发领域第一,延伸领域极多,库丰富
  • 大数据领域生态完整

Python

  • 入门门槛低,非专业程序员容易接受,他们有丰富的专业知识,但计算机专业知识不够
  • Python简洁的语法,不需要让他们关注背后的细节,可以让他们较容易的掌握并开始编程
  • 运维开发

Javascript

  • 网景公司发明的动态脚本语言,前端开发第一语言
  • JavaScript才是目前 前后端通吃的全栈语言
  • 前端执行的JS代码,需要从服务器端发送到浏览器端,在浏览器端使用JS引擎执行

Go

  • C语言之父Ken Thompson亲自参与设计
  • 静态编译型语言,但结合了动态解释性语言的特点,例如GC
  • 充分利用多核,适合高并发场景

WEB架构

后端资源分类:

静态资源

  • 图片:一旦创建好,图片文件不再改变。图片数目多,占用磁盘空间多,一般使用单独的图片服务器
  • HTML、CSS、JavaScript:这些文本是文本的,有前端工程师可以修改,但修改次数较少,一段时间都不变

动态资源

  • 内容有后台程序动态生成,比如查询数据库,将查询结果生成为HTML

PC端或移动端浏览器访问

  • 从静态服务器请求HTML、CSS、JS等文件发送到浏览器端,浏览器端接收后渲染在浏览器上
  • 从图片服务器请求图片资源显示
  • 从业务服务器访问动态内容,动态内容是请求后有后台服务访问数据库后得到的,最终返回到浏览器端

WEB App访问

  • 内置了HTML和JS文件,不需要从静态WEB服务器下载JS或HTML。为的就是减少文件的发送,现代前端开发使用的JS文件太多或太大了
  • 有必要就从图片服务器请求图片,从业务服务器请求动态数据

客户需求多样,更多的内容还是需要由业务服务器提供,业务服务器往往都是由一组服务器组成。

后台应用架构

单体架构

  • JSP、Servlet
  • 打包成一个jar、war部署
  • 服务器有开源的tomcat、jetty。商用的有Jboss、weblogic、websphere、glassfish商用的

Dubbo

  • 分布式服务框架
  • 将单体程序分解成多个功能服务模块,模块间使用Dubbo框架提供的高性能RPC通信
  • 阿里开源贡献给了ASF
  • 内部协调使用Zookeeper,实现服务注册、服务发现。有服务治理

Spring cloud 微服务

  • 将单体应用拆分为粒度更小的单一功能服务
  • RPC通信
  • 需要更高的运维水平,服务太多了需要服务治理

不同的应用架构,部署方式也有不同。

Java

组成

Java包含下面部分:

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

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

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

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

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中运行了。

JDK

JRE:它是Java Runtime Environment缩写,指Java运行时环境, 包含 JVM + Java核心类库
JRE=JVM+库

JDK=开发tools集+JRE=开发tools集+JVM+库
JDK:它是Java Development Kit,即 Java 语言的软件开发工具包。
JDK也就是常说的J2SE,在1999年,正式发布了Java第二代平台,发布了三个版本:
J2SE:标准版,适用于桌面平台
J2EE:企业版,适用于企业级应用服务器开发
J2ME:微型版,适用于移动、无线、机顶盒等设备环境

2005年,Java的版本又更名为JavaSE、JavaEE、JavaME。

Servlet、Jsp都包含在JavaEE规范中。

JDK7、JDK8、JDK11是LTS(Long Term Suppot)

JDK协议是JRL(JavaResearch License)协议

OpenJDK

OpenJDK是Sun公司采用GPL v2协议发布的JDK开源版本,于2009年正式发布


https://openjdk.java.net/projects/jdk6/

OpenJDK 7是基于JDK7的beta版开发,但为了也将Java SE 6开源,从OpenJDK7的b20构建反向分支开发,从中剥离了不符合Java SE 6规范的代码,发布OpenJDK 6。所以OpenJDK6和JDK6没什么关系。

OpenJDK使用GPL v2可以用于商业用途。

安装JDK

在Centos中,可以使用yum安装openjdk。

# yum install java-1.8.0-openjdk
# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)

本次使用Oracle官网的JDK 8的rpm安装

# yum install jdk-8u191-linux-x64.rpm
# java
# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

安装目录为/user/java下

Java全局配置

# vi /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/java/default
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
# . /etc/profile.d/jdk.sh