tomcat原理及安装及反向代理、会话保持、session集群和session共享服务器的实现(一)

JDK(java development kit)叫做java开发工具包,是整个java的核心,包括JRE(java runtime environment,叫做java运行是环境),一堆java的工具和java的基本类库。

JDK包含的组件包括:

javac:编译器,将源程序转换成字节码,即。java程序转换成。class文件,然后才能java虚拟机上运行。class文件

jar:打包工具,将相关的类文件打包成一个文件

javadoc:文档生成器,从源码注释中提取文档

jdb:debuger,差错工具

java:运行编译后的java程序(.clsss后缀的文件,java文件在编译后生成。class文件,叫做字节码文件)

appletviewer:小应用程序浏览器,一种执行html文件上的java小程序浏览器

javap:java的反编译器,将字节码反编译为java程序

jconsole:java进行系统调试和监控的工具

JVM架构:jvm叫做java虚拟机,是通过软件模拟的方式模拟出来的的能够运行java程序的虚拟机器,是java代码运行的平台,java的源程序运行在jvm上时需要进行系统调用是由jvm自动执行,因此实现了代码和真实机器的隔离,所以java程序可夸平台指的就是只要系统上运行一个jvm,java源程序就能够在jvm上运行,而与操作系统的相关的操作是由jvm自己定制的,而不需要程序员考虑。

JVM的核心组成部分:

1、class loader,叫做类加载器,用来加载java基础类和自定义的类

2、执行引擎

方法区:线程共享的,用于存放被虚拟机加载的类信息、常量、静态变量等。或称为永久代,

堆:堆内存是共享的,java堆是对java所管理的内存中最大的一部分,也是GC管理的主要区域,主流的算法都基于分代方式进行收集,如新生代和老年代。

java栈:线程私有的,用来存放线程自己的局部变量等信息

pc寄存器 :program counter register,也叫程序计数器,用来记录程序代码运行时的指针所指向的地址空间,线程独占的内存空间。

本地方法栈:native

GC:叫做垃圾回收器,是面向堆来工作的。

Jave EE标准则包含了一组适用于创建企业级Web应用程序的API。Jave EE建立在Java SE的基础上,并依赖于Java SE才能正常工作。当然,任何级别的应用程序均能从Java EE中获益,但Jave EE却更适合解决大型软件系统设计中的问题。

JAVA 2 EE包含多个独立的API,Servlet和JSP就是其中的两个,而JAVA EE中著名的API中还包含如下的几个:

JAVA 2 EE APIs:

EJB(Enterprise JavaBeans):JAVA相关的诸多高级功能的实现,如RMI(Remote MethodInvocation), 对象/关系映射,跨越多个数据源的分布式事务等;

JMS(Java Message Service):高性能异步消息服务,实现JAVA EE应用程序与非JAVA程序的“透明”通信;

JMX(Java Management Extensions):在程序运行时对其进行交互式监控和管理的机制;

JTA(Java Transaction API):允许应用程序在自身的一个或多个组件中平滑地处理错误的机制;

JavaMail:通过工业标准的POP/SMTP/IMAP协议发送和接收邮件的机制;java 2 EE 包括的技术:servlet,JSP ,EJB ,JMX ,javamail

applet:小应用程序,客户端程序

servlet:服务器应用程序,称之为 servlet contaier

客户端浏览器只能理解html语言,但是java程序在sever服务器运行后的结果没有html的标签等,为了输出这些html的标签,则必须使用java程序输出,如println(<h1>),这种方式就是html标签要硬编码在应用程序中,为简化这种问题,出现了JSP语言,能够类似于php语言可以直接嵌套在html标签中,在程序运行时,java会自动将这些html标签硬编码为java语言。也可以将jsp看做java中的一个特殊的类,能够实现自动将html格式的标签转换为java代码的输出格式,然后在运行java程序。

如html标签要硬编码在应用程序中,为了解决这种问题,出现了JSP语言,这就类似于php的语法了。使得java代码能够直接内嵌在html代码中,简化了程序的

jdk只提供了java 2 EE的标准,而没有提供jsp的功能,

jsp能够利用jasper在前端将html和java互相嵌套的代码翻译成servlet程序(全java代码个格式),然后在JVM上运行。

