Tomcat(总结整理)

来源:互联网 发布:淘宝怎么发布虚拟宝贝 编辑:程序博客网 时间:2024/06/08 10:00

1. Tomcat简介

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

常见的web服务器还有WebLogicWebSphere等:

WebLogic是BEA公司的产品,是目前应用最广泛的Web服务器,支持J2EE规范。

WebSphere是IBM公司的产品,支持J2EE规范,使用的也不少。

Tomcat官网下载地址:http://tomcat.apache.org/

下载时请注意,不同版本的区别:

.zip为压缩版,解压后即可使用,注意区分操作系统是32位还是64位。

.exe为安装版,安装后使用,注意区分操作系统是32位还是64位。

安装版和解压版基本相同,只不过解压版解压后需要配置环境变量,安装版不需要。

.tar.gz为linux版本.

1.1. Tomcat安装

将解压版.zip包拷贝到要安装的目录下,解压。

注意,在tomcat的安装目录中不允许有空格和中文字符

其实不止tomcat,绝大部分开发相关的软件都对中文和空格支持有问题,所以以后在安装任何软件时都要养成一个习惯:路径中绝对不要有中文和空格!

因为tomcat本身也是java写的程序,运行需要jdk的支持,所以需要通过JAVA_HOME环境变量通知tomcat启动时用的jdk在哪。

要注意的是,不同版本的tomcat要求的jdk的版本是不相同的。

tomcat6 需要 jdk5.0以上版本。

tomcat7 需要 jdk6.0以上版本。

tomcat8 需要jdk7.0以上版本。

所以只需要配置环境变量JAVA_HOME指向tomcat安装的根目录即可,如下图:


安装常见问题:

(1)端口占用问题:

可以在cmd窗口中使用netstat -ano命令查询出哪个程序占用了端口,结束这个程序后再启动tomcat即可。

个人习惯修改tomcat/conf/server.xml Connector 中的 prot 将tomcat监听的端口号从8080 转为 80。

(2)Catalina_home环境变量:

用来指定启动的tomcat的位置,如果没有配置过这个环境变量,则在哪个tomcat中启动,则该tomcat被启动,如果这个环境变量被配置过,无论在哪个tomcat中启动,最终启动的都是该环境变量指定的tomcat。

(3)关闭tomcat服务器:

[tomcat]/bin 目录下 双击shutdown.bat即可关闭服务器。

直接关闭tomcat窗口也可快速关闭服务器,但是这种做法服务器没有执行正常的关闭流程,有时会造成下次启动报错,遇到这种情况只要再执行一次shutdonw.bat即可解决问题。

1.2.  Tomcat目录结构


bin --- 存放tomcat启动和关闭用的bat文件

conf --- 存放tomcat配置文件的目录

lib --- 存放tomcat运行时依赖的jar包

logs --- 存放tomcat运行时产生的日志文件的

temp --- tomcat自己用来存放运行过程中产生的临时文件的目录,不需要我们管理,tomcat自动管理

webapps --- 这是和开发人员关系最大的目录,是用来存放web应用的目录,我们开发的web资源最终要保存在这个目录下,外界就可以访问了

work --- tomcat的工作目录,tomcat在运行时产生的工作文件存放在这个目录

conf/server.xml--tomcat的核心配置文件

1.3.  Tomcat中的基本概念

(1)虚拟主机:tomcat中可以配置管理多个网站,外界在访问这些网站时,并不知道这些网站是运行在同一个tomcat中的,感觉起来就像他们各自运行在各自的虚拟出来的主机中一样,所以将一个网站交给tomcat去管理的过程称为为tomcat配置一台虚拟主机。

(2)web应用:一个虚拟主机包含着许多web资源,但这些web资源不能直接交给虚拟主机管理,需要按照功能将web资源按照一定的目录结构组织成web应用再交给虚拟主机去管理。

(3)虚拟路径映射:将web应用交给虚拟主机管理,为web应用真实路径配置一个对外访问的虚拟的路径的过程叫做web应用的虚拟路径映射。

以上概念如图所示,更好理解:


1.4.  Tomcat配置虚拟主机

(1)配置虚拟主机:

想要配置一台虚拟主机,只需要在[tomcat]/server.xml的<Engin>标签下配置<Host>标签即可:

<Host name=”主机名” appBase=”虚拟主机管理的目录”></Host>

其中“虚拟主机管理的目录”是为当前虚拟主机配置一个虚拟主机管理的目录,可以将web应用放置到该目录下,虚拟主机就会自动管理该web应用了。

