一、java概述
1、java的四个独立却又相关的技术:
java程序设计语言: java源程序
java API: 以连接java的库文件,官方提供很多库文件,以提高java的开发速度,通过API连接到相应的库文件。
JAVA class 文件格式:编译后的JAVA程序遵循的文件格式。
jvm:java虚拟机: 通用虚拟机,以跨平台运行。
java语言结合java API写出java程序代码,然后编译成javaclass文件,(java字节码,尊循java class格式),然后在虚拟机上运行。
2、JVM的执行过程:
1、一次性解释器,解释字节码并执行,即每次执行时都要把字节码解释一次。
2、即时编译器,即把字节码解释后放于缓存,再次运行,不用再进行解释。但缓存要求太大。
3、自适应编译器,只把使用频率高的部分解释后进行缓存。一般把20%左右高频率使用的字节码进行解释后缓存,其他的就进行一次性解释。
3、JVM的种类
(1) hotspotJVM:官方提供的,SUN公司的,包含以下两个组件:
JRE: JAVA的运行环境+JVM,即是用来运行JAVA的。包括JVM和JAVA核心类库和支持文件。jre=api+jvm
JDK:JAVA开发环境+JRE,即用来开发的JAVA的,且能运行,包含了JRE。JDK=java开发程序 +api+jvm(JAVA开发的最小开发环境)
我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
(2)开源JVM:openJDK
4、JAVA的种类:
JAVA SE: 标准版
JAVA EE: 企业版
JAVA ME: 开发手持设备的JDK,应用不多。
5、JAVA API
java 官方类库
第三方类库
实现动态网站的类库:
applet类库:开发时先编译好applet程序,然入嵌入到html中,每个客户端都需要安装applet插件才能运行。类似于微软的activex。不安全,已不使用。
servlet类库:用于JAVA的一种CGI技术。能让JAVA开发动态网站。遵循servlet规范,即可以识别http协议和html文档。但是静态网页也需要在java程序中生成,造成后期维护很难,且改变一行静态网页的HTML代码,也需要重新编译。
JSP API:即是servlet的提升。以嵌入式的方式,把java代码可以嵌入到到HTML中,这样就可以让前端html开发和后台JAVA开发分开。
JSP模板:SSH
.jsp-->(用jasper转换成servlet).java-->(用javac把.java转换成JVM)(.class)
EJB:JAVA相关的诸多高级功能的实现。
JMS:高情能异步消息服务。
JMX:开发java监控和管理。
6、java web的运行机制
(1)servlet container:servlet 容器:
web服务器接收到客户请求--》发现是动态请求通过CGI发送给servletcontainer(servlet 容器)的CGI接收器-->web容器收到cgi请求,把java源程序(.java)用JDK编译程序(javac)结合库文件编译成java字节码(.class)-->然后把字节码送到jvm上(虚拟机)解析执行-->然后返回请求内容。
容器还能实时监控源码的变更,一旦变更后马上重新编译。
(2)web container:web容器:在servlet的基础上增加了jsp转换成servlet的过程(.java)
web服务器接收到客户请求--》发现是动态请求通过CGI发送给webcontainer(web 容器)的CGI接收器-->web容器收到cgi请求,把相关源代码(.jsp)转换成servlet代码(.java),即把jsp通过(jasper)转换成servlet。-->把转换后的java源程序(.java)用JDK编译程序(javac)结合库文件编译成java字节码(.class)-->然后把字节码送到jvm上(虚拟机)解析执行-->然后返回请求内容。
(3)web容器的连接器:
web容器可包含连接器,跳过web服务器,直接面对用户的请求,这个连接器就是tomcat。
即:用户发送请求-->到web 容器的连接器 -->开始jsp转成.java-->java转成.class字节码-->JVM解析-->返回客户端解析后的内容。
当然也可以通过先通过web服务器接收客户请求-->再发到tomcat-->开始jsp转成.java-->java转成.class字节码-->JVM解析-->返回客户端解析后的内容。
jvm实例:(多个请求时不会启动多个jvm实例,只会启动jvm 线程)
当多个请求到web容器中时,会启动多个jvm线程。
7、web容器的种类:
web容器(以能运行java ee开发的所有web程序)的种类:
websphere :IBM研发,占有率30%多。 商业级的
weblogic :被ORCACLE收购,占20% 商业级的
oc4j :oracle 占10% 商业级的
jboss :readhat,即tomcat的封装和开发。开源。
二、JDK
1、安装JDK
最好安装SUN的JDK。到官网下载。不一定最新的包是最好的。一般有RPM和.bin二进制包。
(1)安装
用RPM或二进制包安装,安装目录在 /usr/java
(2)把jdk的二进制目录加入环境变量路径
在/etc/profile中加入
export PATH=$PATH:/usr/java/jdk1.8.0_60/bin
用java -vesion发现还是openjdk旧版本可做如下处理:
cd /usr/bin
mv java java.bak
ln -s /usr/java/jdk1.8.0_21/bin/ava java
(4)设定系统服务,让jdk开机启动。
三、tomcat
(一)tomcat基本架构:
由sun开发的TWS演示版web容器,加上asf合成的,tomcat。
tomcat由外向内分为多层,分别为:
server:拥有web服务器的功能,可以直接接收客户端的请求,也可以接收web服务器(如apache)转发来的CGI动态请求,每一个tomcat server就是一个tomcat实例,生成一个tomcat实列时就会初始化一个或多个连接器,以用于接收外部发来的请求。一个tomcat server一般只打开一个tomcat引擎。server中是可以打开多个引擎的,而将server关联到引擎的叫做连接器,而连接器分好多种,如https,http,proxy,ajp等。
service:主要作为server与tomcat引擎之间的连接作用,把一个或多个连接器关联到某tomcat引擎上。一个service内部只能有一个tomcat引擎。可将一个和多个连接器关联到同一个tomcat引擎的。
tomcat engine(引擎): 具有一个web容器的功能,用来执行server通过连接器转发来的请求。
host:在引擎内部实现虚拟主机功能。通过给tomcat引擎设定默认主机。
context:路径别名,类似于iis中的虚拟目录,可以把设定的网站虚拟目录外的任意目录作为网站的站点目录来存放网站文件。
tomcat server实例生成时,就会初始化或注册一个或多个连接器(如http请求就生成一个http连接器,https请求生成https连接器)-->外部请求把请求发给server的连接器-->service把连接器关联到tomcat引擎上-->tomcat引擎处理请求。
一个server内部可以有多个引擎。将一个server接收到请求转发到引擎的组件,叫连接器(connector)。而连接器分好多种,如https,http,proxy,ajp等。可将多个转发至不同连接器的请求转发到同一个引擎上。而service就是把连接器关联到引擎上的。
。但一般一个server内部一般只有一个service,一个service内部只有一个引擎。
(二)tomcat的组件:
可以用在引擎,host,context各个级别的组件:
realm(领域):用户认证用的,其实就是一个用户帐号数据库,这些组件可以用在引擎级别,也可以用在host级别,也可以用在context级别。如用在引擎时,那么访问引擎就需要认证,如用在host时,那么访问虚拟主机时就需要认证。
valve(阀门):基于IP认证,记录访问日志。
wrapper:
(三)tomcat安装
(1)下载二进制包,apache-tomcat-8.0.26.tar.gz
(2)tar -xf apache-tomcat-8.0.26.tar.gz -C/usr/local //把包解压到/usr/local目录中
(3)ln -sv apache-tomcat-8.0.26 tomcat //做一个软链接,以便于以后的操作。
(4)在/etc/profile文件最后添加: export PATH=$PATH:/usr/local/tomcat/bin //配置环境变量
(5)catalina.sh version 查看版本号验证是否安装成功。 catalina.sh是运行脚本
(6)安装Tomcat Native,这个项目可以让Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。此软件在/usr/local/tomcat/bin目录下,此项为可选安装项。
#cd /usr/local/www/tomcat/bin
# tar zxvf tomcat-native-1.1.20-src.tar.gz
# cd tomcat-native-1.1.20-src/jni/native
# ./configure --with-apr=/usr/local/www/apr --with-java-home=/usr/local/java
# make
# make install
(7)让tomcat自启动
#cp /usr/local/www/tomcat/bin/jsvc-src/native/Tomcat5.sh/etc/rc.d/init.d/tomcat
# vi /etc/rc.d/init.d/tomcat
在#!bin/sh下添加
#chkconfig: 2345 85 15
#description: apache-tomcat.6
# chmod a+x /etc/rc.d/init.d/tomcat
# chkconfig --add tomcat
# chkconfig tomcat on
注:tomcat是JAVA编译的,所以一般不用源码安装。
(四)安装文件详解:
.Tomcat的目录结构
·bin //存放Tomcat的命令脚本文件,其中catalina.bat是主脚本程序,把其他脚本作为参数执行。
·conf //存放Tomcat服务器的各种配置文件,最主要是server.xml
server.xml:描述了tomcat各组件之间的关系。
web.xml: 默认的,应用程序部署描述符
·lib //存放Tomcat服务器支撑jar包
·logs //存放日志文件
·temp //存放临时文件
·webapps//web应用所在目录,外界访问web资源的存放目录
|--- html, jsp, css, js文件等 -- 这些文件一般在web应用根目录下,根目录下的文件外界可以直接访问.
|--- WEB-INF 目录 -- java类、jar包、web配置文件存在这个目录下,外界无法直接访问,由web服务器负责调用.
|--- classes 目录 -- java类
|--- lib 目录 -- java类运行所需要的jar包
|--- web.xml 文件 -- web应用的配置文件
·work //Tomcat的工作目录
(五)tomcat配置
1、server.xml配置
(1)整体结构:
Server.xml包含的元素有
它们可分为四大类:
顶层类元素:有
连接器类元素:有
容器类元素:有
嵌套类元素:有
(2)配置
属性说明:
属性 |
说明 |
port |
指定一个端口,这个端口负责监听关闭Tomcat的请求 |
shut down |
向以上端口发送的关闭服务器的命令字符串,通常为“SHUTDOWN” |
对于一个已经开启的tomcat服务器,可以在cmd下使用telnet localhost 8005命令进行连接,然后输入“SHUTDOWN”命令就可以关闭服务器。
Service是一个集合,它由一个或者多个Connector以及一个Engine组成,这个Engine负责处理所有Connector所获得的客户请求。每个Service元素只能有一个Engine元素。Service本身也不是容器。
属性说明:
属性 |
说明 |
name |
Service的名称 |
属性说明:
属性 |
说明 |
port |
Connector所监听的端口。在浏览器中可以通过输入url:port的方式提交给对应的Connector。因为浏览器的默认端口是80,所以如果把Connector的port设成80的话,可以直接使用url进行访问,不用在后边再跟一个端口号。 |
protocol |
设定Http协议,默认是HTTP/1.1 |
minThreads |
服务器启动时创建的处理用户请求的线程数 |
maxThreads |
可以创建的最大的处理用户请求的线程数 |
minSpareThreads |
最小备用线程数 |
maxSpareThreads |
最大备用线程数 |
acceptCount |
当所有可以使用的处理请求的线程都被用光时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,而返回Connection refused错误。 |
redirectPort |
服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号。(即当请求是https时,将它转发到的端口) |
enableLookups |
如果为true,表示支持域名解析,则可以在web应用中通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名;若为false则不进行DNS 查询,而是返回其ip地址。默认值为true。 |
connectionTimeout |
等待超时的时间数(以毫秒为单位),如果为-1表示不限制客户连接的时间。 |
它处理在同一个
属性说明:
属性 |
说明 |
name |
engine的名称,对应目录 /conf /Catalina |
defaultHost |
默认的处理请求的虚拟主机,至少与下面一个Host的name属性一样。对应 /conf /Catalina /localhost |
Debug |
日志等级。 |
一个
属性说明:
属性 |
说明 |
name |
虚拟主机名,对应目录 /conf /Catalina /localhost |
appBase |
指定虚拟主机的目录,默认为/webapps。它将请求url与该虚拟主机的context进行匹配,并把请求转给对应的context来处理。 |
Debug |
日志等级。 |
autoDeploy |
默认为true,表示如果有新的WEB应用放入appBase并且Tomcat在运行的情况下,自动载入应用。 |
unpackWARs |
如果设置为true,表示把war文件先展开再运行。如果为false则直接运行war文件。 |
代表运行在虚拟主机上的单个web应用。一个
属性说明:
属性 |
说明 |
path |
Web应用名,在使用url访问host下的web应用时,通过http://localhst/ website 的形式。其中localhost为上文所说的host的name,而website就是这里的path。 也就是说当一具请求到来时,engine先根据host name = localhost来确定所要求的主机,再根据context path = website确定用户所请求的web应用。 |
docBase |
Web应用的具体存放路径 |
Debug |
日志等级。 |
autoDeploy |
默认为true,表示如果有新的WEB应用放入appBase并且Tomcat在运行的情况下,自动载入应用。 |
unpackWARs |
如果设置为true,表示把war文件先展开再运行。如果为false则直接运行war文件。 |
2、tomcat-users.xml
在
(六)java软件部署
把web应用在eclipse里面export成war包文件并复制到tomcat/wabapps目录下
将被引用的项目的文件夹也考到tomcat/wabapps目录下
关闭后再次启动tomcat