zoukankan      html  css  js  c++  java
  • Tomcat介绍

    Tomcat介绍

    Tomcat

    	Tomcat服务器是Apache组织开发的一种JSP引擎同时支持Servlet,本身具有Web服务器的功能,可以作为独立的Web服务器来使用。
    	Tomcat 是一种具有JSP环境的Servlet容器,Servlet容器是代替用户管理和调用 Servlet的运行时外壳。
    		JSP(Java Server Pages)是一种运行于服务器端的动态网页开发技术,它基于Java技术,执行JSP时需要在Web服务器上架设一个编译JSP网页的引擎。
    		Servlet容器,负责处理客户请求,当客户请求来到时,Servlet容器获取请求,然后调用某个Servlet,并把Servlet的执行结果返回给客户。当客户请求某个资源时,Servlet容器使SERVLETREQUEST对象把客户的请求信息封装起来,然后调用JAVA Servlet API中定义的Servlet的一些生命周期方法,完成Servlet的执行,接着把Servlet执行的要返回给客户的结果封装到SERVLETRESPONSE对象中,最后SERVLET容器把客户的请求发送给客户,完成为客户的一次服务过程。
    		
    	Tomcat作为Web服务器方面,Tomcat处理静态HTML页面时不如Apache迅速,也没有Apache健壮,所以我们一般将Tomcat与Apache配合使用,让Apache对网站的静态页面请求提供服务,而Tomcat作为专用的JSP引擎,提供JSP解析,以得到更好的性能。
    	
    	Tomcat本身就是Apache的一个子项目,所以Tomcat对Apache提供了强有力的支持,对于大多数网站来说,Tomcat是一个很不错的选择。
    	
    	Tomcat 在严格意义上并不是一个真正的应用服务器,它只是一个可以支持运行Serlvet/JSP的Web容器,不过Tomcat也扩展了一些应用服务器的功能,如JNDI,数据库连接池,用户事务处理等等。
    	
    	Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
    	
    	Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。
    	
    	Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。
    	
    	Tomcat处理静态HTML的能力不如Apache服务器。
    	
    	Tomcat以面向对象的方式运行,它可以在运行时动态加载配置文件中定义的对象结构,这有点类似于apache的httpd模块的调用方式。
    

    Tomcat运行环境

    	tomcat使用java语言来编写,tomcat和php一样都是用来处理动态程序的(也可以解析静态资源)。
    	tomcat可以处理.jsp或者.do结尾的动态文件,处理时并不是tomcat本身去处理,而是交给后端的jvm来处理,也就是java虚拟机来处理,处理之前先装入tomcat的类文件,然后由jvm来处理,所以安装tomcat必须先安装JDK(Java Development Kit)。
    	java开发工具箱在java虚拟机之上,安装了JDK就相当于安装java虚拟机,JDK有两种开源的软件可以安装,OpenJDK和Oracle JDK.
    	Java代码的运行:
    		*.java(source code) --> javac --> *.class(bytecode)
    	jvm:
    		class loader,加载程序的类文件,及程序的类文件依赖到的其它的类文件而后运行,整个运行表现为一个jvm进程。
    	JVM运行时区域:
    		方法区:
    			线程共享,用于存储被JVM加载的class信息、常量、静态变量、方法等;
    		堆:
    			是jvm所管理的内存中占用空间最大的一部分,也是GC管理的主要区域,存储对象;
    		Java栈:
    			线程私有,存储线程自己的局部变量;
    		PC寄存器:
    			线程私有的内存空间,程序的指令指针;
    		本地方法栈:
    	JDK:
    		了解当前的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.	
    			CentOS 7:
    				VERSION:1.6.0, 1.7.0, 1.8.0
    			注意:多版本并存时,可使用 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
    	Java 2 EE:
    		CGI: Common Gateway Interface
    		Servlet:
    			类库;web app;
    			Servlet container,Servlet Engine
    		JSP: Java Server Page
    				类库:
    					<html>
    						<title>TITLE</title‘
    						>
    						<body>
    							<h1>...</h1>
    							<%
    								... java code...
    							%>
    						</body>
    					</html>
    			.jsp -->jasper--> .java --> javac --> .class --> jvm 
    			注意:基于jasper将静态输出的数据转为java代码进行输出,结果为servlet规范的代码;
    		JSP Container:
    			JSP + Servlet Container
    			Java Web Server:JWS
    			ASF:JServ
    				O'Reilly
    				Tomcat 3.x
    				Tomcat 4.x
    					Catalina
    				http://tomcat.apache.org/
    			商业实现:
    				WebSphere, WebLogic, Oc4j, Glassfish, Geronimo, JOnAS, JBoss, ...
    			开源实现:
    				Tomcat, Jetty, Resin, ...
    		Tomcat: Java 2 EE技术体系的不完整实现; 
    	1、OpenJDK的安装
    		yum install java-1.8.0-openjdk-devel.x86_64 
    		确定JDK是否安装可以使用如下命令
    			java -version    ##可以看到版本,说明安装成功
    	2、Oracle JDK的安装
    		在oracle官方网站上下载jdk-8u151-linux-x64.rpm
    			http://www.oracle.com/technetwork/java/javase/downloads/index.html  
    		rpm -ivh jdk-8u151-linux-x64.rpm 
    		cd /usr/java/
    		ll      ##有两个软链接文件,一个指向的是默认的,一个指向的是最新的,这里只有一个版本,如果有多个版本这两个软链接会分别指向不同的版本
    			total 0
    			lrwxrwxrwx 1 root root  16 Nov  3 21:01 default -> /usr/java/latest    
    			drwxr-xr-x 9 root root 268 Nov  3 21:01 jdk1.8.0_151
    			lrwxrwxrwx 1 root root  22 Nov  3 21:01 latest -> /usr/java/jdk1.8.0_151
    		
    		cd bin/             ##发现有很多java程序文件,因为不在PATH变量里,所以最好定义PATH变量
    		vim  /etc/profile.d/java.sh
    			PATH=/usr/java/latest/bin/:$PATH
    		.  /etc/profile.d/java.sh     ##生效
    		java -version                   ##发现java环境已经准备好了,定义完PATH变量,java虚拟机就会自动开启
    			java version "1.8.0_151"
    			Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
    			Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
    

    Tomcat安装运行

    	安装tomca也有两种方法,一种是base仓库,另外一种就是到官方站点下载,这里在上面准备好的OpenJDK上用base仓库安装,在Oracle JDK上安装编译好的二进制包。
    	1、Base Repo:
    		yum install tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps
    		rpm -q tomcat                         ##查看版本
    		cat /usr/sbin/tomcat                ##可以看到tomcat并不是一个二进制的程序,而是一个脚本文件,通过脚本文件调用java程序。
    		service tomcat start
    		ps -aux          ##发现tomcat启动的是一个java虚拟机程序
    		jps -v            ##可以看到启动过程,先装载tomcat的类文件完成自举,然后运行java虚拟机程序,所以tamcat真正运行的是一个java程序
    		ss -nlt         ##从这也可以看到运行的是java进程
    			State       Recv-Q Send-Q                                              Local Address:Port                                                Peer Address:Port 
    			LISTEN      0      1                                                ::ffff:127.0.0.1:8005                                                          :::*      users:(("java",5990,52))
    			LISTEN      0      100                                                            :::8009                                                          :::*      users:(("java",5990,48))
    			LISTEN      0      100                                                            :::8080                                                          :::*      users:(("java",5990,47))
    			监听的端口有三个:8080为http协议的接口,8009为ajp协议的接口,8005为管理接口
    		telnet 127.0.0.1 8005
    			Trying 127.0.0.1...
    			Connected to 127.0.0.1.
    			Escape character is '^]'.
    			SHUTDOWN   
    			Connection closed by foreign host.
    		ss -nlt             ##发现tomcat实例被关闭了,所以这个管理端口监听在本地的8005,这样比较安全,不然谁telnet到这个端口都可以关闭tomcat,不过一般这个端最好不要监听,这样更安全
    		进行安全设置
    			vim /etc/tomcat/server.xml
    			 <Server port="8005" shutdown="SHUTDOWN">
    			把上面的改成port=-1,就表示关闭端口,或者openssl rand -hex 10 生成一个随机数来当shuntdown,这样别人就不知道该怎么关闭了
    		http://172.18.21.106:8080/         ##访问http协议的接口可以看到web站点
    			
    	2、Tomcat binary release
    		在官方网站上下载
    			http://tomcat.apache.org/
    		tomcat是属于apache旗下的产品,这里下载的是apache-tomcat-7.0.82.tar
    		tar -xvf apache-tomcat-7.0.82.tar.gz -C /usr/local
    		ln -s apache-tomcat-7.0.82/ tomcat
    		useradd tomcat                     ##运行tomcat时最好以普通用户的身份运行,所以创建一个tomcat用户
    		chown -R root:tomcat ./*       ##修改tomcat目录下的文件的所有者和所属组,这里只修改所属组为tomcat是因为怕tomcat账号被别人盗用后,登陆此账号后修改tomcat内的二进制程序文件
    		chown -R tomcat ./{logs,temp,work,webapps,conf}    ##将这些目录的所有者修改为tomcat,因为在执行tomcat时有可能要修改这些目录内的文件
    		vim /etc/profile.d/tomcat.sh
    			PATH=/usr/local/tomcat/bin/:$PATH
    		. /etc/profile.d/tomcat.sh
    		su - tomcat
    		$catalina.sh start       ##利用这个命令来启动和关闭tomcat
    		$catalina.sh --help    
    		$ss -nlt                     ##发现端口已经打开
    		$ps -aux                   ##发现是以tomcat的身份在运行,如果用root用户去开启tomcat会发现tomcat是以root的身份在运行
    		catalina.sh version
    			Using CATALINA_BASE:   /usr/local/tomcat
    			Using CATALINA_HOME:   /usr/local/tomcat
    			Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    			Using JRE_HOME:        /usr/java/latest
    			Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    			Server version: Apache Tomcat/7.0.82      ##可以看到tomcat的版本
    			Server built:   Sep 29 2017 12:23:15 UTC
    			Server number:  7.0.82.0
    			OS Name:        Linux
    			OS Version:     3.10.0-514.el7.x86_64
    			Architecture:   amd64
    			JVM Version:    1.8.0_151-b12                    ##java虚拟机的版本
    			JVM Vendor:     Oracle Corporation
    		catalina.sh --help
    			debug             	在调试器中启动Catalina
    			debug -security   	采用安全管理调试Catalina
    			jpda start        	在JPDA调试器中启动Catalina
    			run              	在当前窗口启动Catalina
    			run -security    	采用安全管理在当前窗口中启动
    			start             	在单独的窗口中启动Catalina
    			start  -security  	在单独的窗口中采用安全管理启动
    			stop              	停止Catalina,等待5秒来进行进程停止
    			stop n            	停止Catalina,等待N秒来进行进程停止
    			stop -force       	停止Catalina,等待5秒,若还在运行则使用kill -KILL来停止进程运行
    			stop n -force    	停止Catalina,等待n秒,若还在运行则使用kill -KILL来停止进程运行
    			configtest       	在server.xml上运行基础同步检查-检查结果的退出代码
    			version          	显示版本
    

    Tomcat程序环境

    	rpm -ql tomcat
    		/etc/logrotate.d/tomcat
    		/etc/sysconfig/tomcat                ##特殊服务配置文件
    		/usr/bin/tomcat-digest
    		/usr/bin/tomcat-tool-wrapper
    		/usr/lib/systemd/system/tomcat.service
    		/usr/lib/systemd/system/tomcat@.service
    		/usr/libexec/tomcat
    		/etc/tomcat                               ##配置文件目录
    		/etc/tomcat/server.xml   	     ##主配置文件
    		/etc/tomcat/tomcat.conf            ##全局配置文件
    		/etc/tomcat/tomcat-users.xml   ##用户认证的账号和密码文件;角色(role),用户(User),此文件在tomcat启动时被装入内存
    		/usr/share/tomcat/webapps      ##webapp的默认根目录
    		/usr/sbin/tomcat
    		/var/lib/tomcat
    		/var/lib/tomcats
    		/var/log/tomcat
    		/var/log/tomcat/catalina.out
    	tomcat的目录结构
    		bin:脚本目录,及启动时用到的类。
    			catalina.sh,用于启动和关闭tomcat服务器
    			configtest.sh,用于检查配置文件
    			startup.sh,启动Tomcat脚本
    			shutdown.sh,关闭Tomcat脚本
    		conf:配置文件目录。
    			server.xml,Tomcat 的全局配置文件
    			web.xml,为不同的Tomcat配置的web应用设置缺省值的文件
    			tomcat-users.xml,Tomcat用户认证的配置文件
    		lib:库文件,Java类库,jar。
    			包含被Tomcat使用的各种各样的jar文件,在Linux/UNIX上任何这个目录中的文件将被附加到Tomcat的classpath中。
    		logs:日志文件目录。
    			localhost_access_log.2013-09-18.txt,访问日志
    			localhost.2013-09-18.log,错误和其它日志
    			manager.2013-09-18.log,管理日志
    			catalina.2013-09-18.log,Tomcat启动或关闭日志文件
    		temp:临时文件目录;
    		webapps:webapp的默认目录,即Tomcat的主要Web发布目录。
    			含Web应用的程序 (JSP、Servlet和JavaBean等)
    			
    		work:工作目录,存放编译后的字节码文件,即Tomcat将翻译JSP文件到的Java文件和class文件放在这里
    			由Tomcat自动生成,这是Tomcat放置它运行期间的中间(intermediate)文件(诸如编译的JSP文件)地方。 
    			如果当Tomcat运行时,你删除了这个目录那么将不能够执行包含JSP的页面。
    
    	rpm包安装的程序环境:
    		配置文件目录:/etc/tomcat
    			主配置文件:server.xml 
    		webapps存放位置:/var/lib/tomcat/webapps/
    			examples
    			manager
    			host-manager
    			docs
    		Unit File:tomcat.service
    		环境配置文件:/etc/sysconfig/tomcat
    	
    	Tomcat的配置文件默认存放在$CATALINA_HOME/conf目录中,主要有以下几个:
    		server.xml:主配置文件;
    		web.xml:
    		context.xml:tomcat-users.xml:;
    		catalina.policy:; 
    		catalina.properties:;
    		logging.properties:;
    		server.xml:
    			 Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息。
    		web.xml:
    			每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF目录中,此文件为所有的webapps提供默认部署相关的配置。
    			遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息。
    			web.xml基于Java Servlet规范,可被用于每一个Java servlet容器,通常有两个存放位置,$CATALINA_BASE/conf和每个Web应用程序(通常是WEB-INF/web.xml)。
    			Tomcat在deploy一个应用程序时(包括重启或重新载入),它首先读取conf/web.xml,而后读取WEB-INF/web.xml。
    		tomcat-user.xml:
    			用户认证的账号和密码文件,角色(role),用户(User),此文件在tomcat启动时被装入内存。
    			Realm认证时用到的相关角色、用户和密码等信息,Tomcat自带的manager默认情况下会用到此文件,在Tomcat中添加/删除用户,为用户指定角色等将通过编辑此文件实现。
    		catalina.policy:
    			Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力。
    			当使用-security选项启动tomcat时,用于为tomcat设置安全策略。
    		catalina.properties:
    			Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数。
    			Tomcat内部package的定义及访问相关的控制,也包括对通过类装载器装载的内容的控制,Tomcat在启动时会事先读取此文件的相关设置。
    		logging.properties: 
    			日志系统相关的配置。
    			Tomcat通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的组件级别以及日志文件的存在位置等。
    		context.xml:
    			所有host的默认配置信息。
    			每个webapp都可以使用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF目录中,此文件为所有的webapps提供默认配置。
    	
    	JSP WebAPP的组织结构:
    			/:     webapps的根目录
    			index.jsp:主页;
    			WEB-INF/:当前webapp的私有资源路径,通常用于存储当前webapp的web.xml和context.xml配置文件;
    			META-INF/:类似于WEB-INF/;
    			classes/:类文件,当前webapp所提供的类;
    			lib/:类文件,当前webapp所提供的类,被打包为jar格式;
    
    	Tomcat的Web应用程序目录组成
    		页面内容等文件的存放位置:
    			*.html, *.jsp等可以有许多目录层次,由用户的网站结构而定,实现的功能应该是网站的界面,也就是用户主要的可见部分。
    			除了HTML文件、JSP文件外,还有js(JavaScript)文件和css(样式表)文件以及其他多媒体文件等。
    		Web-INF/web.xml 
    			这是一个Web应用程序的描述文件。
    			这个文件是一个XML文件,描述了Servlet和这个Web应用程序的其他组件信息,此外还包括一些初始化信息和安全约束等等。
    		Web-INF/classes/ 
    			这个目录及其下的子目录应该包括这个Web应用程序的所有JavaBean及Servlet等编译好的Java类文件(*.class)文件,以及没有被压缩打入JAR包的其他class文件和相关资源。
    			注意,在这个目录下的Java类应该按照其所属的包层次组织目录(即如果该*.class文件具有包的定义,则该*.class文件应该放在.WEB-INFclasses包名下)。
    			这个目录下的类文件也可以打包成JAR文件,并可以放到WEB-INF下的lib目录下,如将 classes目录下的各个*.class文件打包成WebMis.jar文件(jar cvf WebMis.jar *.*)
    		common/lib/ 
    			这个目录下包含了所有压缩到JAR文件中的类文件和相关文件。
    			比如:第三方提供的Java库文件、JDBC驱动程序等。
    			其中msbase.jar、mssqlserver.jar、msutil.jar文件为SqlServer2000的JDBC驱动程序
    			其中servlet-api.jar和jsp-api.jar为Servlet和JSP的API所在的包
    		
    	webapp归档格式:
    		tree /usr/share/tomcat/webapps/ 可以看到根目录结构
    		.war:webapp,一般生产中用到的都是这种格式的打包好的程序文件,只要把它扔到网页程序文件存放的目录下就会自动展开这个文件,不用解压包
    		.jar:EJB的类打包文件(类库);
    		.rar:资源适配器类打包文件;
    		.ear:企业级webapp;
    		
    	部署(deploy) webapp的相关操作:
    		deploy:将webapp的源文件放置于目标目录(网页程序文件存放目录),配置tomcat服务器能够基于web.xml和context.xml文件中定义的路径来访问此webapp,将其特有的类和依赖的类通过class loader装载至JVM。
    			部署有两种方式:
    				自动部署:auto deploy
    				手动部署:+
    					冷部署:把webapp复制到指定的位置,而后才启动tomcat;
    					热部署:在不停止tomcat的前提下进行部署;
    						热部署工具:manager、ant脚本、tcd(tomcat client deployer)等;					
    		undeploy:拆除(反部署),停止webapp,并从tomcat实例上卸载webapp;
    		start:启动处于停止状态的webapp;
    		stop:停止webapp,不再向用户提供服务;其类依然在jvm上;
    		redeploy:重新部署;
    
    	tomcat的两个管理应用:
    		manager
    		host-manager
    
    	示例:
    		手动提供一测试类应用,并冷部署:
    			# mkidr  -pv  /usr/local/tomcat/webapps/test/{classes,lib,WEB-INF}
    			创建文件/usr/local/tomcat/webapps/test/index.jsp 
    				<%@ page language="java" %>
    				<%@ page import="java.util.*" %>
    				<html>
    					<head>
    						<title>Test Page</title>
    					</head>
    					<body>
    						<% out.println("hello world");%>
    					</body>
    				</html>
    
  • 相关阅读:
    工作中的几个问题
    linux初学之二
    VMWARE虚拟机卡死
    记昨天、今天的部分工作内容及问题
    linux初学之一
    今日阅读项目源码
    python POST XML
    python的超简单WEB服务器
    在notepad++中运行python
    安装python图形库:Matplotlib
  • 原文地址:https://www.cnblogs.com/shenxm/p/8466560.html
Copyright © 2011-2022 走看看