浅谈Tomcat安装

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈Tomcat安装相关的知识,希望对你有一定的参考价值。

博文结构
tomcat介绍
Tomcat组件及其特点
安装Tomcat
自定义目录
开启JMX远程调试功能
使用https访问tomcat服务器

一.Tomcatl介绍

Tomcat是apache软件基金会项目中的一个核心项目,有apache和sun其他一些公司及个人共同开发而成的Tomcat服务器是一个免费的开放源代码的web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是多的场合下被普遍使用,是开发和调试jsp程序的首选。
可以这样认为,当一台服务器配置好apache服务器以后,可以利用apache服务器来响应我们的html页面的访问请求,而tomcat是 apahce 服务器的扩展,当你运行tomcat的时候实际上是作为一个apache独立的进程单独运行的,apache服务器为html页面提供服务的,而tomcat是运行jsp页面和servlet,另外tomcat也能具有处理html页面的功能,但是处理静态的能力没有apache处理好。

二.Tomcat组件及其特点

  • tomcat组件

servlet(应用程序或者容器)是java提供的用于开发web服务器应用程序的一个组件,运行在服务器端,有servlet用于生成动态页面内容,servlet是平台立的java类,编写一个servlet,实际上就是安装servlet规范编写一个java类

  • 什么是servlet ?

Tomcat 处理请求和响应的过程是由servlet的程序来完成的,并且servlet是为例解决实现动态页面而衍生的东西,与我们之前了解的nginx或者apache想要实现动态页面需要和php服务器沟通的过程差不多,可以把servlet比作成php

技术图片

Tomcat 是web应用服务器,是一个servlet/jsp容器,tomcat作为servlet容器,负责处理客户请求,并将servlet的响应传送给客户,而servlet是一种运行在java语言的服务器上的组件,servlet最常见的用途是扩展java web服务器功能,提供非常安全的,可以移植的(打包网页代码就可以在另外一个环境中运行,如linux系统跟windows环境),易于使用cgi替代品。

  • Tomcat处理数据的流程

1、浏览器发送请求数据
2、tomcat收到服务器的请求数据,由servlet容器处理并进行解析,并且把客户端的数据请求request改变成servlet request 交给后端的servlet 实例(或者或叫对象)实例收到客户端的请求数据的请求对象,进行出处理客户端的请求,处理完成后将数据响应给servlet容器,响应给servlet容器叫做servlet response。
3、Servlet收到的实例的响应数据交给客户端(如图)
技术图片
Servlet(tomcat)容器与servlet实例需要通过java servlet api接口进行通信,api接口是由开发人员在写代码的时候定义或者编写的
4.servlet容器将收到的响应数据交给客户端

  • Servlet和jsp的区别

Servlet在Java代码中可以通过HttpServletResponse对象动态输出HTML内容;

JSP在静态HTML内容中嵌入Java代码,然后Java代码在被动态执行后生成HTML页面;

  • tomcat的特点

运行时占用的资源小,扩展性好,支持负载均衡和邮件服务器等开发应用系统常用的功能

三.安装tomcat

下载Tomcat所需的软件包

  • 安装Tomcat需要系统Java环境1.8版本以上,Centos 7默认就已经支持Java环境1.8版本,由于现在大部分使用还是Centos 6的系统,,由于本人采用的Centos 7系统,所以首先需要卸载JDK环境。
[root@localhost ~]# rpm -qa | grep jdk  
查询已安装的jdk包
copy-jdk-configs-1.2-1.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
[root@localhost ~]# rpm -e java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64 java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64  java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64 --nodeps
卸载系统自带的jdk环境
[root@localhost ~]# tar zxf jdk-8u211-linux-x64.tar.gz -C /usr/local/
[root@localhost ~]# vim /etc/profile
//编写系统环境变量,在最后一行加以下内容
export  JAVA_HOME=/usr/local/jdk1.8.0_211              //指定java的路径
export  JRE_HOME=/usr/local/jdk1.8.0_211/jre           //java运行环境
export  CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
                                                                                    //声明java中的类,类就是一类事务的属性,如各种盖饭最终他们的属性是饭
export  PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
                                                                                    //将定义的变量添加到系统环境变量中
[root@localhost ~]# source /etc/profile                        //重新加载系统环境变量文件

