首页 > 代码库 > Java 技术体系基础概念

Java 技术体系基础概念

Java 技术体系基础概念

===============================================================================

概述:

===============================================================================

编程语言:

百度百科解释

  • 编程语言俗称“计算机语言”,种类非常的多,总的来说可以分成机器语言、汇编语言、高级语言三大类。电脑每做的一次动作,一个步骤,都是按照已经用计算机语言编好的程序来执行的,程序是计算机要执行的指令的集合,而程序全部都是用我们所掌握的语言来编写的。所以人们要控制计算机一定要通过计算机语言向计算机发出命令。 目前通用的编程语言有两种形式:汇编语言高级语言

级别分类

硬件级:微码编程,汇编语言

系统级:C,C++,...(编译型语言)

应用级:Java, PHP, Python, Ruby, Perl, C#, ...

  • Python:PVM(代码运行环境)

     ·Standard Library (标准库):Web Framework(如:Django, Flask, ...)

  • Java:JVM(运行环境),JDK(开发环境)

  • bash:bash explainer(解释器)

  ...

程序指令+数据

  • 过程式编程:以指令为中心,数据服务于代码;

  • 对象式编程:以数据为中心,指令服务于数据;

    ·类,class;类属性、类方法;

    ·对象,方法(method)

Java:

 1.简介

百度百科解释

  • Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程;

  • Java具有简单性、面向对象、分布式健壮性安全性平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序Web应用程序分布式系统嵌入式系统应用程序等

发展历程

技术分享

 2.JDK,JRE,JVM的关系与区别

JDK:

  • JDK(Java Development Kit) 是Java语言的软件开发工具包(SDK)。

  • JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API )

有三种版本

  • SE(J2SE),standard edition,标准版

  • EE(J2EE),enterprise edition,企业版

  • ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序

JRE

  • 运行JAVA程

  • 序所必须的环境的集合,包含JVM标准实现及Java核心类库。

  • JRE为Java Runtime Environment的简称,JRE(包括Java Plug-in)是Sun的产品,包括两部分:Java Runtime Environment和Java Plug-in

  • JRE 是可以在其上运行、测试和传输应用程序的Java平台;

  • JRE需要辅助软件--Java Plug-in--以便在浏览器中运行applet(小程序)。

  • 没有JDK的话,无法编译Java程序,但在有JRE环境的系统上可以运行程序。所以当你只需要运行Java程序或Applet,下载并安装JRE即可。如果你要自行开发 Java软件,请下载JDK。

JVM

  • JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

  • Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。

附图:

技术分享

附图:

技术分享

  3.Java代码的运行及技术体系

Java代码的运行

  • *.java(source code) 源代码--> javac --> *.class(bytecode) 类文件(字节码)

  • jvm:class loader(类加载器),加载程序的类文件及依赖到的其它的类文件至执行引擎运行; 整个运行表现为一个jvm进程;

  • jvm  thread;

  • 过程:利用JDK(调用JAVA API)开发JAVA程序后,通过JDK中的编译程序(javac)将文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。

Java技术体系:

  • Java编程语言

  • Java Class文件格式

  • Java API:Java编程语言中拥有的类库

  • Java VM:

JVM的核心组件:

  • class loader

  • 执行引擎

JVM运行时区域:

  • 方法区:线程; 用于存储被JVM加载的class信息、常量、静态变量、方法等;

  • 堆:是jvm所管理的内存中占用空间最大的一部分;也是GC管理的主要区域;存储对象;

  • Java栈:线程私有,存储 线程自己的局部变量;

  • PC寄存器(程序计数器):线程私有的内存空间,程序的指令指针;

  • 本地方法栈:

附图:
技术分享

 4.总结:

Java 2 SE: JDK 

Java 2 EE:JDK + Servlet, JSP, EJB, JMS, JMX, JavaMail, ...(企业积类库)

  • 商业实现:

       BEA(oracle):WebLogic

       IBM:WebSphere

       Oracle: oc4j

        ...

Java安装

了解当前的java环境:

  • ~]# java  -version

OpenJDK 

java-VERSION-openjdk:

  • The OpenJDK runtime environment.

java-VERSION-openjdk-headless:

  • The OpenJDK runtime environment without audio and video support.

java-VERSION-openjdk-devel:

  • The OpenJDK development tools.

注意:

  • 多版本并存时,可使用 alternatives命令设定默认使用的版本;

Oracle JDK:

安装相应版本的rpm包;

  • jdk-VERSION-OS-ARCH.rpm   例如:jdk-1.8.0_25-linux-x64.rpm 

注意:

