编程语言分类

1、系统级:C, C++, go, erlang 

2、应用级:C#, Java, Python, Perl, Ruby, php

编程语言的类别:

        指令+数据

                1、面向过程:以指令为中心,围绕指令组织数据;

2、面向对象:以数据为中心,围绕数据组织指令;

虚拟机类型:

1、java虚拟机:jvm   

        2、Python虚拟机: pvm 

开发动态网站的应用框架:

1、asp .net, jsp

思考与引申:

1、如果需要在不同的平台上都能使用开发好的java程序,需要在不同的平台上都安装java虚拟机,用以提供java运行的环境。虚拟机虚拟了主机运行时需要的各种库,java需要自己的类库,在这个类库的环境中运行自己的程序。这个虚拟机系统在不同平台有不同的版本。


2、如果在其中一种平台上的库所提供的API遵循POSIX规范的话,那么在这个平台上开发的源代码,拿到不同的平台上也是可以编译运行的。如果在A平台编译成二进制程序后,拿到B平台上是不能运行的,因为它们的ABI不一样。



动态网站:

客户端动态:服务器的源代码在客户端运行

服务器动态:服务器的源代码在服务器端运行,通过CGI(通用网关接口)技术实现。

释义:CGI

        运行在前段的web服务器收到来自客户端的请求后,把请求的uri发送给后端的应用程序服务器,调用应用程序服务器在服务器端         运行以后,把生成的结果返还给客户端,这种技术称之为CGI技术。

webapp server:

        CGI早期实现都是通过在后面运行一个服务器,我们称之为webapp server,基于不同的框架,需要在后台安装不同的服务程序。

jsp: tomcat, jboss, jetty

                     注:tomcat服务可以和前端的html服务器进行交互,交互成可以使用http协议或专用的CGI协议

php: php-fpm



Java编程语言的历史发展:

SUN, James Gosling, Green Project, Oak, Java, SunWorld 

1995: Java 1.0, Write Once, Run Anywhere 注:一次编写,到处运行

1996: JDK (Java Development Kit),包含一个JVM(Sun Classic VM)

JDK 1.0: JVM, Applet, AWT

1997:JDK 1.1    注:JDK java开发工具箱

JAR文档格式、JDBC、JavaBeans

1998:JDK 1.2

Sun把Java技术分拆为三个方向:Java 2

J2SE: Standard Edition

J2EE:Enterprise Edition

J2ME:Mobile Edition

代表性技术:EJB, Java Plug-in, Swing, 

JIT编译器: Just In Time,即时编译器

2000:JDK 1.3

1999:HotSpot虚拟机 注:java虚拟机技术,起初由sun公司收购所得

2002:JDK 1.4


2006年,Sun开源了Java技术;遵循GPL规范;并建立了OpenJDK组织管理此些代码;


虚拟机:JRockit, HostSpot; 



Java体系结构

Java编程语言;       注:编写java程序的源代码

Java Class文件格式; 注:编译的中间代码为字解码,只能在java虚拟机上运行

Java API;           注:在运行时调用java API中的代码所实现的功能

Java VM;            注: java API + java VM 被成为java平台


JVM的核心组成部分:

Class Loader        注:类加载器,加载已经编译好的类文件和其它所依赖的类文件

执行引擎            注:执行引擎是使用C语言研发的,最终java还是要用到标准c库和系统调用。


思考与引申:其实java虚拟机只是一个中间层,它最终还是需要通过执行引擎在本地平台上执行,所以java的API只是一个翻译官



Java编程语言的特性:

面向对象、多线程、结构化错误处理

垃圾收集、动态链接、动态扩展


三个技术流派:

J2SE ==> Java 2 SE

J2EE ==> Java 2 EE

J2ME ==> Java 2 ME

java技术.png


JAVA虚拟机执行java程序的过程

timg (1).jpg

JVM运行时区域:运行为多个线程

方法区:线程共享;用于存储被虚拟加载的类信息、常量、静态变量等;永久代;

堆:Java堆是jvm所管理的内存中最大的一部分;也是GC管理的主要区域,主流的算法都基于分代收集方式进行:新生代和老年代;线程共享

Java栈:线程私有,存放线程自己的局部变量等信息;每个线程都有自己的栈,存取局部变量等信息

PC寄存器(Program Counter Register),线程独占的内存空间;注:也称为程序计数器,执行字解码的行号的解释器

本地方法栈:


        timg (2).jpg



JAVA 2 EE 虚拟机技术包含的子技术:

JAVA 2 SE

Servlet, JSP, EJB, JMS, JMX, JavaMail  注:这些都是专用的类


Servlet Contaier:注:拥有了jsp和servlet这两个组件,我们称之为servlet container

             

html标签要硬编码在应用程序中


JSP:注:可以理解为是Servlet的前段程序,jsp能把以下内容转化为Servlet格式

<html>

<body>

<h1>...</h1>

<% 

%>      注:java代码放在两个%之间


</body>

</html>

小结:JSP是java中的一个特殊类库,默认并没有被JDK包含,JDK只提供了JAVA 2 SE的标准实现,如果我们想以网页方式进行运行,我们必须保证JAVA代码能够输出html标签,为了便于这些开发,sun公司专门提供了一个规范,叫Servlet规范,基于这种规范,应用程序可以以http或CGI格式的方式来接受用户的请求,以通用的cgi或者http协议能理解用户的http请求,能分析请求,并且能够把用户的请求在本地调用JDK处理以后,构建cgi或http的响应报文,响应给客户端,这种技术就是Servlet技术。html需要内嵌java代码,这就是jsp技术。

jsp工作在servlet的前段,接受用户请求,它可以把请求翻译成Servlet格式,



Web Container:同时提供JDK, Servlet, JSP

Web Container的实现:

商业实现

WebSphere(IBM)

WebLogic (BEA --> Oracle)

Oc4j

Glassfish

Geronimo

JOnAS

JBoss


开源实现

Tomcat

jetty

resin