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程序包并安装
[[email protected] JDK]# ls jdk-7u79-linux-x64.rpm jdk-8u25-linux-x64.rpm # 下载的程序包 # 安装1.8版本第25次升级的程序包 [[email protected] 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中;
[[email protected] JDK]# cd [[email protected] ~]# cd /usr/ [[email protected] usr]# ls bin etc games i686-w64-mingw32 include java lib lib64 libexec local sbin share src tmp x86_64-w64-mingw32 [[email protected] usr]# cd java/ [[email protected] 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 # 执向的是最新版 [[email protected] java]# cd latest/ [[email protected] 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 [[email protected] 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 [[email protected] 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的安装路径;
# 没有配置环境变量前运行版本号 [[email protected] 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) [[email protected] latest]# vim /etc/profile.d/java.sh # 配置环境变量 export JAVA_HOME=/usr/java/latest export PATH=$JAVA_HOME/bin:$PATH [[email protected] ~]# . /etc/profile.d/java.sh # 重读脚本文件 [[email protected] ~]# 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.安装及查看程序看路径
[[email protected] ~]# 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 [[email protected] ~]# 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命令设定默认使用的版本 [[email protected] ~]# 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 # 列出程序指向的路径 [[email protected] ~]# 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 [[email protected] ~]# ls -l /bin/java lrwxrwxrwx 1 root root 22 Dec 11 21:44 /bin/java -> /etc/alternatives/java # 始终指向的是真实路径 [[email protected] ~]# 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环境下了
[[email protected] ~]# vim /etc/profile.d/java.sh export JAVA_HOME=/usr [[email protected] ~]# . /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.简介
★