安装完成后,要配置JAVA_HOME环境变量,指向java的安装路径;

  • OpenJDK:

      JAVA_HOME=/usr

  • Oracle JDK:

      JAVA_HOME=/usr/java/jdk_VERSION

      export PATH=$JAVA_HOME/bin:$PATH

演示1:Oracle JDK:

 1.下载Orecal官方JDK程序包并安装

[root@centos7 JDK]# ls
jdk-7u79-linux-x64.rpm  jdk-8u25-linux-x64.rpm   # 下载的程序包

# 安装1.8版本第25次升级的程序包
[root@centos7 JDK]# rpm -ivh jdk-8u25-linux-x64.rpm    
Preparing...                          ################################# [100%]
Updating / installing...
   1:jdk1.8.0_25-2000:1.8.0_25-fcs    ################################# [100%]
Unpacking JAR files...
	rt.jar...
	jsse.jar...
	charsets.jar...
	tools.jar...
	localedata.jar...
	jfxrt.jar...

 2.安装后生成的目录在/usr/java中;

[root@centos7 JDK]# cd
[root@centos7 ~]# cd /usr/
[root@centos7 usr]# ls
bin  etc  games  i686-w64-mingw32  include  java  lib  lib64  libexec  local  sbin  share  src  tmp  x86_64-w64-mingw32
[root@centos7 usr]# cd java/
[root@centos7 java]# ll
total 4
lrwxrwxrwx 1 root root   16 Dec 11 21:04 default -> /usr/java/latest
drwxr-xr-x 9 root root 4096 Dec 11 21:04 jdk1.8.0_25
lrwxrwxrwx 1 root root   21 Dec 11 21:04 latest -> /usr/java/jdk1.8.0_25  # 执向的是最新版
[root@centos7 java]# cd latest/
[root@centos7 latest]# ll
total 25784
drwxr-xr-x 2 root root     4096 Dec 11 21:03 bin       # 二进制程序
-rw-r--r-- 1 root root     3244 Sep 18  2014 COPYRIGHT
drwxr-xr-x 4 root root      115 Dec 11 21:03 db
drwxr-xr-x 3 root root      125 Dec 11 21:03 include   # 头文件
-rw-r--r-- 1 root root  5025522 Sep 17  2014 javafx-src.zip
drwxr-xr-x 5 root root     4096 Dec 11 21:03 jre       # 运行环境
drwxr-xr-x 5 root root     4096 Dec 11 21:04 lib
-rw-r--r-- 1 root root       40 Sep 18  2014 LICENSE
drwxr-xr-x 4 root root       44 Dec 11 21:04 man       
-rw-r--r-- 1 root root      159 Sep 18  2014 README.html
-rw-r--r-- 1 root root      525 Sep 18  2014 release
-rw-r--r-- 1 root root 21057306 Sep 18  2014 src.zip
-rw-r--r-- 1 root root   110114 Sep 17  2014 THIRDPARTYLICENSEREADME-JAVAFX.txt
-rw-r--r-- 1 root root   178400 Sep 18  2014 THIRDPARTYLICENSEREADME.txt
[root@centos7 latest]# ll jre
total 308
drwxr-xr-x  2 root root   4096 Dec 11 21:03 bin
-rw-r--r--  1 root root   3244 Sep 18  2014 COPYRIGHT
drwxr-xr-x 15 root root   4096 Dec 11 21:04 lib
-rw-r--r--  1 root root     40 Sep 18  2014 LICENSE
drwxr-xr-x  3 root root     20 Dec 11 21:03 plugin # 插件
-rw-r--r--  1 root root     46 Sep 18  2014 README
-rw-r--r--  1 root root 110114 Sep 17  2014 THIRDPARTYLICENSEREADME-JAVAFX.txt
-rw-r--r--  1 root root 178400 Sep 18  2014 THIRDPARTYLICENSEREADME.txt
-rw-r--r--  1 root root    955 Sep 18  2014 Welcome.html

[root@centos7 latest]# ls bin
appletviewer  jar        javadoc         javapackager  jconsole  jhat   jmc         jsadebugd  jvisualvm     pack200     rmiregistry  tnameserv  xjc
ControlPanel  jarsigner  javafxpackager  java-rmi.cgi  jcontrol  jinfo  jmc.ini     jstack     keytool       policytool  schemagen    unpack200
extcheck      java  # 主要的程序文件     javah           javaws        jdb       jjs    jps         jstat      native2ascii  rmic        serialver    wsgen
idlj          javac # 编译器     javap           jcmd          jdeps     jmap   jrunscript  jstatd     orbd          rmid        servertool   wsimport

 3.安装完成后,要配置JAVA_HOME环境变量,指向java的安装路径;