jsp程序运行的过程:

jsp程序—由jasper engine翻译成.java程序(也就是servlet能够识别的代码)---然后由javac将以.java结尾的程序文件编译成.class文件(字节码程序),最后由java真正运行字节码程序,因此一个能够运行jsp程序的架构平台必须包括JDK, SERVLET,JSP,而这种平台称之为web container。

web container:要包括JDK, Servlet,JSP

要部署jsp应用程序服务器,前提必须部署JDK,然后在部署servlet和jsp,而JDK软件中只有jdk组件,servlet和jsp的组件需要其他软件来提供,能够实现这些的功能的web container有:

商业实现:

websphere(IBM)

weblogic(原属于BEA,后被oracle收购)

oc4j

glassfish

geronimo

JOnAS

JBoos

开源实现:

Tomcat

jetty

resin

而JDK的提供者有:

sun开发的jdk,开源软件openJDK,IBM开发的jdk等。

tomcat仅实现了jsp和servlet的功能,而没有实现java EE的其他功能

tomcat的核心组件:

1、catalina:提供servlet container容器

2、coyote:是一个http connection链接器

3、Jasper: 是jsp engine,负责将jsp文件中的html语言标签转换为能够被servle识别的java格式代码。

tomcat的主配置文件中各组件包括

1、服务器(server):Tomcat的一个实例,通常一个JVM只能包含一个Tomcat实例;因此,一台物理服务器上可以在启动多个JVM的情况下在每一个JVM中启动一个Tomcat实例,每个实例分属于一个独立的管理端口。这是一个顶级组件。

2、服务(service):一个服务组件通常包含一个引擎和与此引擎相关联的一个或多个连接器。给服务命名可以方便管理员在日志文件中识别不同服务产生的日志。一个server可以包含多个service组件,但通常情下只为一个service指派一个server。

连接器类组件:

3、连接器(connectors):负责连接客户端(可以是浏览器或Web服务器)请求至Servlet容器内的Web应用程序,通常指的是接收客户发来请求的位置及服务器端分配的端口。默认端口通常是HTTP协议的8080,管理员也可以根据自己的需要改变此端口。一个引擎可以配置多个连接器,但这些连接器必须使用不同的端口。默认的连接器是基于HTTP/1.1的Coyote。同时,Tomcat也支持AJP、JServ和JK2连接器。

容器类组件:

4、引擎(Engine):引擎通是指处理请求的Servlet引擎组件,即Catalina Servlet引擎,它检查每一个请求的HTTP首部信息以辨别此请求应该发往哪个host或context,并将请求处理后的结果返回的相应的客户端。严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器。如果Tomcat被配置成为独立服务器,默认引擎就是已经定义好的引擎。而如果Tomcat被配置为Apache Web服务器的提供Servlet功能的后端,默认引擎将被忽略,因为Web服务器自身就能确定将用户请求发往何处。一个引擎可以包含多个host组件。

5、主机(Host):主机组件类似于Apache中的虚拟主机,但在Tomcat中只支持基于FQDN的“虚拟主机”。一个引擎至少要包含一个主机组件。

6、上下文(Context):Context组件是最内层次的组件,它表示Web应用程序本身。配置一个Context最主要的是指定Web应用程序的根目录,以便Servlet容器能够将用户请求发往正确的位置。Context组件也可包含自定义的错误页,以实现在用户访问发生错误时提供友好的提示信息。

被嵌套类(nested)组件:

这类组件通常包含于容器类组件中以提供具有管理功能的服务,它们不能包含其它组件,但有些却可以由不同层次的容器各自配置。

7、阀门(Valve):用来拦截请求并在将其转至目标之前进行某种处理操作,类似于Servlet规范中定义的过滤器。Valve可以定义在任何容器类的组件中。Valve常被用来记录客户端请求、客户端IP地址和服务器等信息,这种处理技术通常被称作请求转储(request dumping)。请求转储valve记录请求客户端请求数据包中的HTTP首部信息和cookie信息文件中,响应转储valve则记录响应数据包首部信息和cookie信息至文件中。

8、日志记录器(Logger):用于记录组件内部的状态信息,可被用于除Context之外的任何容器中。日志记录的功能可被继承,因此,一个引擎级别的Logger将会记录引擎内部所有组件相关的信息,除非某内部组件定义了自己的Logger组件。

