java介绍
java是一种应用程序开发语言,主要用于开发企业级应用程序; java是面向对象的编程语言,所以它提供的库理解为类库,所以这些标准类库的调用接口称为java 2 SE API; java如果想要开发通过浏览器进行交互的应用程序(web应用)并不实用,为了便于开发web应用,就用到了通用类库,jsp是java语言编程环境专用于开发服务器页面的类库; 机器指令是CPU能直接识别并执行的指令,它的表现形式是二进制编码; java程序运行时,是运行在jvm上,并且会调用标准类库;java代码需要编译后才可以运行,.java源码通过java编译器javac编译后,并不是一个真正意义上的二进制,而是字节码(中间码).class,所以不能直接运行在CPU上,java字节码需要运行在jvm上,并且jvm向CPU发送机器指令;而C语言程序,编译后直接运行在CPU上,所以JAVA代码性能不如C,但是java代码的可移植性强,并且java企业级应用开发成熟,C语言主要是用于系统级开发;
JDK简介
JDK:java的开发工具箱;主要由开发工具、调试工具、JRE运行环境组成; JRE:java运行环境;JRE由jvm和标准类库所组成,JRE核心为jvm;为了便于应用代码的开发(避免重复写代码),java提供了标准类库,java代码会通过API调用这些标准类库; java在已有标准类库的基础上,设计了企业级类库应该具有哪些部分,在JDK已有标准的SE基础上,又设计了其他API规范,如jsp、mail等;jsp的基础支撑为servlet;servlet才是真正意义上以web方式运行服务端程序的企业级类库,但是servlet写代码会非常繁琐,开发不仅要进行程序的逻辑,还要设计代码的展示效果,因此jsp出现了,jsp可以让web程序的servlet代码嵌入到html中,让引擎可以知道哪部分需要交给后端服务器运行,jsp就相当于一个翻译器,可以把html代码转换为java代码(html的标签转换为对应编程语言的打印语句),jsp进一步简化了开发人员使用servlet类库写web应用程序的复杂度;这样可以让前后端开发分离开来,写html的只写html,写jsp的只写jsp,让html调用jsp,这样就把jsp嵌入的html中,这样jsp生成的数据就可以通过html进行展示,完成了前后设计上的分离;所以JDK加上这些企业级类库组合起来的技术平台叫做java 2 EE;所以只有JDK是无法运行jsp和servlet,需要在JDK的基础上提供jsp类库和servlet类库,tomcat就是jsp类库和servlet类库的实现;java 2 EE的完整实现是把sun官方提供的企业级类库全部实现,但是tomcat只实现了jsp和servlet类库,所以tomcat是java 2 EE的不完整实现; html是静态页面,jsp是动态页面,静态页面内是不能嵌入代码的; 整个jvm主要由两部分组成,类加载器和执行引擎; openjdk是开源社区免费使用的,但sun官方提供的jdk也不进行收费;
tomcat自身是使用java语言编写的,tomcat是为了更好的运行其他java程序而编写的,如jsp;
tomcat是承载及运行一种特殊应用程序的组件,这个应用程序就是jsp;
jsp需要运行在专有的应用程序服务器上,tomcat只是其中一种;jsp是java代码类库中的一个特殊应用;
tomcat只是提供了一个运行jsp更好的隔离环境;
tomcat自身并不是向客户端提供服务的,而是支持所开发程序的运行,开发的程序才是能够真正向客户端提供服务的组件;
tomcat主要是运行jsp所开发的web页面,提供了一个应用程序运行环境;为了能使web应用程序与用户进行交互,tomcat内置了基于java语言编写的http server,默认监听8080端口,但是tomcat也不会直接面向客户端,一般通过反向代理实现;
反向代理tomcat支持三种不同的协议,http协议的8080端口,ajp协议的8009端口;https协议的8443端口,但是一般https不会配置在tomcat上,而是配置在nginx上;
ajp是apache专有的二进制协议,所以仅能使用httpd进行反向代理才能与tomcat的8009端口进行交互;
jsp文件结尾分为以.do以及.jsp;
tomcat如果要访问mysql,则需要相关对应的类库,即驱动,需要适配mysql协议连接mysql数据库,完成对数据的增删改查;连接redis需要适配redis协议;
要想使用tomcat,则依赖于jdk,tomcat只是在jdk的基础上补充了jsp和servlet类库,tomcat自身也是一个java程序,但是tomcat需要为运行jsp提供一个容器,tomcat也是一个需要运行起来的java进程,tomcat起来后可以托管并管理运行其他java代码,所以从本质上每个tomcat进程都表现为一个java虚拟机进程;
执行一个java程序,就会启动一个jvm进程(jvm会表现为一个进程),所以tomcat是java编写的,启动一个tomcat进程就会启动一个jvm;在tomcat上部署的应用程序,都会运行在与tomcat同一个的jvm上,因为tomcat只是提供了java企业级类库,是运行servlet的容器,给这些web应用提供了运行环境,所以这些web应用程序都会运行在与tomcat同一个的jvm上;