# 没有配置环境变量前运行版本号
[root@centos7 latest]# bin/java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

[root@centos7 latest]# vim /etc/profile.d/java.sh # 配置环境变量
 export JAVA_HOME=/usr/java/latest
 export PATH=$JAVA_HOME/bin:$PATH
[root@centos7 ~]# . /etc/profile.d/java.sh  # 重读脚本文件
[root@centos7 ~]# java -version             # 直接运行java命令即可
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)



演示2:OpenJDK 

 1.安装及查看程序看路径

[root@centos7 ~]# yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 java-1.8.0-openjdk-headless.x86_64   -y

[root@centos7 ~]# rpm -ql java-1.8.0-openjdk
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/bin/policytool
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/lib/amd64/libawt_xawt.so
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/lib/amd64/libjawt.so
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/lib/amd64/libjsoundalsa.so
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/lib/amd64/libsplashscreen.so
/usr/share/applications/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64-policytool.desktop
/usr/share/icons/hicolor/16x16/apps/java-1.8.0.png
/usr/share/icons/hicolor/24x24/apps/java-1.8.0.png
/usr/share/icons/hicolor/32x32/apps/java-1.8.0.png
/usr/share/icons/hicolor/48x48/apps/java-1.8.0.png

# 可使用 alternatives命令设定默认使用的版本
[root@centos7 ~]# ll /etc/alternatives/java
lrwxrwxrwx 1 root root 70 Dec 11 21:44 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/bin/java

# 列出程序指向的路径
[root@centos7 ~]# alternatives --list
libnssckbi.so.x86_64	auto	/usr/lib64/pkcs11/p11-kit-trust.so
ld	auto	/usr/bin/ld.bfd
print	auto	/usr/bin/lpr.cups
xinputrc	auto	/etc/X11/xinit/xinput.d/ibus.conf
mysqlbug	auto	/usr/lib64/mysql/mysqlbug
cifs-idmap-plugin	auto	/usr/lib64/cifs-utils/cifs_idmap_sss.so
akonadiserverrc	auto	/etc/xdg/akonadi/akonadiserverrc.mysql
mta	auto	/usr/sbin/sendmail.postfix
libwbclient.so.0.12-64	auto	/usr/lib64/samba/wbclient/libwbclient.so.0.12
zabbix-proxy	auto	/usr/sbin/zabbix_proxy_mysql
java	auto	/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/bin/java
jre_openjdk	auto	/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre
jre_1.8.0	auto	/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre
jre_1.8.0_openjdk	auto	/usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
javac	auto	/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/bin/javac
java_sdk_openjdk	auto	/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
java_sdk_1.8.0	auto	/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
java_sdk_1.8.0_openjdk	auto	/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64

[root@centos7 ~]# ls -l /bin/java
lrwxrwxrwx 1 root root 22 Dec 11 21:44 /bin/java -> /etc/alternatives/java # 始终指向的是真实路径

[root@centos7 ~]# java -version  # 可以直接使用java命令
openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)

 2.声明JAVA_HOME,不需要声明环境变量,因为已经在bin环境下了

[root@centos7 ~]# vim /etc/profile.d/java.sh
 export JAVA_HOME=/usr
[root@centos7 ~]# . /etc/profile.d/java.sh

Java 2 EE:

CGI: 

Servlet

  • Servlet(Server Applet),全称Java Servlet,是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

  • Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

  • 服务器上需要一些程序,常常是根据用户输入访问数据库的程序。这些通常是使用公共网关接口Common Gateway Interface,CGI)应用程序完成的。然而,在服务器上运行 Java,这种程序可使用 Java 编程语言实现。在通信量大的服务器上,JavaServlet 的优点在于它们的执行速度更快于 CGI 程序。各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程,这意味着服务器端处理请求的系统开销将明显降低。

JSP: Java Server Page

  • JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态页面技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

  • 它实现了Html语法中的java扩展(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。

  • Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。

JSP执行过程

技术分享

技术分享

Web Container:

  • Servlet container(Servlet+JDK)

  • JSP

现:

  • Java Web Server:JWS

  • ASF:JServ

      Tomcat 3.x

      Tomcat 4.x:Catalina(代码名称)

商业实现:

  • WebSphere, WebLogic, Oc4j, Glassfish, Geronimo, JOnAS, JBoss, ...

开源实现:

  • Tomcat, Jetty, Resin, ...

Tomcat: 

  • Java 2 EE技术体系的不完整实现;(只是构建实现了servlet和jsp类库) 

Tomcat:

 1.简介



























本文出自 “逐梦小涛” 博客,请务必保留此出处http://1992tao.blog.51cto.com/11606804/1881771

Java 技术体系基础概念