Tomcat

学习目标和内容

  1. 能够描述Tomcat的使用场景
  2. 能够简单描述Tomcat的工作原理
  3. 能够实现部署安装Tomcat
  4. 能够实现配置Tomcat的service服务和自启动
  5. 能够实现Tomcat的Host的配置
  6. 能够实现Nginx反向代理Tomcat
  7. 能够实现Nginx负载均衡到Tomcat多实列

一、Tomcat介绍

简介

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat支持最新的Servlet和JSP规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

工作原理图示

coyote是tomcat的Connector框架的名字,简单说就是coyote来处理底层的socket,并将http请求、响应等字节流层面的东西,包装成Request和Response两个类(这两个类是tomcat定义的,而非servlet中的ServletRequest和ServletResponse),供容器使用

  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(如果匹配不到就把该请求交给路径名为“ ”的Context去处理)。

5、path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的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。

Tomcat同类型软件:

WebSphere IBM

Weblogic Oracle

Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。

安装和配置

安装方式介绍

①yum方式安装 加载epel源,版本目前为tomcat7.0

②二进制方式安装 直接下载,部署好java环境,即可运行(推荐)

③源码方式安装 需要下载Apache Ant进行编译安装

二进制安装

①上传获取软件

②部署java环境

shell > tar zxvf jdk-10.0.1_linux-x64_bin.tar.gz

shell > mkdir /usr/local/java

shell > mv jdk-10.0.1 /usr/local/java/jdk-10.0.1

shell > export JAVA_HOME=/usr/local/java/jdk-10.0.1 >> /etc/profile

shell > . /etc/profile

③部署tomcat

shell > tar xvf apache-tomcat-9.0.11.tar.gz

shelll > mv apache-tomcat-9.0.11 /usr/local/tomcat

软件部署之后的目录结构

目录介绍

bin 存放启动和关闭Tomcat的脚本文件

conf 存放Tomcat服务器的各种全局配置⽂文件,其中最重要的是server.xml和web.xml

lib 存放Tomcat服务器所需的各种JAR文件

logs 存放Tomcat执行时的日志文件 、

temp 此目录是tomcat存放的临时文件

webapps tomcat默认存放应用程序的目录,好比apache的默认网页存放路径是/var/www/html一样

work 用于存放JSP应用程序在部署时编译后产生的class文件

docs tomcat文档

examples tomcat自带的一个独立的web应用程序例子

host-manager tomcat的主机管理应用程序

manager tomcat的管理应用程序

ROOT 指tomcat的应用程序的根,如果应用程序部署在ROOT中,则

可直接通过http://ip:port 访问到

catalina.policy 配置tomcat对文件系统中目录或文件的读、写执行等权限,及对一些内存,session等的管理权限

catalina.properties 配置tomcat的classpath等

context.xml tomcat的默认context容器

logging.properties 配置tomcat的日志输出方式

server.xml tomcat的主配置文件

tomcat-users.xml tomcat的角色(授权用户)配置文件

web.xml tomcat的应用程序的部署描述符文件

启动相关说明

tomcat的相关管理命令在$prefix/bin目录下

经常使用的命令:

catalina.sh

configtest.sh

shutdown.sh

startup.sh

version.sh

①测试启动tomcat

shell > /usr/local/tomcat/bin/startup.sh

shell > ps aux |grep tomcat

shell > netstat -lntp |grep 8080

②查看页面效果

③测试关闭tomcat

配置服务

tomcat提供了方便的启动命令脚本,但是却没有提供服务器中经常管理使用的service脚本。可以自行编写服务管理脚本

配置开机自启动服务

根据编写的server脚本,通过chkconfig管理即可

自行编写的service脚本,使用chkconfig管理启动,需要加入chkconfig参数

企业中常见使用方式

简单代码测试

①默认访问目录

②编写测试文件

③查看测试效果

基于域名访问的Host配置

tomcat单实例运行多个tomcat应用的案列

①建立项目目录并写入测试文件

②编辑配置文件

shell > /usr/local/tomcat/conf/server.xml

③检测配置并重启

④访问主机解析域名

⑤测试访问

服务器状态查看

默认访问报错

①去掉访问IP限制

②开启访问权限

③查看页面

应用管理查看

①测试关闭

②访问测试

start之后即可重新访问正常显示

虚拟机Host管理查看

上面遇到的类似的错误

根据以上配置解决即可

Nginx前端反向代理

LNMPA nginx 前端服务器返回静态资源 apache+phpmod解析php程序更加稳定

实际业务环境中,用户是直接通过域名访问。基于协议一般是http、https等。默认tomcat运行在8080端口。一般会通过前端服务器反向代理到后端tomcat的方式,来实现用户可以直接通过域名访问到tomcat的webapp

实现配置

出现的问题:

403权限问题:禁止访问了

①目录权限问题

②禁止了IP访问

解决方案:

在location jsp反向代理端加入:

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

Nginx负载均衡

随着业务的发展,单实例服务已经不能够满足业务使用需要。

pv、qps、DAU

单实例无法满足,扩容为多实例

常见的业务运行方式

单实例单应用 一个tomcat一个webapps

单实例多应用 一个tomcat多个webapps host

多实例单应用 多个tomcat同一个webapps

多实例实现方式:①多台服务器一个运行一个实例(性能) ②单台服务器允许多个实 例(监听不同的端口,性价比高)

多实例多应用

业务流程图示

实现操作:

①创建多实例,复制一份tomcat

②配置tomcat1实例的启动参数 三个端口(服务端口,shutdown,ajo)

③检测配置分别启动服务

shell > /usr/local/tomcat1/bin/configtest.sh

shell > /usr/local/tomcat1/bin/configtest.sh

shell > /usr/local/tomcat/bin/starup.sh

shell > /usr/local/tomcat/bin/starup.sh

④在LB服务器Nginx进行配置负载均衡

⑤测试效果查看

为了能够实际查看到效果,可以修改其中一个tomcat示列中的代码以示区别

商业项目部署

项目介绍

Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki。使用简单,但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论,信息推送。

项目部署

http://blog.51cto.com/caiyuanji/2115500

①获取软件包

shell >https://www.atlassian.com/software/confluence/downloads/binary/atlassian-confluence-6.11.0-x64.bin

②建立一个Mysql用户使用

shell > grant all privileges on confluence.* to 'confluenceuser'\@'127.0.0.1'

identified by '123456';

shell > flush privileges;

③项目代码解压安装

shell > chmod +x atlassian-confluence-6.11.0-x64.bin

shell > ./atlassian-confluence-6.11.0-x64.bin

Confluence监听8090端口,可以在 /opt/atlassian/confluence/conf目录下

的server.xml中更改

④配置数据库连接

shell > tar xvfmysql-connector-java-5.1.47.tar

shell > cd mysql-connector-java-5.1.47

shell > cp mysql-connector-java-5.1.47.jar /opt/atlassian/confluence/lib/

④web配置

直接第一个页面,选择第二项,自己在本地数据库进行创建使用

生成listen码

连接数据库时,需要选择mysql的jdbc模式

填写好对应的用户名称和密码和对应的数据库,即可进行安装

项目测试使用

在实际项目部署中,还有一种情况,直接上传一个war的包,直接启动,会自动释放文件。可以直接使用了