[root@localhost ~]# tar zxf apache-tomcat-8.5.35.tar.gz 
[root@localhost ~]# mv apache-tomcat-8.5.35 /usr/local/tomcat
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh  启动tomcat
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_211/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]# netstat -anpt | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      16320/java      
  • 现在可以用客户端访问测试

技术图片

  • Tomcat目录说明
    [root@localhost ~]# ls /usr/local/tomcat/
    bin conf lib logs README.md RUNNING.txt webapps
    BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
Bin:存放windows或linux平台上启动或者关闭tomcat的脚本文件
Conf:存放tomcat服务器的全局配置文件,其中最重要的是server.xml和web.xml
Lib:tomcat运行需要的库文件(jars)
Logs:tomcat运行时产生的日志文件
Temp:临时文件存放目录
Work:tomcat的工作目录,存放tomcat运行时的编译配置文件
Webapps:网页文件存放路径
Tomcat常用配置文件说明
Server.xml:tomcat的主配置文件,可以设置端口号,设置域名或者IP
Web.xml: 缺省的web app配置(也可以理解为是实现主配置文件没有定义到的功能:如目录遍历,定义错误页面类型)
Tomcat-users.xml:用来配置管理tomcat的用户与权限
  • tomcat中server.xml文件结构

技术图片

Server:代表整个容器,实例的顶层元素,一个配置文件中只能有一个server元素,可以包含多个service。比如:

<Server port="8005" shutdown="SHUTDOWN">
//表示关闭Tomcat,使用telnet连接8005,输入shutdown指令

Service:提供完整jvm的独立组件,jvm表示Java虚拟机,是一个虚构出来的虚拟机,可以包含一个engine包含多个connector;

  <Service name="Catalina">
//代表接受所有tomcat接受的请求,如果是Service name="apache"则表示接受所有apache转发过来的请求

Connector:接口定义,负责接受客户端的请求,以及向客户端返回响应的结构;

<Connector port="8080" protocol="HTTP/1.1"
                     connectionTimeout="20000"
                     redirectPort="8443" />
//port:接受数据的端口;protocol:设置http协议;
//Connection Timeout:与客户端的连接超时时间,-1代表不限制客户端的连接时间;
//Redirectport :当客户端请求是https将请求转发到8443去

Engine:处理客户端的请求,可以包含多个hots;

<Engine name="Catalina" defaultHost="localhost">

//name:是引擎名称,处理客户的请求默认去寻找localhost
Host:定义的虚拟主机,为特定的虚拟主机处理所有的客户端请求;

  <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">

Context:运行在虚拟主机中的单个web应用;

  • Tomcat处理http请求过程

技术图片

过程

①用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得;
②Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应;
③Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host;
④Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有的Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理);
⑥path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL PATTERN为*.jsp的Servlet,对应于JspServlet类;
⑥构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost().执行业务逻辑、数据存储等程序;
⑦Context把执行完之后的HttpServletResponse对象返回给Host;
⑧Host把HttpServletResponse对象返回给Engine;
⑨Engine把HttpServletResponse对象返回Connector;
⑩Connector把HttpServletResponse对象返回给客户Browser;

四.自定义目录

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml 
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
在zhe这个Hostname下添加以下内容
<Context path = "/xws" docBase = "/data/project" debug = "0" reloadable  = "false" crossContext = "true">     
        </Context>
  • 相关解释
Path:指出访问的路径
docBase:指定存放的路径
Debug:指定debug的等级为0输出信息最少,9提供最多信息
Reloadable:为ture时当web.xml文件有改动的时候自动重新加载,不用重启服务
CorssContext:为ture时表示不同的context共享一个session(会话池)
[root@localhost ~]# mkdir -p /data/project
[root@localhost ~]# vim /data/project/index1.jsp
aaaaaaa
[root@localhost ~]# vim /data/project/index2.jsp
bbbbbbb
  • 开启tomcat目录遍历
[root@localhost ~]# vim /usr/local/tomcat/conf/web.xml
大约在112行中把false改为true

技术图片

  • 重启服务
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh   关闭服务
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_211/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh        启动服务
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_211/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
  • 客户端访问验证

技术图片

技术图片

五.自定义监控页面

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml 
//在host中添加
 <Context path="/jiankong" docBase="/jk/jiankong" debug="0" reloadable="    false" crossContext="true"/>

