Tomcat一 今天讲一下tomcat的安装和使用,当然在这之前,要先了解一下开发语言——java。 一,java基础

1,计算机语言分类: 硬件级:微码编程,汇编语言 系统级:C , C++ , ... 应用级:Java , PHP , Python , Ruby , Perl , C# , ... 程序:指令+数据 过程式编程:以指令为中心,数据服务于代码; 对象式编程:以数据为中心,指令服务于数据; 2,Java是面向对象的,面向过程和面向对象的区别: (1)面向过程程序设计方法采用函数(或过程)来描述对数据的操作,但又将函数与其操作的数据分离开来;面向对象程序设计方法将数据和对数据的操作封装在一起,作为一个整体来处理。 (2)面向过程程序设计方法以功能为中心来设计功能模块,难于维护;面向对象程序设计方法以数据为中心来描述系统,数据相对于功能而言具有较强的稳定性,因此更易于维护。 (3)面向过程程序的控制流程由程序中预定顺序来决定;面向对象程序的控制流程由运行时各种事件的实际发生来触发,而不再由预定顺序来决定,更符合实际需要。预定顺序由运行时各种事件的实际发生来触发。 (4)面向对象程序设计方法可以利用框架产品(如MFC , Microsoft Foundation Classes)进行编程。面向对象和面向过程的根本差别,在于封装之后,面向对象提供了面向过程不具备的各种特性,最主要的,就是继承和多态。 面向对象的优点: 面向对象技术具有程序结构清晰,自动生成程序框架,实现简单,可有效地减少程序的维护工作量,代码重用率高,软件开发效率高等优点。 3,php开发技术和java开发技术应用区别: 技术性比较: 从技术架构来说,Java语言相比PHP有明显的优势,Java使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。PHP只能实现简单的分布式两层或三层的架构,而Java可以实现多层架构。数据库层、应用逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用Java的web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。从数学运算和数据库访问速度来讲,Java的性能也优于PHP。实际上,对于跨平台的大型的企业应用系统来讲,Java几乎已经成为唯一的选择。 适用性比较: PHP适合于快速开发,中小型应用系统,开发成本低,能够对变动的需求作出快速的反应。而Java适合于开发大型的应用系统,应用的前景比较广阔,系统易维护,可复用性较好。还有,同样功能的系统用Java开发的系统要比PHP开发的系统的价格要高。Java是纯面向对象开发,功能强大 ,分支众多,没有Java不能做的软件。C/S也好B/S也好。从功能上讲,没有语言可以和Java相比。PHP属于后起之秀,吸收了Java和C以及perl等语言的部分优点,专注互联网领域。 4,JAVA运行原理 : Java具有跨平台的优点,在Java中引入了虚拟机制概念,即在机器 和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode)(class文件的内容),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。 运行过程为: Java编译器(编译)-----> 虚拟机(解释执行)-----> 解释器(翻译)-------> 机器码 5,Java三大分支: J2SE --java standard edition--标准版本,这个是下面两个的基础,一般是位于客户端的应用 J2ME --java Micro edition --一般位于嵌入式应用,例如手机游戏 J2EE --java Enterprise Edition --一般为服务器端程序的应用:例如JSP站点 6,静态网站技术和动态网站技术区别: Web服务器习惯处理静态页面,所以需要一个程序来帮忙处理动态请求(如当前时间)。Web服务器程序会将动态请求转发给帮助程序,帮助程序处理后,返回处理后的静态结果给web服务器程序。这样就避免了web服务器程序处理动态页面。Servlet 的本质是一个帮助程序。 什么是servlet: 早期的web应用主要用于浏览新闻等静态页面,用户通过HTTP协议请求服务器上的静态页面,服务器上的web服务器软件接收到请求后,读取URI标示的资源,再加上消息报头发送给客户端浏览器,浏览器负责解析HTML,将结果呈现出来。 然而随着时间发展,用户已经不满足于仅浏览静态页面。用户需要一些交互操作,获取一些动态结果。如果基于HTTP协议实现服务器端软件增强功能太过复杂,所以需要一些扩展机制来实现用户想要的功能。早期使用的web服务器扩展机制是CGI(Common Gateway Interface,公共网关接口)。使用这种方法,用户单击某个链接或输入网址来访问CGI程序,web服务器收到请求后,运行该CGI程序 ,对用户请求进行处理,紧接着将处理结果并产生一个响应,该响应被返回给web服务器,web服务器对响应进行包装,以HTTP响应的方式返回给浏览器。 CGI程序在一定 程度上解决了用户需求。不过还存在一些不足之处,如CGI程序编写困难,响应时间较长,以进程方式运行导致性能受限。于是1997年,sun公司推出了servlet技术,作为java阵营的CGI解决方案。 Java servlet(java服务器小程序)是一个基于java技术的web组件,运行在服务器端,它由servlet容器所管理,用于生成动态的内容。Servlet是平台独立的java类,编写一个servlet,实际上就是按照servlet规范写一个java类。Servlet 被编译为平台独立的字节码,可以被动态地加载支持java技术的web服务器中运行。 Servlet容器也叫做servlet引擎,是web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应,Servlet没有main方法,不能独立运行,它必须被部署到servlet容器中,由容器来实例化和调用servlet的方法(如doGet()和doPost()),servlet容器在servlet的生命周期内包容和管理servlet。在jsp技术推出后,管理和运行servlet/JSP的容器也称为web容器。 有了servlet之后,用户通过单击某个链接或者直接在浏览器的地址栏中输入URL来访问servlet,web服务器接收到该请求后,并不是将请求直接交给servlet,而是交给servlet容器。Servlet容器实例化servlet,调用servlet的一个特定方法对请求进行处理,并产生一个响应。这个响应由servlet容器返回给web服务器,web服务器包装这个响应,以HTTP响应的形式发送给web浏览器。 Servlet容器能提供什么? A 、通信支持:利用容器提供的方法,你能轻松的让servlet与web服务器对话,而不用自己建立servetsocket,监听某个端口,创建流等等。容器知道自己与web服务器之间的协议,所以你的servlet不用担心web服务器(如Apache)和你自己的web代码之间的API,只需要考虑如何在servlet中实现业务逻辑(如处理一个订单)。 B、生命周期管理:servlet容器控制着servlet的生与死,它负责加载类、实例化和初始化servlet,调用servlet方法,以及使servlet实例被垃圾回收,有了servlet容器,你不需要太多的考虑资源管理。 C、多线程支持:容器会自动为它所接收的每个servlet请求创建一个新的java线程。针对用户的请求,如果servlet已经运行完相应的http服务方法,这个线程就会结束。这并不是说你不需要考虑线程安全性,其实你还会遇到同步问题,不过这样能使你少做很多工作。 声明方式实现安全:利用sevlet容器,你可以使用xml部署描述文件来配置和修改安全性,而不必将其硬编码写到servlet类代码中。 D、JSP支持:servlet容器负责将jsp代码翻译为真正的java代码。 7,JVM运行时区域: 方法区:线程共享 ;用于存储被JVM加载的class信息、常量、静态变量、方法等; 堆:是jvm所管理的内存中占用空间最大的一部分;也是GC管理的主要区域;存储对象; Java栈:线程私有,存储线程自己的局部变量; PC寄存器:线程私有的内存空间,程序的指令指针; 本地方栈:

8, 二,java环境的搭建: 1, yum install -y java-1.8.0-openjdk-devel.x86_64 下载jdk安装包,并安装。 rpm -ivh jdk-8u144-linux-x64.rpm 安装完成后,配置JAVA_HOME环境变量,指向java的安装路径; [root@localhost java]# vim /etc/profile.d/java.sh export JAVA_HOME=/usr/java/latest export PATH=$JAVA_HOME/bin:$PATH

[root@localhost java]# . /etc/profile.d/java.sh [root@localhost java]# echo $JAVA_HOME /usr/java/latest

三,TOMCAT 1,Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的servlet和JSP规范部是能在Tomcat中得到体现,Tomcat 5支持最新的Servlet 2.4和JSP 2.0规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的web应用服务器。 Tomcat服务器是一个免费的开放源代码的web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首先选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache服务器的扩展,但运行时它是独立运行的,所以当你运行Tomcat时,它实际上作为一个与Apache独立的进程单独运行的。

2.Tomcat的核心分为3个部分: (1)Web容器---处理静态页面; (2)Catalina --- 一个servlet容器-----处理servlet; (3)还有就是JSP容器,它就是把JSP页面翻译成一个servlet。 Web应用服务器并不是只有Tomcat,目前公司和企业使用的web服务器还有Websphere,WebLogic,Jetty,JBoss等等,但是大多数是收费的。针对我们平时开发的大多数项目,Tomcat的性能已经能够满足我们的要求,因此大多数企业中的开发者或者小公司还是常用Tomcat作为应用服务器。

  1. JSP和servlet的区别: JSP出现的背景:servlet体系是基于B/S架构开发web应用程序,使用servlet类将HTTP请求和响应封装在标准java类中来实现各种web应用方案的。当大量的B/S架构程序开发出来以后出现了很多问题:首先servlet类有大量冗余代码,其次是开发servlet的没法做到有精美的页面效果。所以sun提出将服务端代码添加在已经设计好的静态页面上,经过JSP容器对JSP文件进行自动解析并转换成servlet类来交给web服务器运行。 所以JSP在本质上就是servlet,但是两者的创建方式不一样。Servlet都是由java程序代码构成,用于流程控制和事务处理,通过servlet来生成动态网页很不直观。而JSP由HTML代码和JSP标签构成,可以方便地编写动态网页。 另外总结一下,JSP与servlet主要有两方面的不同: 编译:JSP修改后可以立即看到结果,不需要编译,而servlet需要编译; 转换:JSP是动态网页开发技术,是运行在服务器端的脚本语言,而servlet是web服务器端编程技术。所以JSP运行时就是转换为servlet,也就是java程序来执行。 通俗而言:jsp就是在html里面写java代码,servlet就是在java里面写html代码。。。其实jsp经过容器解释之后就是servlet.