<Host name="www.baidu.com" appBase="D:/baidu"></Host>

此时通过浏览器访问http://www.baidu.com发现无法访问。

这是因为还没有配置dns服务器。

(2)DNS服务器:

互联网上有一些专门将域名翻译为对应主机ip的服务器叫做dns服务器(域名解析服务器)专门进行域名到ip的翻译工作。

如果我们想要让www.baidu.com能够访问当前虚拟主机,还需要到dns服务器中进行配置,将www.baidu.com和本机ip地址进行绑定才可以。

但是dns是不能随意修改的!那我们如何进行测试呢?

(3)Hosts文件

C:/windwos/system32/drivers/etc/hosts文件可以模拟dns的功能,浏览器在访问dns之前会首先检查该文件,如果这个文件中配置过域名ip映射,则会直接使用而不再去找dns服务器了。所以我们可以在hosts文件中进行如下配置,如图所示:


再通过浏览器访问,发现成功访问了我们配置的虚拟主机中的web应用。


2. Tomcat集群

之前总结nginx时曾说过,现在电商、互联网架构大部分都采用Nginx+Tomcat的架构。


以下是用Linux虚拟机搭建个简单Nginx+Tomcat集群的架构:

(1)配置三台tomcat(以前用的tomcat版本是7.0,之前配置过懒得再弄一次在8.5上了)


(2)修改tomcat配置文件server.xml按照指定的端口号进行定义(红色为修改的端口和配图

tomcat-8091(8005  8091  8009)


tomcat-80928006  8092  8010



tomcat-8093(同上tomcat-8092配置一样,修改三处端口即可,8007 8093  8011

(3)修改nginx配置文件(nginx.conf


前面的IP地址(192.168.161.129)是在Linux虚拟机上做测试连接的虚拟地址,如果配置到服务器上就相应配置上连接的服务器IP地址即可。


3. Nginx+Tomcat集群解决Session共享的解决办法

问题的由来:访问一个网站时,有两类请求。一种请求叫做无状态的请求,一种请求叫做有状态。

(1)无状态,例如:登录页面,类似这种页面,哪个tomcat给我们响应都是一样的,不需要区分。这是我们最喜欢的。集群的动态伸缩性(增加节点,移除节点)。

(2)有状态,例如:系统登录后,假如用户的请求被转发到tomcat1上,这时系统会写一个当前用户的信息放入session中。这种情况就称为有状态的,

问题就来了:nginx负载均衡后,下一次用户的请求就被转发tomcat2上,tomcat2上没有session。系统就会要求用户去登录,这显然是不合理的。所以把这个问题称作session共享问题。

解决的办法

(1)Session同步:tomcat支持动态将某个tomcat下的session复制到其他的tomcat中。但是这个方式是早期的企业级应用习惯的方式,现在很少使用。

不足:这种方式在集群数量很少时,结果还是可以的。但如果集群数量庞大,且都需要复制session,这时会因为网络延迟,或者session的内容非常大时,就会造成隐患,这时可能读到脏数据。


(2)Session黏着-放在服务端:IP绑定 ip_hash,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

不足:用户浏览器的IP地址hash以后满足单调性。会可能造成资源的分配不均衡,负载均衡就达不到到目的。有的服务器负载过重,有的服务器负载过轻,显然没有充分利用资源。

#配置一个upstream,声明一个名称panda,配置多个ip地址转向,默认就是轮询upstream panda {ip_hash;#IP_HASH方式来实现session共享server 127.0.0.1:8080 weight=5;#访问请求分成9份,这个tomcat负责8份的链接server 127.0.0.1:8090 weight=5;#访问请求分成9份,这个tomcat负责1份的链接server 127.0.0.1:8100 down;#这个tomcat暂时不参加负载}

(3)将信息放到cookie-放在客户端:session存在服务器端,会对服务器产生压力。如果将信息保存到cookie中,减轻了服务器的压力,同时每个客户端的压力也很小。因为只保存自己的信息。这种方式在实际的开发中广泛的采用。

不足:cookie可以被禁用,cookie要随着浏览器传递,增大了传输的内容,cookie大小有限制。

(4)SSO-单点登录:将session从系统中独立出来。Apache shiro顶级安全框架,它的session管理就是独立出来的。

目前主流做法是利用redis作为session管理的实现,因为redis访问极其快速。(之后会补充详细做法)




原创粉丝点击