9、领域(Realm):用于用户的认证和授权;在配置一个应用程序时,管理员可以为每个资源或资源组定义角色及权限,而这些访问控制功能的生效需要通过Realm来实现。Realm的认证可以基于文本文件、数据库表、LDAP服务等来实现。Realm的效用会遍及整个引擎或顶级容器,因此,一个容器内的所有应用程序将共享用户资源。同时,Realm可以被其所在组件的子组件继承,也可以被子组件中定义的Realm所覆盖。

引擎(Engine):引擎是指处理请求的Servlet引擎组件,即Catalina Servlet引擎,它从HTTPconnector接收请求并响应请求。它检查每一个请求的HTTP首部信息以辨别此请求应该发往哪个host或context,并将请求处理后的结果返回的相应的客户端。严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器。如果Tomcat被配置成为独立服务器,默认引擎就是已经定义好的引擎。而如果Tomcat被配置为Apache Web服务器的提供Servlet功能的后端,默认引擎将被忽略,因为Web服务器自身就能确定将用户请求发往何处。一个引擎可以包含多个host组件。

下面是安装tomcat的两种方法和基于httpd和nginx做反向代理tomcat以及实现tomcat负载均衡和session绑定。

第一种方法:

手动安装jdk

[[email protected] src]# rpm -ivhjdk-7u79-linux-x64.rpm

jdk安装后的文件,

由于jdk可以并存在一个主机上,因此需要导出新安装的jdk的环境变量方便系统能够识别。

[[email protected] java]# vim/etc/profile.d/java.sh

export JAVA_HOME=/usr/java/latest

export PATH=$JAVA_HOME/bin:$PATH

[[email protected] java]# ./etc/profile.d/java.sh

[[email protected] java]# java -version

java version "1.7.0_79"

Java(TM) SE Runtime Environment (build1.7.0_79-b15)

Java HotSpot(TM) 64-Bit Server VM (build24.79-b02, mixed mode)

然后解压tomcat文件包

[[email protected] ~]# tar -xvfapache-tomcat-8.0.15.tar.gz -C /usr/local

[[email protected] ~]# cd /usr/local

[[email protected] local]# ln -svapache-tomcat-8.0.15 tomcat

tomcat运行时需要读取其catalina脚本,因此需要再系统上为其指定环境变量

[[email protected] bin]# vim/etc/profile.d/tomcat.sh

export CATALINA_HOME=/usr/local/tomcat

export PATH=$CATALINA_HOME/bin:$PATH

然后重读此脚本

[[email protected] java]# ./etc/profile.d/tomcat.sh

然后就可以启动tomcat了

[[email protected] bin]# catalina.sh start

关闭tomcat

[[email protected] bin]# catalina.sh stop

手动安装tomcat完毕。

注意:java程序运行不需要特权,因此要以普通用户来运行tomcat,所以tomcat的监听端口默认是8080,如果设置tomcat监听端口小于1024,那么必须以root身份来运行tomcat,因为小于1024的端口要想使用必须使用root身份。

第二种方法:

使用yum安装tomcat,在centons系统上光盘默的有java-openjdk和tomcat,因此可以直接安装tomcat

yum install tomcat-7.0.54-1.el7.noarch

[[email protected] tomcat]# yum installtomcat-webapps.noarch

使用yum安装后需要额外安装tomcat-webapps.noarch才有默认的tomcat页面

配置文件在/etc/tomcat目录下,主配置文件server.xml

工程文件目录在/var/lib/tomcat

启动tomcat并查看

[[email protected] tomcat]# systemctl starttomcat.service

后续实例见第二个博客

nginx+tomcat实现反向代理、会话保持,httpd+tomcat实现反向代理、会话保持,tomcat实现session集群以及session服务器的实现

时间: 2024-12-04 09:16:43

tomcat原理及安装及反向代理、会话保持、session集群和session共享服务器的实现(一)的相关文章

Tomcat的session集群和session服务器