Tomcat和servlet的关系:

Tomcat是sun公司的JSWDK(JavaServer Web DevelopmentKit,是SUN公司推出的小型servlet/JSP调试工具)的基础上发展出来的一个优秀的完全由java语言编写的servlet容器; Servlet,顾名思义,是一种运行在服务器上的小插件。Servlet最常见的用途就是扩展web服务器的功能,可作为非常安全的,可移植的、易于使用的CGI代替品。Servlet具有以下特点: 提供了可被服务器动态加载并执行的程序代码,为客服端的请求提供相应服务;servlet完全用java语言编写,因此要求运行servlet的服务器必须支持java语言,servlet 完全运行在服务哭喊 端,因此它不依赖于浏览器。不管浏览器是否支持java语言,都能请求访问服务器端的servlet;

4.Tomcat服务器接受客户请求并做出响应的过程如下: 1)客户端(通常都是浏览器)访问web服务器,发送HTTP请求。 2)Web服务器接收到请求后,传递给servlet容器。 3)Servlet容器加载servlet,产生servlet实例后,向其传递表示请求和响应的对象。 4)Servlet实例使用请求对象得到客户端的请求信息,然后进行相应的处理 5)Servlet实例将处理结果通过响应对象发送回客户端,容器负责确保响应正确送出,同时将控制返回给web服务器。 5.JRE: Java Runtime Enivronment JDK: Java Development Kit JRE JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境 ,是提供给想运行java程序的用户使用的。 JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole, jvisualvm等工具软件 ,还包含了java程序编写所需的文档和demo例子程序。如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。JRE根据不同操作系统和不同JRE提供商(IBM, ORACLE等)有很多版本,最常用的是Oracle公司收购sun公司的JRE版本。 6.java虚拟机、tomcat、servlet关系:

Tomcat作为独立的web服务器来单独运行,servlet容器组件作为web服务器中的一部分而存在,这是tomcat的默认工作模式。在这种模式下,tomcat是一个独立运行java程序,需要启动一个java虚拟机(JVM)进程来运行tomcat; 7.与其他web服务结合的servlet容器用法 在这种模式下,tomcat分为web服务器插件和servlet容器组件两部分。Web服务器插件在其它的web服务器进程外部地址空间启动一个java虚拟机,servlet容器组件在此java虚拟机中运行。如有客户端发出调用servlet请求,web服务器插件获得对此请求的控制并转发给servlet容器组件(采用IPC通讯机制,即进程间通信的一种机制)。 8.安装tomcat 二进制安装: 1)到官网下载二进制安装包(http://tomcat.apache.org/) 2)tar xvf apache-tomcat-8.5.11.tar.gz -C /usr/local/ 3)为方便管理,创建软链接; ln -s /usr/local/apache-tomcat-8.5.11/ /usr/local/tomcat 4)创建环境配置脚本: vim /etc/profile.d/tomcat.sh export CATALINA_BASE=/usr/local/tomcat export PATH=$CATALINA_BASE/bin:$PATH 5)如果不能执行,则赋予执行权限: chmod +x /etc/profile.d/tomcat.sh 6)加载环境配置: source /etc/profile.d/tomcat.sh或. /etc/profile.d/tomcat 7)启动tomcat: catalina.sh start 8)查看tomcat是否正常启动: Yum方式安装: 1)yum install tomcat -y #安装tomcat主程序 2)yum install -y tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps #安装tomcat对应的页面 3)mkdir /var/lib/tomcat/webapps/{ROOT,test}/{WEB-INF,META-INF,classes,lib} -pv #创建页面所需要的工作目录

9.tomcat的目录结构: bin : 脚本,及启动时用到的类; conf : 配置文件目录; lib : 库文件,java类库,jar; logs : 日志文件目录; temp : 临时文件目录; webapps : webapp的默认目录; work : 工作目录,存放编译后的字节码文件。 10.普通用户启动方式(假设tomcat是关闭的) 1)useradd -r tomcat 2)chown -R tomcat.tomcat /usr/local/tomcat 3)su - tomcat -c ‘catalina.sh start’ 4)这样tomcat就以普通用户开启了。 11.rpm包安装的程序环境: 配置文件目录:/etc/tomcat 主配置文件:server.xml webapps存放位置:/var/lib/tomcat/webapps/ examples manager host-manager docs Unit file: tomcat.service 环境配置文件:/etc/sysconfig/tomcat 12.tomcat的配置文件构成: server.xml : 主配置文件; web.xml : web应用程序描述文件,可以设置tomcat支持的文件类型,都是关于是web应用程序的配置文件 context.xml :可以用来配置数据库之类的信息 tomcat-users.xml :用户认证的账号和密码文件;角色(role),用户(user);此文件在tomcat启动时被装入内存; catalina.policy :当使用-security选项启动tomcat时,用于为tomcat设置安全策略; catalina.properties :java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数; logging.properties :日志系统相关的配置; 13:server.xml配置文件 1)Server: server表示整个的catalina servlet容器。Tomcat提供了server接口的一个默认实现,这通常不需要用户自己去实现。在server容器中,可以包含一个或多个service组件。代表tomcat instance,即表现出的一个java进程;监听在8005端口,只接收“SHUTDOWN”。各server监听的端口不能相同,因此,在同一物理主机启动多个实例时,需要修改其监听端口为不同的端口; 2)service : service是存活在server内部的中间组件,它将一个或多个连接器(connector)组件绑定到一个单独的引擎(Engine)上。用于实现将一个或多个connector组件关联至一个engine组件; 3)connector组件 :连接器(connector)处理与客户端的通信,它负责接收客户请求,以及向客户返回响应结果。在tomcat中,有多个连接器可以使用。常见的有三类http/https/ajp; 4)engine组件:在tomcat中,每个service只能包含一个servlet引擎(engine)。引擎表示一个特定的service的请求处理流水线。作为一个service可以有多个连接器,引擎从连接器接收和处理所有的请求,将响应返回给适合的连接器,通过连接器传输给用户。Servlet实例,即servlet引擎,其内部可以一个或多个host组件来定义站点; 5)host组件: 位于engine内部用于接收请求并进行相应处理 的主机或虚拟主机类似nginx server context组件 一个context表示了一个web应用程序,运行在特定的虚拟主机中,一个host可以包含多个context(代表web应用程序)类似nginx location 14.server.xml请求举例: 1),用户点击网页内容,请求被发送到本机端口8080,被在那里监听的coyote HTTP/1.1 Connector获得 2)Connector把该请求交给它所在的service的engine来处理,并等待engine的回应。 3)engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机host。 4)engine匹配到名为localhost的host(即使匹配不到也把请求交给该host处理,因为该host被定义为该engine的默认主机),名为localhost的host获得请求/test/index.jsp,匹配它所拥有的所有的context。Host匹配到路径为/test的context。 5)path=”/test”的context获得请求/index.jsp,寻找出对应的servlet。Context匹配到URL PATTERN为*.jsp的servlet,对应于jspServlet类。 6)构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost(),执行业务逻辑、数据存储等程序。 7)Context把执行完之后的HttpServletResponse对象返回给Host。 8)Host把HttpServletResponse对象返回给engine 9)engine把HttpServletResponse对象返回Connector 10)connector把HttpServletResponse对象返回给客户Browser 15. 每一个组件都由一个java“类”实现,这些组件大体可分为以下几个类型: 顶级组件:server 服务类组件:service 连接器组件:http , https , ajp ( apache jserv protocol ) 容器类:engine , host , context 部署应用程序的组件 被嵌套类:value , logger , realm , loader , manager , ... 集群类组件:listener , cluster , ... 其组织结构为: <server> <service> <connector/> <connector/> ... <engine> <host> <context/> <context/> ... </host> <host> ... </host> </engie> </service> </server> 16.tomcat配置文件 JSP WebAPP的组织结构: /: webapps的根目录 index.jsp : 主页; ... WEB-INF/ : 当前webapp的私有资源路径;通常用于存储当前webapp的web.xml和context.xml配置文件; META-INF/ : 类似于WEB-INF/; classes/ :类文件,当前webapp所提供的类; lib/ :类文件,当前webapp所提供的类,被打包为jar格式; Webapp归档格式: .war:Web应用程序归档,webapp; .jar : java应用程序归档,EJB的类打包文件(类库); .rar :资源适配器类打包文件; .ear : 企业应用程序归档包,企业级webapp; 简单实现一个站点: 在/usr/local/tomcat/webapps/建一个目录,里面写上文件,在浏览器中输入ip+端口号,就可以访问了 实例: [root@localhost webapps]# pwd /usr/local/tomcat/webapps [root@localhost webapps]# mkdir test [root@localhost webapps]# cd test [root@localhost test]# vim index.jsp <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>Test Page</title> </head> <body> <% out.println("hello world");%> </body> </html> 访问: 17.如何实现访问日志: Tomcat的日志类: %a -远程IP地址 %A - 本地IP地址 %b - 发送的字节数,不包括HTTP头,或“ - ”如果没有发送字节 %B - 发送的字节数,不包括HTTP头 %h - 远程主机名 %H - 请求协议 %l (小写的L)- 远程逻辑从identd的用户名(总是返回' - ') %m - 请求方法 %p - 本地端口 %q - 查询字符串(在前面加上一个“?”如果它存在,否则是一个空字符串 %r - 第一行的要求 %s - 响应的HTTP状态代码 %S - 用户会话ID %t - 日期和时间,在通用日志格式 %u - 远程用户身份验证 %U - 请求的URL路径 %v - 本地服务器名 %D - 处理请求的时间(以毫秒为单位) %T - 处理请求的时间(以秒为单位) %I (大写的i) - 当前请求的线程名称 如图所示:

18.tomcat的部署 部署(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:重新部署; 实例演示(以solo-2.2.0为例):

上传之后,就会在Applications里发现有了solo-22.0,可以对此进行管理,并且在系统中也有了。 也可以停掉(stop)或拆下来不部署(undeploy)

19.tomcat安全配置文件: 以下是Tomcat Manager 4种角色的大致介绍(下面URL中的为通配符): manager-gui 允许访问html接口(即URL路径为/manager/html/) manager-script 允许访问纯文本接口(即URL路径为/manager/text/) manager-jmx 允许访问JMX代理接口(即URL路径为/manager/jmxproxy/) manager-status 允许访问Tomcat只读状态页面(即URL路径为/manager/status/*) admin-gui(HTML UI接口)或admin-script(纯文本接口)。即URL路径为/host-manager 打开下列文件: 将以下注释改为换为第二张图:

重启之后,访问以下页面,将上图中的用户与密码写入,再登录:

Host-Manager

需要定义才能登录访问:

重启tomcat服务 点击登录,如果有认证需认证才能登录