技术图片

[root@localhost /]# mkdir /jk/jiankong -p
[root@localhost /]# vim /jk/jiankong/index.jsp
<%
Runtime rtm = Runtime.getRuntime();
long mm = rtm.maxMemory()/1024/1024;
long tm = rtm.totalMemory()/1024/1024;
long fm = rtm.freeMemory()/1024/1024;

out.println("JVM memory detail info :<br>");
out.println("Max memory:"+mm+"MB"+"<br>");
out.println("Total memory: "+tm+"MB"+"<br>");
out.println("Free memory: "+fm+"MB"+"<br>");
out.println("Available memmory can be used is :"+(mm+fm-tm)+"MB"+"<br>");
    %>
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh                  //重启tomcat服务
  • 访问如下

技术图片

六.开启JMX远程调试功能

[root@localhost /]# vim /usr/local/tomcat/bin/catalina.sh 

#----- Execute The Requested Command -----------------------------------------        //填写的内容必须在这行下面大约在309行

CATALINA_OPTS=" $CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"
[root@localhost /]# cd /usr/local/jdk1.8.0_211/jre/lib/management/
[root@localhost management]# cp jmxremote.password.template jmxremote.password
[root@localhost management]# vim jmxremote.password  //在最后一行添加,定义用户为xws,密码为123456,使用“wq!”强制保存退出
xws     123456
[root@localhost management]# vim jmxremote.access  //定义用户权限的文件
xws   readwrite                                        //在倒数第三行。把原有的用户改为xws
[root@localhost management]# chmod 600 jmxremote.access 
[root@localhost management]# chmod 600 jmxremote.password
[root@localhost management]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost management]# /usr/local/tomcat/bin/startup.sh 
[root@localhost ~]# netstat -anpt | grep 8888
tcp6       0      0 :::8888                 :::*                    LISTEN      58760/java   
//确认刚才定义的端口8888在监听
  • 由于其为图像化界面,所以需要在桌面环境下执行以下命令
[root@localhost /]# . /etc/profile
更新环境变量
[root@localhost /]# jconsole

技术图片

技术图片

技术图片

七.配置使用https访问tomcat服务器

[root@localhost /]# keytool -genkey -v -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/conf/tomcat.keystore -validity 36500
//alias:别名,这里设置为tomcat;
//keyalg:证书算法,RSA;
//validity:证书有效期,单位为天
//keystore:指定证书存放路径,可以自定义

输入密钥库口令:  
再次输入新口令: 
您的名字与姓氏是什么?
  [Unknown]:  xws
您的组织单位名称是什么?
  [Unknown]:  aaa
您的组织名称是什么?
  [Unknown]:  bbb
您所在的城市或区域名称是什么?
  [Unknown]:  ccc
您所在的省/市/自治区名称是什么?
  [Unknown]:  wwwe
该单位的双字母国家/地区代码是什么?
  [Unknown]:  qwe
CN=xws, OU=aaa, O=bbb, L=ccc, ST=wwwe, C=qwe是否正确?
  [否]:  y

正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 36,500 天):
     CN=xws, OU=aaa, O=bbb, L=ccc, ST=wwwe, C=qwe
输入 <tomcat> 的密钥口令
    (如果和密钥库口令相同, 按回车):  
[正在存储/usr/local/tomcat/conf/tomcat.keystore]

Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore /usr/local/tomcat/conf/tomcat.keystore -destkeystore /usr/local/tomcat/conf/tomcat.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml   //可以添加也可以从原有的内容稍作修改即可
 <Connector port="443"   protocol="org.apache.coyote.http11.Http11NioProtocol"                   //将原本的8443改为443
               maxThreads="150" SSLEnabled="true"
                keystoreFile="/usr/local/tomcat/conf/tomcat.keystore"                   //指定证书存放路径
               keystorePass="123456">                      //指定生成证书所输入的密码
     </Connector>

[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh      
  • 访问如下:

技术图片

以上是关于浅谈Tomcat安装的主要内容,如果未能解决你的问题,请参考以下文章

安全加固-浅谈Tomcat升级

浅谈Tomcat接收到一个请求后在其内部的执行流程(源码)

浅谈Mybatis

浅谈Tomcat和Servlet

浅谈Tomcat的启动流程(源码级别)

浅谈tomcat中间件的优化