Tomcat
引言:
开发语言如:PHP,可以用smarty框架。
另外最流行框架有mvc框架: data 数据
bussiness 业务
presentation 展示
而像这种能使用框架的语言,尤其适合开发web站点。
C语言相比PHP,首先,c语言与服务器硬件以及OS关系非常紧密,很难使用框架,并且移植平台困难,而且代码维护成本相当高。但正是由于硬件、系统紧密结合,所以开发出来程序运行速度相当快。如可开发驱动等等。
API:application programming interface(可以给程序调用API接口,调用系统库文件,有system call包装出来)
ABI:applications binary interface(应用二进制接口)
一个程序为了开发快速,所以使用了操作系统提供的API。大家知道,一个程序要在系统上运行,需要编译后才能运行,就是把开发的语言转换成系统可以认识的二进制机器指令。那个在windows操作系统上编译出来的程序使用的API肯定与Linux系统上开发出来使用的API是不一样的。所以不同系统开发程序无法在另一个系统上运行。
操作系统运行平台windows,API ABI(.dll)、linux,API ABI(.so)
由此出现了:POSIX:portable operating system,可以跨平台编译。
所以一个程序一般在一个系统环境编译后是无法在另一个系统上运行的,因为调用的动态库,而且二进制格式(ABI)都不一样。
所以为了跨平台运行,还需要抹合系统的动态库及ABI。这时,JAVA就出现了。1995年,Java1.0由sun公司JamesGosling带队研究开发出。
JAVA的组件包含四个独立却又彼此相关的技术:
Java程序设计语言
Java API(Java为了快速开发提供的)
Java Class文件格式(Java类文件,bytecode字节码需要运行在JVM上)
JVM:Java Virtual Machine(用于解释bytecode:字节码)
Java程序语言(.java)使用JavaCompiler编译成Java类文件(.class),然后运行在JVM上。并且JavaAPI调用到的库文件也需要装载进库文件。
JVM的实现方式有如下三种:
1. 一次性解释器,解释字节码并执行
2. 即时编译器(just-in-time complier),把编译后的结果缓存下来,所以依赖于更多内存缓存解释后的结果
3. 自适应编译器(缓存20%左右代码)
所以这四种技术,Java语言是有sun公司开发并且开源了,而JAVAAPI的规范由于开源了,后来演变为由第三方组织定义的,JavaClass的格式规范还是由Sun公司的定义规范的,最后的JVM,sun公司和第三方组织都有提供。
SUN公司提供的JVM,总的叫做HotspotJVM,但具体软件分为如下两种:
JRE java:running环境。
JDK java:开发环境。
第三方提供的JVM是叫做OpenJDK:开源的开发加运行。
JDK可以理解为包含了java代码+JavaAPI+JVM,这是用于实现Java开发的最小环境。JRE只有JVM和Java SE API
Java应用领域不同,Java可以分为三类:
Java SE Standard Edtion j2se
Java EE Enterprise Edition j2ee
Java ME Mobile Edition j2me
Java问世后,人们对动态网站需求越来越大,Java就引入了applet这个技术。这个东西只要HTML网页开发者加入applet这个小程序,用户使用的浏览器装有jre的插件,就可以直接运行。使得动态网站得以实现。但这是客户端动态网站实现方式。
随后CGI技术就诞生了,CGI:common gateway interface 通用网关协议。
html,mime可以将其他格式全都转换成文本格式。
随后Java为了引入类似cgi的技术出现了servlet。servlet:简单说以java语言cgi技术
Servlet技术出现,增加了Java对于http处理能力。但随之又有一个问题产生,所有http请求,都必须转成后端Java程序进行编译运行,这样一来,严重影响了Java的处理性能。而且Java程序员必须还要懂HTML,这样Java返回用户时的HTML格式才能正确。所以就必须使用框架,并且JSP就诞生了。
JSP:java server page,能够嵌入HTML网页的一种技术,为使用mvc框架打下了基础。
SSH框架:Structs,Spring,Hebernate。
JSP ――> Servlet(通过Jasper)
Servlet Container Servlet容器
Web Container Web容器
总的来说就是对JVM的功能进行扩展。所以就是一个jvm instance,那么100个请求怎么实现并行处理?难道启动100个JVM实例来实现吗?一个JVM就是一个进程,但这个进程的创建与撤销代价非常大,资源消耗很厉害,所以,JVM是通过启动多个线程来实现并行处理的。这样JVM运行时内存分配是非常复杂的。可以通过如下介绍进行理解。
运行时数据区域:
线程私有内存区:程序计数器
java虚拟机�C
线程共享内存区:方法区
java堆(存放对象)(类-执行操作,对象-执行方法,对象都是同一类)
上述的东西都是存放在内存中的,当内存存满后就会内存溢出,为了避免这个情况,Java会进行内存回收;Java定时自动内存回收,使用垃圾回收器GC。
垃圾回收算法:
1、标记清除(会产生碎片)
2、复制
3、标记整理
垃圾回收器:Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old
CMS:Concurrent Mark Sweep 并行标记清除器
特点:并发收集,低停顿,但无法收集浮动垃圾
JDK安装
oracle官网下载下来,jdk进行安装。
安装完成后配置环境变量:vim /etc/profile.d/java.sh;
【export JAVA_HOME=/usr/java/jdk1.6.0_21】
【export PATH=$PATH:$JAVA_HOME/bin 】
. /etc/profile.d/java.sh
JVM:启动JVM虚拟机,就是使用java这个程序。
java命令的配置参数:
-xx:+<option> : 开启此参数指定的功能
-xx:-<option> : 关闭功能
-xx:<option>=<value> : 给option指定的选项赋值
java -xx:+PrintFlagsFinal 用于获取配置参数帮助!
类加载器:类运行需要到运行区进行运行,并且有可能要依赖其他的公共类或私有类,所以需要一个类加载器。
类的生命周期:[Loading-Verification-Preparation-Resolution-Initilization]-Using-Unloading
sun的jdk监控和故障处理工具
jps,JVM Process Status Tool:显示指定系统内所有的HotSpot虚拟机过程列表信息
jstat,JVM Statistic Monitoring Tool:收集并显示HotSpot虚拟机各方面的运行数据
jinfo:显示正在运行的某HotSpot虚拟机配置信息
jmap:生成某HotSpot虚拟机的内存转储快照
可视化工具:
jconsole: java的监控与管理控制台
jvisualvm:
Java EE APIS:EJB JMS JMX JTA JavaMail
Java SE APIS:JNDI JAXP
JAVA EE Application Servers:
Websphere Weblogic oc4j JBoss JOnAS Geronimo Glassflish
Tomcat各组件的关系
<Server>
<Service>
<Connector />
<Engine>
<Host>
<Context> </Context>
</Host>
</Engine>
</Service>
</Server>
<%@ page language="java" %>
<%@ page import="java.util." %>
<html>
<head>
<title>JSP test.page.</title>
</head>
<body>
<% out.println("Welcome to MageEdu. Site,http://www.magedu.com"); %>
</body>
</html>
Tomcat的conf/下
server.xml核心配置文件,tomcat-users.xml用户权限管理文件、web.xml 默认的应用程序部署描述符、context.xml上下文配置文件