Tomcat安装与配置优化


title: Tomcat安装与配置

date: 2019-09-21 12:16:41
update:2020-03-11 9:30:06

categories:

  • JavaEE

tags:

  • Tomcat
  • Java
  • Web

1. Tomcat下载与安装

Tomcat是Java领域注明的开源Web容器,具有简单、易用、稳定等特点,即可以为个人开发者使用,也可以作为商业产品发布。Tomcat不仅提供了Web容器的基本功能,而且还可以支持JAAS和JNDI绑定等。

1.1 Tomcat服务器下载

Tomcat采用纯Java实现,具有平台无关性,在Windows/类Unix系统上具有相同的运行状态。以Windows为例,介绍Tomcat的下载与配置

  1. 登录Tomcat官网https://tomcat.apache.org,在页面左侧可以看到不同的Tomcat版本如图1-1所示,在正文显示了不同版本的的最新发型版本及其下载链接。为了能够使用最新的Servlet规范,建议采用了最新的Tomcat9.0.X版本系列,而且本文也采用Tomcat9.0.X作为讲解。

Tomcat8.0及以上版本支持Servlet3.1规范,而且最新的版本能够更好的支持一些新的规范

图1-1

Tomcat9.0.X的最新版本是9.0.26,建议下载该版本或读者当前看到的更新版本。Windows平台根据自身32/64位系统分别选择对应的32位或64位Windows压缩包,Linux选择tar.gz,如图1-2所示,显示了对应的下载选项。

不建议下载安装文件,安装文件的Tomcat在启动之后看不到控制台的输出日志信息,不便于对系统进行运行状态的评估。

图1-2
2. 解压下载的压缩包,解压缩之后的目录结构如下所示。
- bin:存放Tomcat的启动和关闭命令的路径
- conf:存放Tomcat的配置信息
- lib:存放Tomcat服务器的核心类库(jar包),针对Tomcat的第三方扩展包也需复制到该目录下
- logs:存放Tomcat每次运行产生的日志信息
- temp:存放Tomcat的Web应用运行过程中生成的临时文件
- webapps:存放Tomcat中部署的Web应用。将,Tomcat能够自动部署存放在该路径下的Web应用或war文件
- work:存放Web应用在运行过程中,编译生成的class文件。此文件夹及内容可以删除,Tomcat每次启动时,能够再次创建该路径
- README等相关文档

1.2 安装Tomcat

Tomcat运行在Java虚拟机之上,所以需要Java的运行环境即JRE环境。开发者可如前文所示配置JDK环境变量包括JAVA_HOME,CLASSPATH及path路径变量。

  1. 启动Tomcat。在Windows平台中,开发者运行bin目录下的startup.bat文件即可启动Tomcat,在类Unix平台中,在bin目录下运行bash startup命令即可启动Tomcat。

  2. 查看Tomcat。启动Tomcat之后,打开浏览器,在地址栏输入http://127.0.0.1:8080,然后回车,即可看到如图1-3所示的界面,表示Tomcat安装成功。

图1-3

  1. Tomcat安装成功之后,配置选项都采用了默认的配置。事实上,我们应该对Tomcat的配置进行修改,否则会造成一系列的问题。例如如果当一台服务器有多个Tomcat,则因为先前的Tomcat启动占用端口的原因,后续Tomcat将无法启动。下面一章节将对此进行详细的介绍。

2. 配置Tomcat

Tomcat作为一个免费Web服务器,提供了图形化的界面来部署和监控Web应用。但是对于一个开发者而言,要透过交互界面理解Tomcat配置的本质。因此,建议通过修改配置文件的方式来对Tomcat进行管理。

2.1 Tomcat端口配置

Tomcat默认的服务端口是8080,可以通过配置文件修改该服务端口,甚至监听多个端口来提供服务。

如上一节的描述,Tomcat的配置文件都存放在conf目录下,存放端口配置的文件为此目录下的server.xml。采用记事本打开server.xml,查找Connector节点,找到如下所示代码

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

其中,8080就表示Tomcat对外提供服务的端口,对此端口进行修改,便可改变对外提供服务的地址,为了避免与公用端口的冲突,建议修改为1024~65535之间的端口。此处采用了取巧的做法,将此处修改为80端口

提供Http服务的Web服务器,默认的访问端口是80端口,