概述 session的作用 httpd是无状态协议,多个http请求之间是没有关联的,服务器端也无法识别哪些请求来自同一个客户端.为了解决这一问题,当客户端第一次访问时,服务器端会创建一个session来保存这一次的会话信息,然后将sessionID(session的唯一标识符)放置在响应报文的首部发送给客户端,客户端再次请求时会携带这个sessionID(通常在request的cookie中)表示这属于哪一个会话. 维持session的方式 在Tomcat实现负载均衡后,客户端的请求会被调度至

Nginx安装和反向代理配置

Nginx安装和反向代理配置 Nginx安装需要一些准备工作. 安装gcc等 yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel 还需要安装pcre,PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 Perl兼容的正则表达式库. yum -y install pcre 下载Nginx源码包,这里选择是1.7.8版本.并且解压缩,并且编译 wge

Nginx的安装及反向代理设置

因为项目的缘故,接触到了Nginx的安装和反向代理设置,和大家分享下. 一.Nginx的下载.安装cd /homewget http://nginx.org/download/nginx-1.0.5.tar.gztar -zxvf nginx-1.0.5.tar.gzcd nginx-1.0.5./configuremakemake install 二.反向代理设置编辑Nginx的配置文件vi /usr/local/nginx/conf/nginx.conf,替换server { }的{ }中的

tomcat实现session集群及tomcat+memcached共享session存储(四)

接博客nginx或httpd实现负载均衡tomcat(三) tomcat实现会话管理原理及实现: tomcat管理会话使用的专用的会话管理组件,tomcat的会话管理器有4种: 1.标准会话管理器(StanderdManager) 2.持久会话管理器(PersistentManager可以基于文件存储(FileStore)或JDBC存储(JDBCStore)) 基于JDBC的话就可以实现高可用tomcat的session集群. 1.DeltaManager会话管理器 2.BackupManage

Nginx+tomcat+memcached解决集群的session问题

Tomcat集群session同步方案有以下几种方式: · 使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配置起来很简单.但这个方案的效率比较低,在大并发下表现并不好.原理:http://zyycaesar.iteye.com/blog/296606 · 利用nginx的基于访问ip的hash路由策略,保证访问的ip始终被路由到同一个tomcat上,这个配置更简单.但如果应用是某一个局域网大量用户同时登录,这样负载均衡就没什么作用了. · 利用ngi

tomcat集群及session共享

一般来说,java web app主要用作两个领域: 1.api.api一般是无状态的,所以无需考虑session共享的问题 2.传统web应用和网站,如crm,oa,erp,b2c,bbs等.尤其bbs,b2c这样的互联网应用,单台tomcat往往无法满足高并发,所以需要做集群.如果做了集群,往往需要考虑session共享的问题,因为LB(apache/nginx)等等往往会将同一用户的请求分发到不同server 常用的servlet容器主要有tomcat(老牌的servlet容器,像apac

Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 ============================= 蕃薯耀 2017年11月27日 http://www.cnblogs.com/fanshuyao/ 代码美化版或附件下载见:http://fanshuyao.iteye.com/blog/2400975 一.Session共享使用tomcat-cluster-redis-session-manager插件实现 插件地址见:https://g

在linux环境下安装redis并且搭建自己的redis集群

此文档主要介绍在linux环境下安装redis并且搭建自己的redis集群 搭建环境: ubuntun 16.04 + redis-3.0.6 本文章分为三个部分:redis安装.搭建redis集群 一.本机安装redis: 1.下载redis: wget http://download.redis.io/releases/redis-3.0.6.tar.gz 2.redis安装解压.编译与安装:安装路径在root用户下的:~/softwares文件下 解压:先将安装包放到~/softwares

Nginx服务器的安装与反向代理负载均衡

Nginx服务器 一:什么是Nginx? 我们生活的世界中,有的时候需要上网.我们可以浏览很多很多的网页,这些网页都是由一系列的程序组成,但是我们是否想过,这些程序存储在什么地方呢?没错,这些程序都是存储在一种名叫服务器的硬件上,比如我们的电脑也是一种服务器,只不过我们的个人电脑作为服务器的话性能会比较低.我们的网页程序存储在服务器硬件上,是否可以随意存储呢?不是的,我们需要在服务器硬件的操作系统中搭建一个服务器软件,那么这样,有服务器软件跟服务器硬件配合,才形成一个完整的服务器.服务器软件有非