2024年10月tomcat目录结构(tomcat下web应用的基本结构,各文件夹里面存放什么)

 更新时间:2024-10-12

  ⑴tomcat目录结构(tomcat下web应用的基本结构,各文件夹里面存放什么

  ⑵tomcat下web应用的基本结构,各文件夹里面存放什么

  ⑶以tomcat.为例安装好完毕后,目录如下:bin:存放着jar(tomcat中所有的项目以及tomcat本身所使用的jar,即公用的。例如:你在tomcat中部署了个项目,这个个项目里面都用同一个jar去连接数据库,这个时候,你可以把这个jar放在这里tomcat启动/关闭的脚本(绿色版的是脚本,安装版的是图形界面conf:配置文件例如:server.xml(Tomcat的主要配置文件,这里可以配置tomcat项目端口号,字符集,域名等)。web.xml:Tomcat配置的web应用设置缺省值的文件(web.xml是web项目中不可缺少的,但是你写了在webapps下建立一个文件夹,然后再里放一个JSP然后运行它,这个时候能运行成功,因为:Tomcat配置的web应用会自动设置缺省值的文件。lib:Tomcat使用的jar文件。例如:系统里面有环境变量,当你运行tomcat的时候,会自动加载进来logs:日志temp:临时文件(忽略它,相当于系统垃圾webapps:应用程序部署在这里work:缓存例如:你部署了一个叫demo的项目,你运行的时候,tomcat会解释你的项目,这个时候,这个里面存放的全是解释你项目后的东西。可以清掉。启动tomcat后还会自动生成。但是要注意,如果tomcat启动后,你清掉了,那么项目运行不了不废话了,~!老板来了~!

  ⑷Tomcat突然在IDEA中消失了,怎么解决

  ⑸打开IDEA快捷键Ctrl+Alt+S在Plugins中搜索tomcat看下面是否点击对勾,如果选中点击取消---应用---在点击上对勾----应用----OK----重新启动IDEA即可找到tomcat的文件Tomcat目录结构:打开bin目录选择启动:启动:双击bin目录下面是startup.bat,或者通过cmd命令提示符窗口中启动关闭:双击bin目录下面的shutdown.bat如果屏幕一闪而过,请在cmd窗口中打开此文件可以看到提示

  ⑹TOMCAT配置文件目录描述

  ⑺TOMCAT配置文件:$CATALINA_HOME/conf/web.xml配置简介《servlet》《servlet-name》default《/servlet-name》《servlet-class》.apache.catalina.servlets.DefaultServlet《/servlet-class》《init-param》《param-name》debug《/param-name》《param-value》《/param-value》《/init-param》《init-param》《param-name》listings《/param-name》《param-value》true《/param-value》《/init-param》《load-on-startup》《/load-on-startup》《/servlet》说明:《servlet-name》:定义Servlet的名字。《servlet-class》:指定实现这个Servlet的类。《init-param》:定义Servlet的初始化参数(包括参数名和参数值,一个《servlet》元素中可以有多个《init-param》元素。《load-on-startup》:指定当Web应用启动时,装载Servlet的次序。当这个值为正数或零,Servlet容器先加载数值小的Servlet,再一次加载其他数值大的Servlet。如果这个值为负数或没有设定,Servlet将在Web客户首次访问这个Servlet时加载它。《session-config》《session-timeout》《/session-timeout》《/session-config》a.如果某文件资源没有找到,服务器要报错误,按下述配置则会调用webappsROOT

  ⑻otFileFound.jsp《error-page》《error-code》《/error-code》《location》/notFileFound.jsp《/location》《/error-page》b.如果执行的某个JSP文件产生NullPointException,则会调用webappsROOT

  ⑼ull.jsp《error-page》《exception-type》java.lang.NullPointerException《/exception-type》《location》/null.jsp《/location》《/error-page》《wele-file-list》《wele-file》index.html《/wele-file》《wele-file》index.htm《/wele-file》《wele-file》index.jsp《/wele-file》《/wele-file-list》默认Web应用的首页文件的设置报错文件的设置session会话过期时间的设置,单位是分钟servlet的设置filter过滤器的设置《filter》《filter-name》FilterSource《/filter-name》《filter-class》project.FilterSource《/filter-class》《/filter》《filter-mapping》《filter-name》FilterSource《/filter-name》《url-pattern》/WwwServlet《/url-pattern》(《url-pattern》/haha/*《/url-pattern》)《/filter-mapping》、TOMCAT的目录结构/bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件/conf:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web.xml/doc:存放Tomcat文档/server:包含三个子目录:classes、lib和webapps/server/lib:存放Tomcat服务器所需的各种JAR文件/server/webapps:存放Tomcat自带的两个WEB应用admin应用和manager应用/mon/lib:存放Tomcat服务器以及所有web应用都可以访问的jar文件/shared/lib:存放所有web应用都可以访问的jar文件(但是不能被Tomcat服务器访问/logs:存放Tomcat执行时的日志文件/src:存放Tomcat的源代码/webapps:Tomcat的主要Web发布目录,默认情况下把Web应用文件放于此目录/work:存放JSP编译后产生的class文件

  ⑽Tomcat工作原理解析

  ⑾本文主要讲解Tomcat启动和部署webapp时的原理和过程,以及其使用的配置文件的详解。主要有三大部分:.Tomcat的简介和启动过程.Tomcat部署webapp.Tomca接下来是一系列的container的start,后续在分析(会部署所有的项目三、server.xml配置简介:?下面讲述这个文件中的基本配置信息,更具体的配置信息请参考tomcat的文档

  ⑿Tomcat配置实践

  ⒀要部署使用tomcat,则必须了解tomcat的目录结构以及各目录的作用。这里以tomcat为例,进入tomcat安装目录下:

  ⒁前端请求被tomcat直接接收或者由前端的代理,通过HTTP,或者AJP代理给Tomcat,此时请求被tomcat中的connector接收,不同的connector和Engine被service组件关联起来,在一个Engine中定义了许多的虚拟主机,由Host容器定义,每一个Host容器代表一个主机,在各自的Host中,又可以定义多个Context,用此来定义一个虚拟主机中的多个独立的应用程序。

  ⒂TomcatServer的结构图如下:

  ⒃看上去很复杂。其实,大部分都是注释。下面是一个简图说明了各组件之间的关系!

  ⒄上面列出的比较常用的组件元素,server.xml文件中可定义的元素非常多,包括Server,Service,Connector,Engine,Cluster,Host,Alias,Context,Realm,Valve,Manager,Listener,Resources,Resource,ResourceEnvRef,ResourceLink,WatchedResource,GlobalNameingResources,Store,Transaction,Channel,Membership,Transport,Member,ClusterListener等等。

  ⒅由以上配置不难看出存在的一个问题。如果我们想要对其中一个应用程序的配置做一些修改,那么就必须重新启动tomcat,那样势必就会影响到另外两个应用程序的正常服务。因此以上配置是不适合线上使用的,因此需要将其配置为多实例,每个实例只跑一个独立的应用程序,那样我们应用程序之间就不会在互相受到影响。但是我们将面临这样一个问题,端口只能被一个HTTP/.Connector监听,而三个tomcat实例则至少需要个HTTP/.Connector,这样我们就需要一个前端代理做分发处理,接收HTTP端口的请求,按域名通过每个tomcat实例的AJP/.Connector传递请求。而前端的代理选择apache,基于这样的思路,我们还可以做到tomcat的负载均衡,而且apache会将接收的HTTP超文本传输报文重新封装成二进制格式通过AJP/.协议传递给后端的tomcat处理,在效率上也是有明显的提升。

  ⒆这会让Tomcat启动一个server实例(即一个JVM,它监听在端口以接收shutdown命令。各Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。这个端口的定义用于为管理员提供一个关闭此实例的便捷途径,因此,管理员可以直接tel至此端口使用SHUTDOWN命令关闭此实例。不过,基于安全角度的考虑,这通常不允许远程进行。

  ⒇该元素代表整个容器,是Tomcat实例的顶层元素。由.apache.catalina.Server接口来定义。它包含一个或多个《Service》元素。并且它不能做为任何元素的子元素。

  ⒈Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收入站请求交将其转发至关联的引擎进行处理。因此,Service要包含一个引擎、一个或多个连接器。

  ⒉该元素由.apache.catalina.Service接口定义,它包含一个《Engine》元素,以及一个或多个《Connector》,这些Connector元素共享用同一个Engine元素。

  ⒊Engine是Servlet处理器的一个实例,即servlet引擎,默认为定义在server.xml中的Catalina。

  ⒋每个Service元素只能有一个Engine元素。元素处理在同一个《Service》中所有《Connector》元素接收到的客户请求。由.apahce.catalina.Engine接口定义。

  ⒌位于Engine容器中用于接收请求并进行相应处理的主机或虚拟主机。

  ⒍它由Host接口定义。一个Engine元素可以包含多个《Host》元素。每个《Host》的元素定义了一个虚拟主机。它包含了一个或多个Web应用《Context》。

  ⒎Context在某些意义上类似于apache中的路径别名,一个Context定义用于标识tomcat实例中的一个Web应用程序。

  ⒏它由Context接口定义。是使用最频繁的元素。每个《Context》元素代表了运行在虚拟主机上的单个Web应用。一个《Host》可以包含多个《Context》元素。每个web应用有唯一的一个相对应的Context代表web应用自身。servlet容器为第一个web应用创建一个ServletContext对象。

  ⒐由Connector接口定义。《Connector》元素代表与客户程序实际交互的组件,它负责接收客户请求,以及向客户返回响应结果。

  ⒑进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类:

  ⒒Tomcat应该考虑工作情形并为相应情形下的请求分别定义好需要的连接器才能正确接收来自于客户端的请求。一个引擎可以有一个或多个连接器,以适应多种请求方式。

  ⒓定义连接器可以使用多种属性,有些属性也只适用于某特定的连接器类型。一般说来,常见于server.xml中的连接器类型通常有种:

  ⒔Connector元素共用属性:

  ⒕HttpConnector元素的属性:

  ⒖AJPConnector的属性:

  ⒗即一个service配置多个端口,项目可以通过多个端口访问。修改tomcat-homeconf下的server.xml,在Service下配置多个《Connector》即可。

  ⒘在这个应用里,可以用端口号访问服务,也可以用端口号来访问服务;服务放置的路径由host决定,上例中服务放在webapps下。

  ⒙即配置多个service,每个service可以配置多个端口。修改tomcat-homeconf下的server.xml,添加多个Service即可。

  ⒚注意:Servicename、Enginename、appBase,端口号别忘了修改,以免重复。

  ⒛以上三个service,发布的路径不同,项目分别发布在webapps、webapps、webapps下,访问不同的项目的方法:

  在$CATALINA_HOME/conf/server.xml配置文件中的Conctor节点,和连接数相关的参数配置和优化。

  Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值。可以根据机器的时期性能和内存大小调整,一般可以在-。最大可以在左右。

  指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值。

  Tomcat初始化时创建的线程数。默认值。

  一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值。

  是否反查域名,默认值为true。为了提高处理能力,应设置为false。

  网络连接超时,默认值,单位:毫秒。设置为表示永不超时,这样设置有隐患的。通常可设置为毫秒。

  保持请求数量,默认值。

  输入流缓冲大小,默认值bytes。

  压缩传输,取值on/off/force,默认值off。

  其中和最大连接数相关的参数为maxThreads和aeptCount。如果要加大并发连接数,应同时加大这两个参数。webserver允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是个左右,Linux是个左右。

  Tomcat默认可以使用的内存为MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件$CATALINA_HOME/bin/catalina.sh的前面,增加如下设置:

  一般说来,你应该使用物理内存的%作为堆大小。如果本机上有Apache服务器,可以先折算Apache需要的内存,然后修改堆大小。建议设置为%;建议设置,这样可以减少频繁分配堆而降低性能。

  在$CATALINA_HOME/conf/web.xml中,把listings参数设置成false即可,如下:

  WEB请求处理四:Tomcat配置实践

  怎么配置tomcat

  首先,下载一个Tomcat放在你的硬盘上,例如,下载一个Tomcat.x放在E:盘第一种方法:在Servers窗口配置Tomcat、在Servers窗口中的空白处点右键》》ConfigureServerConnector打开配置窗口、在新窗口左边的导航中依层次选中MyEclipse》》Servers》》Tomcat》》Tomcat.x、在右边点击Tomcathomedirectory那一行的Browser按钮,找到你下载的Tomcat所在的文件夹,点OK、将面板上边的Disable改为Enable,再点击OK,你就会在你的Servers窗口中看到你的Tomcat了

  第二种方法:如果你的MyEclipse中没有Servers窗口、点击菜单栏Window》》Preferences》》MyEclipse》》Servers》》Tomcat》》Tomcat.x、剩下的跟一种一样、配置完成后点击Window》》ShowView》》Servers可以调出Servers窗口

  注释:配置好Tomcat后,新建一个WebProject,在Servers窗口空白处点右键》》AddDeployment...将项目部署进Tomcat对着Tomcat点右键》》RunServer即可运行项目

  Tomcat篇-整体架构和I/O模型

  本文主要包括tomcat服务器的目录结构、工作模式、整体架构、I/O模型以及NIO、NIO、APR三者的对比介绍。

  我们先来看一下tomcat.和tomcat中的home目录中的文件:

  可以看到除掉一些说明文件之后,还有个目录:

  实际上除了主目录里有lib目录,在webapps目录下的web应用中的WEB-INF目录下也存在一个lib目录:

  ●Tomcat主目录下的lib目录:存放的JAR文件不仅能被Tomcat访问,还能被所有在Tomcat中发布的JavaWeb应用访问●webapps目录下的JavaWeb应用的lib目录:存放的JAR文件只能被当前JavaWeb应用访问

  既然有多个lib目录,那么肯定就有使用的优先顺序,Tomcat类加载器的目录加载优先顺序如下:

  Tomcat的类加载器负责为Tomcat本身以及JavaWeb应用加载相关的类。假如Tomcat的类加载器要为一个JavaWeb应用加载一个类,类加载器会按照以下优先顺序到各个目录中去查找该类的.class文件,直到找到为止,如果所有目录中都不存在该类的.class文件,则会抛出异常:

  Tomcat不仅可以单独运行,还可以与其他的Web服务器集成,作为其他Web服务器的进程内或进程外的servlet容器。集成的意义在于:对于不支持运行JavaServlet的其他Web服务器,可通过集成Tomcat来提供运行Servlet的功能。

  Tomcat有三种工作模式:

  我们先从tomcat的源码目录来分析一下tomcat的整体架构,前面我们配置jsvc运行tomcat的时候,我们知道tomcat中启动运行的最主要的类是.apache.catalina.startup.Bootstrap,那么我们在tomcat的源码中的java目录下的目录的apache目录可以找到主要的源码的相对应的类。

  图中的目录如果画成架构图,可以这样表示:

  Tomcat本质上就是一款Servlet容器,因此catalina才是Tomcat的核心,其他模块都是为catalina提供支撑的。

  单线程阻塞I/O模型是最简单的一种服务器I/O模型,单线程即同时只能处理一个客户端的请求,阻塞即该线程会一直等待,直到处理完成为止。对于多个客户端访问,必须要等到前一个客户端访问结束才能进行下一个访问的处理,请求一个一个排队,只提供一问一答服务。

  如上图所示:这是一个同步阻塞服务器响应客户端访问的时间节点图。

  这种模型的特点在于单线程和阻塞I/O。单线程即服务器端只有一个线程处理客户端的所有请求,客户端连接与服务器端的处理线程比是n:,它无法同时处理多个连接,只能串行处理连接。而阻塞I/O是指服务器在读写数据时是阻塞的,读取客户端数据时要等待客户端发送数据并且把操作系统内核复制到用户进程中,这时才解除阻塞状态。写数据回客户端时要等待用户进程将数据写入内核并发送到客户端后才解除阻塞状态。这种阻塞带来了一个问题,服务器必须要等到客户端成功接收才能继续往下处理另外一个客户端的请求,在此期间线程将无法响应任何客户端请求。

  该模型的特点:它是最简单的服务器模型,整个运行过程都只有一个线程,只能支持同时处理一个客户端的请求(如果有多个客户端访问,就必须排队等待),服务器系统资源消耗较小,但并发能力低,容错能力差。

  多线程阻塞I/O模型在单线程阻塞I/O模型的基础上对其进行改进,加入多线程,提高并发能力,使其能够同时对多个客户端进行响应,多线程的核心就是利用多线程机制为每个客户端分配一个线程。

  如上图所示,服务器端开始监听客户端的访问,假如有两个客户端同时发送请求过来,服务器端在接收到客户端请求后分别创建两个线程对它们进行处理,每条线程负责一个客户端连接,直到响应完成。期间两个线程并发地为各自对应的客户端处理请求,包括读取客户端数据、处理客户端数据、写数据回客户端等操作。

  这种模型的I/O操作也是阻塞的,因为每个线程执行到读取或写入操作时都将进入阻塞状态,直到读取到客户端的数据或数据成功写入客户端后才解除阻塞状态。尽管I/O操作阻塞,但这种模式比单线程处理的性能明显高了,它不用等到第一个请求处理完才处理第二个,而是并发地处理客户端请求,客户端连接与服务器端处理线程的比例是:。

  多线程阻塞I/O模型的特点:支持对多个客户端并发响应,处理能力得到大幅提高,有较大的并发量,但服务器系统资源消耗量较大,而且如果线程数过多,多线程之间会产生较大的线程切换成本,同时拥有较复杂的结构。

  在探讨单线程非阻塞I/O模型前必须要先了解非阻塞情况下套接字事件的检测机制,因为对于单线程非阻塞模型最重要的事情是检测哪些连接有感兴趣的事件发生。一般会有如下三种检测方式。

  当多个客户端向服务器请求时,服务器端会保存一个套接字连接列表中,应用层线程对套接字列表轮询尝试读取或写入。如果成功则进行处理,如果失败则下次继续。这样不管有多少个套接字连接,它们都可以被一个线程管理,这很好地利用了阻塞的时间,处理能力得到提升。

  但这种模型需要在应用程序中遍历所有的套接字列表,同时需要处理数据的拼接,连接空闲时可能也会占用较多CPU资源,不适合实际使用。

  这种方式将套接字的遍历工作交给了操作系统内核,把对套接字遍历的结果组织成一系列的事件列表并返回应用层处理。对于应用层,它们需要处理的对象就是这些事件,这是一种事件驱动的非阻塞方式。

  服务器端有多个客户端连接,应用层向内核请求读写事件列表。内核遍历所有套接字并生成对应的可读列表readList和可写列表writeList。readList和writeList则标明了每个套接字是否可读/可写。应用层遍历读写事件列表readList和writeList,做相应的读写操作。

  内核遍历套接字时已经不用在应用层对所有套接字进行遍历,将遍历工作下移到内核层,这种方式有助于提高检测效率。然而,它需要将所有连接的可读事件列表和可写事件列表传到应用层,假如套接字连接数量变大,列表从内核复制到应用层也是不小的开销。另外,当活跃连接较少时,内核与应用层之间存在很多无效的数据副本,因为它将活跃和不活跃的连接状态都复制到应用层中。

  通过遍历的方式检测套接字是否可读可写是一种效率比较低的方式,不管是在应用层中遍历还是在内核中遍历。所以需要另外一种机制来优化遍历的方式,那就是回调函数。内核中的套接字都对应一个回调函数,当客户端往套接字发送数据时,内核从网卡接收数据后就会调用回调函数,在回调函数中维护事件列表,应用层获取此事件列表即可得到所有感兴趣的事件。

  内核基于回调的事件检测方式有两种

  第一种是用可读列表readList和可写列表writeList标记读写事件,套接字的数量与readList和writeList两个列表的长度一样。

  上面两种方式由操作系统内核维护客户端的所有连接并通过回调函数不断更新事件列表,而应用层线程只要遍历这些事件列表即可知道可读取或可写入的连接,进而对这些连接进行读写操作,极大提高了检测效率,自然处理能力也更强。

  单线程非阻塞I/O模型最重要的一个特点是,在调用读取或写入接口后立即返回,而不会进入阻塞状态。虽然只有一个线程,但是它通过把非阻塞读写操作与上面几种检测机制配合就可以实现对多个连接的及时处理,而不会因为某个连接的阻塞操作导致其他连接无法处理。在客户端连接大多数都保持活跃的情况下,这个线程会一直循环处理这些连接,它很好地利用了阻塞的时间,大大提高了这个线程的执行效率。

  单线程非阻塞I/O模型的主要优势体现在对多个连接的管理,一般在同时需要处理多个连接的发场景中会使用非阻塞NIO模式,此模型下只通过一个线程去维护和处理连接,这样大大提高了机器的效率。一般服务器端才会使用NIO模式,而对于客户端,出于方便及习惯,可使用阻塞模式的套接字进行通信。

  在多核的机器上可以通过多线程继续提高机器效率。最朴实、最自然的做法就是将客户端连接按组分配给若干线程,每个线程负责处理对应组内的连接。比如有个客户端访问服务器,服务器将套接字和套接字交由线程管理,而线程则管理套接字和套接字,通过事件检测及非阻塞读写就可以让每个线程都能高效处理。

  多线程非阻塞I/O模式让服务器端处理能力得到很大提高,它充分利用机器的CPU,适合用于处理高并发的场景,但它也让程序更复杂,更容易出现问题(死锁、数据不一致等经典并发问题。

  最经典的多线程非阻塞I/O模型方式是Reactor模式。首先看单线程下的Reactor,Reactor将服务器端的整个处理过程分成若干个事件,例如分为接收事件、读事件、写事件、执行事件等。Reactor通过事件检测机制将这些事件分发给不同处理器去处理。在整个过程中只要有待处理的事件存在,即可以让Reactor线程不断往下执行,而不会阻塞在某处,所以处理效率很高。

  基于单线程Reactor模型,根据实际使用场景,把它改进成多线程模式。常见的有两种方式:一种是在耗时的process处理器中引入多线程,如使用线程池;另一种是直接使用多个Reactor实例,每个Reactor实例对应一个线程。

  Reactor模式的一种改进方式如下图所示。其整体结构基本上与单线程的Reactor类似,只是引入了一个线程池。由于对连接的接收、对数据的读取和对数据的写入等操作基本上都耗时较少,因此把它们都放到Reactor线程中处理。然而,对于逻辑处理可能比较耗时的工作,可以在process处理器中引入线程池,process处理器自己不执行任务,而是交给线程池,从而在Reactor线程中避免了耗时的操作。将耗时的操作转移到线程池中后,尽管Reactor只有一个线程,它也能保证Reactor的高效。

  Reactor模式的另一种改进方式如下图所示。其中有多个Reactor实例,每个Reactor实例对应一个线程。因为接收事件是相对于服务器端而言的,所以客户端的连接接收工作统一由一个aept处理器负责,aept处理器会将接收的客户端连接均匀分配给所有Reactor实例,每个Reactor实例负责处理分配到该Reactor上的客户端连接,包括连接的读数据、写数据和逻辑处理。这就是多Reactor实例的原理。

  Tomcat支持的I/O模型如下表(自./.版本起,Tomcat移除了对BIO的支持,在.之前,Tomcat默认采用的I/O方式为BIO,之后改为NIO。无论NIO、NIO还是APR,在性能方面均优于以往的BIO。

  Tomcat中的NIO模型是使用的JAVA的NIO类库,其内部的IO实现是同步的(也就是在用户态和内核态之间的数据交换上是同步机制,采用基于selector实现的异步事件驱动机制(这里的异步指的是selector这个实现模型是使用的异步机制。而对于Java来说,非阻塞I/O的实现完全是基于操作系统内核的非阻塞I/O,它将操作系统的非阻塞I/O的差异屏蔽并提供统一的API,让我们不必关心操作系统。JDK会帮我们选择非阻塞I/O的实现方式。

  NIO和前者相比的最大不同就在于引入了异步通道来实现异步IO操作,因此也叫AIO(AsynchronousI/O。NIO.的异步通道APIs提供方便的、平台独立的执行异步操作的标准方法。这使得应用程序开发人员能够以更清晰的方式来编写程序,而不必定义自己的Java线程,此外,还可通过使用底层OS所支持的异步功能来提高性能。如同其他JavaAPI一样,API可利用的OS自有异步功能的数量取决于其对该平台的支持程度。

  异步通道提供支持连接、读取、以及写入之类非锁定操作的连接,并提供对已启动操作的控制机制。Java中用于JavaPlatform(NIO.的MoreNewI/OAPIs,通过在java.nio.channels包中增加四个异步通道类,从而增强了Java.中的NewI/OAPIs(NIO,这些类在风格上与NIO通道API很相似。他们共享相同的方法与参数结构体,并且大多数对于NIO通道类可用的参数,对于新的异步版本仍然可用。主要区别在于新通道可使一些操作异步执行。

  异步通道API提供两种对已启动异步操作的监测与控制机制。第一种是通过返回一个java.util.concurrent.Future对象来实现,它将会建模一个挂起操作,并可用于查询其状态以及获取结果。第二种是通过传递给操作一个新类的对象,java.nio.channels.pletionHandler,来完成,它会定义在操作完毕后所执行的处理程序方法。每个异步通道类为每个操作定义API副本,这样可采用任一机制。

  Apache可移植运行时(ApachePortableRuntime,APR是ApacheHTTP服务器的支持库,最初,APR是作为ApacheHTTP服务器的一部分而存在的,后来成为一个单独的项目。其他的应用程序可以使用APR来实现平台无关性(跨平台。APR提供了一组映射到下层操作系统的API,如果操作系统不支持某个特定的功能,APR将提供一个模拟的实现。这样程序员使用APR编写真正可在不同平台上移植的程序。

  顺利安装完成后会显示apr的lib库路径,一般都是/usr/local/apr/lib

  安装完成之后我们还需要修改环境变量和配置参数

  这里我们使用的是systemd调用jsvc来启动tomcat,所以我们直接在systemd对应的tomcat的unit文件中的ExecStart中添加一个路径参数-Djava.library.path=/usr/local/apr/lib指向apr库的路径:

  然后我们在tomcat的home目录下的conf子目录中对server.xml文件进行修改

  把端口对应的配置修改成apr:(其他端口配置也类似

  重启tomcat服务我们从tomcat的日志中就可以看到协议已经从默认的NIO变成了apr。

  NIO性能是最差的这是毋庸置疑的,如果是考虑到高并发的情况,显然异步非阻塞I/O模式的NIO和APR库在性能上更有优势,实际上NIO的性能表现也和APR不相上下,但是NIO要求Tomcat的版本要在.以上,而APR只需要.以上即可,但是APR需要额外配置库环境,相对于内置集成的NIO来说APR这个操作比较麻烦,两者各有优劣。具体使用哪个还是需要结合实际业务需求和环境进行测试才能决定。

  Tomcatwebapps目录中部署后目录结构是什么意思具体操作是什么

  你贴出来的图已经说得很详细了

  比如我是把TOMCAT安装在D:apache-tomcat-..那么。中要求的目录就是

  D:apache-tomcat-..webapps

  打开某某安装包,找到blogj文件夹,这个也写得很清楚了啊,就是告诉你找到某个文件。

  把你找的的这个文件复制到中的webapps文件夹下

  部署后结构目录,意思就是你完成步后,目录结构变成

  D:apache-tomcat-..webappblogj

  然后blogj这个文件夹下面又有blogjadmin、mon、images、js.......文件夹。

  tomcat则功能没有那么强大,它不提供ejb等支持.但如果

  在Tomcat中,你还可以利用Servlet.提供的事件监听器功能,来对你的应用或者Session实行监听。Tomcat也提供其它的一些特征,如与SSL集成到一块,实现安全传输。还有Tomcat也提供JNDI支持,这与那些JEE应用服务器提供的是一致的。说到这里我们要介绍一下通常所说的应用服务器(如WebLogic与Tomcat有何区别。应用服务器提供更多的JEE特征,如EJB,JMS,JAAS等,同时也支持Jsp和Servlet。而Tomcat则功能没有那么强大,它不提供EJB等支持。但如果与JBoss(一个开源的应用服务器集成到一块,则可以实现JEE的全部功能。既然应用服务器具有Tomcat的功能,那么Tomcat有没有存在的必要呢?事实上,我们的很多中小应用不需要采用EJB等技术,Jsp和Servlet已经足够,这时如果用应用服务器就有些浪费了。而Tomcat短小精悍,配置方便,能满足我们的需求,这种情况下我们自然会选择Tomcat。基于Tomcat的开发其实主要是Jsp和Servlet的开发,开发Jsp和Servlet非常简单,你可以用普通的文本器或者IDE,然后将其打包成WAR即可。我们这里要提到另外一个工具Ant,Ant也是Jakarta中的一个子项目,它所实现的功能类似于Unix中的make。你需要写一个build.xml文件,然后运行Ant就可以完成xml文件中定义的工作,这个工具对于一个大的应用来说非常好,我们只需在xml中写很少的东西就可以将其编译并打包成WAR。事实上,在很多应用服务器的发布中都包含了Ant。另外,在Jsp.中,可以利用标签库实现Java代码与Html文件的分离,使Jsp的维护更方便。

您可能感兴趣的文章:

相关文章