修改成功之后,重启Tomcat,在浏览器地址里面输入http://127.0.0.1:80或者http://127.0.0.1便可以看到如图1-3所示的界面,表明Tomcat修改成功。

在默认情况下,Tomcat出于安全考虑,不会列出Web应用根路径下的所有页面。然而,在Web应用开发阶段,希望Tomcat能够列出Web应用根路径下的所有页面,方便于进行程序的调试。为了实现这样的功能,可以打开conf目录下的web.xml文件,找到其中的listings参数,该参数默认是false,将其改为true,即可让Tomcat列出Web应用根路径下的所有页面。

 <init-param>
        <param-name>listings</param-name>
        <param-value>true</param-value>
    </init-param>

2.2Tomcat后台控制

对于一个应用程序而言,通常需要至少提供两种基础的管理功能,分别为:

  1. 应用状态监控功能
  2. 应用管理功能

同样的,Tomcat作为一款Web服务器,自身也是一款应用,其提供了对其之上的Web应用的状态监控功能,Web应用部署功能和对其身自身的管理功能。三个功能依次叠加,对应了Tomcat的三种管理角色,分别为Server Staus, Manager App和Host Manager。

如图2-1所示,分别点击右上角的三个不同按钮,输入对应的管理员信息,可以进入对应的控制管理界面。

图2-1

Manager作为一个对Tomcat进行管理的角色,其自身就是一个Web应用。根据第一节的介绍,Web应用存放在Tomcat的webapps目录下。进入webapps/manager/WEB-INF目录下,打开web.xml文件,可以找到如下的内容。

<security-constraint>
<web-resource-collection>
  <web-resource-name>HTML Manager interface (for humans)</web-resource-name>
  <url-pattern>/html/*</url-pattern>
</web-resource-collection>
<auth-constraint>
  <role-name>manager-gui</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
  <web-resource-name>Text Manager interface (for scripts)</web-resource-name>
  <url-pattern>/text/*</url-pattern>
</web-resource-collection>
<auth-constraint>
   <role-name>manager-script</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
  <web-resource-name>JMX Proxy interface</web-resource-name>
  <url-pattern>/jmxproxy/*</url-pattern>
</web-resource-collection>
<auth-constraint>
   <role-name>manager-jmx</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
  <web-resource-name>Status interface</web-resource-name>
  <url-pattern>/status/*</url-pattern>
</web-resource-collection>
<auth-constraint>
   <role-name>manager-gui</role-name>
   <role-name>manager-script</role-name>
   <role-name>manager-jmx</role-name>
   <role-name>manager-status</role-name>
</auth-constraint>
</security-constraint>

通过此段的XML描述信息,可以看到,可以通过不同的manager角色来达到对Tomcat应用的不同控制程度。对于普通开发者而言,需要能够访问匹配的/html/*、/status/*的资源,因此分配一个manager-gui角色即可。

同样的,对Tomcat用户的配置,则需要修改conf配置目录下的tomcat-users.xml文件。默认的,如下所示,该文件内只存储了基本的配制结构及注解说明。

<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
          version="1.0">
<!--
  NOTE:  By default, no user is included in the "manager-gui" role required
  to operate the "/manager/html" web application.  If you wish to use this app,
  you must define such a user - the username and password are arbitrary. It is
  strongly recommended that you do NOT use one of the users in the commented out
  section below since they are intended for use with the examples web
  application.
	-->
<!--
  NOTE:  The sample user and role entries below are intended for use with the
  examples web application. They are wrapped in a comment and thus are ignored
  when reading this file. If you wish to configure these users for use with the
  examples web application, do not forget to remove the <!.. ..> that surrounds
  them. You will also need to set the passwords to something appropriate.
	-->
<!--
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
  <user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
  <user username="role1" password="<must-be-changed>" roles="role1"/>
	-->
</tomcat-users>

如注释所揭示的,为了能够登陆Manager控制台,需要在tomcat-users节点下添加属于manager-gui的角色即可。因此,此处新增用户和密码及结构如下:

<tomcat-users>  
	<role rolename="manager-gui"/>
		<user username="abbottkilig" password="abbottkilig" roles="manager-gui"/>
</tomcat-users>

配置中新增了一个用户,用户名和密码都是abbottkilig,角色属于manager-gui。此时,可以在图2-1显示的对话框中分别属于用户名和密码进入manager控制台,登陆成功后的界面如图2-2所示。

图2-2

如图2-2所示,页面分别上中下三个部分。

  • 上部分页面可以监控到所有部署在该Web服务器下的Web应用,从左到右依次显示了Web应用的名称,版本,名字,运行状态等,而且在右边显示了可以对Web应用进行控制的命令,包括启动、停止、重新加载、卸载四个命令。

  • 中间部分显示了对Web服务的部署信息。Tomcat提供了两种部署Web应用的方式,一种是将整个路径部署成为Web应用;另一种是将war包部署成web应用。

2.3Web应用部署

在Tomcat中,部署Web应用除了上一节中所描述的在Manager部署应用的两种方式外,Tomcat还支持增加自定义的Web部署文件和修改server.xml文件来部署应用,接下来将分别对这几种方式进行讲解。

2.3.1 Tomcat自动部署

Tomcat的自动部署方式是一种最简单、最常用的方式,只需要将一个Web应用或者应用打包成的War包复制到Tomcat的webapps下,系统就会自动把该应用部署到Tomcat

以war包的部署为例,如图2-3所示,在Tomcat正常运行状态或重新启动Tomcat的情况下,系统会自动解压war包生成对应的工程。例如,此处我们添加了demo.war,自动生成了demo文件夹,通过浏览器访问http://127.0.0.1/demo便可看到demo项目的正常运行

图2-3

2.3.2 控制台部署

采用控制台部署Web应用,只需要在如图2-4中的deploy管理界面的输入对应的访问路径和Web应用程序路径即可。

图2-4

如图所示的方式输入后,单机“deploy”按钮,将会在Tomcat的webapps路径下看到一个demo的文件夹,且该文件夹的内容和D:/project/demo文件夹中的内容完全相同。这说明利用控制台部署Web应用,其本质依旧是利用Tomcat的自动部署方式。

2.3.3 自定义Web文件部署

此部署方式相对前两种而言,略显复杂。需要在conf配置目录下的Catalina
目录下的localhost文件下,新建部署Web应用的配置文件,该文件的文件名将作为Web应用的虚拟路径。例如在conf/Catalina/localhost文件下新增一个demo.xml文件,该文件的内容如下:

<Context docBase="D:/project/demo" debug="0" privileged="true">
</Context>

重启Tomcat之后,Tomcat会将D:/project/demo路径下的demo文件夹部署称为Web应用。可以通过浏览器http://127.0.0.1/demo访问进行访问。

2.3.4 修改server.xml文件部署

在server.xml文件中找到Host节点,默认的配置结构如下:

<Host name="localhost"  appBase="webapps"
     
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

  </Host>

为了能够成功部署Web应用,在其中添加Web映射

<Context docBase="D:/project/demo" path="/demo" reloadable="true"/>

此时,通过http://127.0.0.1/demo也可是实现对Web应用进行访问

server.xml是Tomcat的核心配置文件,修改此文件可能会破坏Tomcat的系统运行,不建议采用此方式进行部署。

此时,通过http://127.0.0.1/demo也可是实现对Web应用进行访问

server.xml是Tomcat的核心配置文件,修改此文件可能会破坏Tomcat的系统运行,不建议采用此方式进行部署。

3. 优化Tomcat

3.1 禁用AJP服务

AJP(Apache JServer Protocol) V13协议是面向包的,WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到Servlet容器,并且在多个请求和响应周期过程会重用连接。

在这里插入图片描述

一般使用NGINX+Tomcat架构,所以用不到AJP协议,所以把AJP连接器禁用

修改conf下的server.xml文件,将AJP服务禁用

<!-- Define an AJP 1.3 Connector on port 8009 -->
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

3.2 修改执行器为线程池

在Tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高服务性能,需要修改server.xml文件

在这里插入图片描述

3.3 调整运行模式

Tomcat提供了三种I/O服务模式,分别为:

  • bio:默认的模式,性能低下,没有经过 任何优化处理和支持

  • nio(new i/o):提供非阻塞I/O操作,拥有比传统I/O操作更好的兵法运行性能

  • apr:安装最困难, 从操作系统级别解决异步IO问题,大幅度提高性能

将connector修改为费阻塞I/O模式,提高服务性能

<Connector executor="tomcatThreadPool"
               port="80" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />

重启Tomcat之后,能够在Tomcat的status页面将能够看到对应的更改信息。

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值