文章目录

  • Tomcat
    • java
      • java简介
      • java的体系
      • jdk简介
      • Java servlet
    • Tomcat的部署
      • 1.问题:
      • 2.方案:
      • 3.步骤:
        • 步骤一:安装软件
        • 步骤二:修改tomcat配置文件
    • 使用Tomcat部署虚拟主机
      • 1.问题:
      • 2.方案:
      • 3.步骤:
        • 步骤一:配置服务器虚拟主机
        • 步骤二:修改www.b网站的首页目录为base
        • 步骤三:跳转
        • 步骤四:配置Tomcat支持SSL加密网站
        • 步骤五:配置Tomcat日志
        • 步骤六:配置Tomcat集群
      • tomcat内存空间设置

Tomcat

提到tomcat就不能不说java,tomcat是服务器,是一种比较简单的中间件,用来把java web开发部署到tomcat中。并且tomcat本身也是java开发的

java

java简介

  • java是一种跨平台的,面向对象的程序设计语言,java技术具有卓越的通用性。高效性,平台移植性和安全性

java的体系

  • java SE(标准版)
  • java EE(企业版)
  • java ME(移动版)

jdk简介

  • jdk(java development kit)是sun针对java开发者退出的java语言的软件开发工具包

  • jdk是整个java的核心

    包括了java的运行环境

    java工具(如编译、排错、打包等工具)

    java基础的库类

  • JRE:java的运行环境,JRE是JDK的子集

  • JRE包括

    java虚拟机(jvm)

    java核心库类和支持文件

    不包括开发工具(JDK)–编译器、调试器和其他工具

Java servlet

  • servlet是java扩展web服务器功能的嘴贱规范

  • 常见的servlet容器

    IBM websphere

    Oracle weblogic

    Apache tomcat

    Redhat jboss

以上的软件只能用作java,除tomcat是免费的,其余的都是收费的

Tomcat的部署

1.问题:

部署tomcat服务器,要求如下

  • 安装部署jdk基础环境
  • 安装部署tomcat服务器
  • 创建测试页面,文件名为test.jsp,显示服务器当前时间

然后使用客户机访问web服务器验证效果

  • 使用浏览器访问Tomcat服务器的8080端口,浏览默认首页
  • 使用浏览器访问Tomcat服务器的8080端口,浏览默认测试页面

2.方案:

使用两台虚拟机,其中一台作为Tomcat服务器,另一台作为测试机

3.步骤:

步骤一:安装软件

1)部署Tomcat服务器软件

使用yum安装jdk环境

yum -y install java-1.8.0-openjdk   #安装javajdk
yum -y install java-1.8.0-openjdk-headless    #
java -version           #查看java版本

2)安装tomcat

wget https://dlcdn.apache/tomcat/tomcat-9/v9.0.52/bin/apache-tomcat-9.0.52.tar.gz   
#本次实验使用的是tomcat-9.0版本
tar -xf apache-tomcat-9.0.52.tar.gz 
mv apache-tomcat-9.0.52 /usr/local/tomcat
#这个软件不需要安装,因为tomcat本身就是java写的程序脚本
ls /usr/local/tomcat
bin          #   主程序目录    
conf         #配置文件目录   
lib         #库文件目录(类的库)
logs      #日志目录 
webapps    #页面目录(网站根目录)
temp         #临时目录
work          #自动编译目录jsp

3)启动服务

/usr/local/tomcat/bin/startup.sh   
ss -ntulp | grep java
查看端口情况,如果为8005 和8080这两个端口则启动成功,如果不是,或者只有其中一个,启动失败
8005为tomcat软件使用端口,8080为用户使用端口

提示:如果检查端口时,8005端口启动非常慢,可使用下面的命令用urandom替换random(非必须操作),tomcat启动时需要大量的随机数据(在、dev/random)

mv /dev/random /dev/random.bak
ln -s /dev/urandom /dev/random

4)验证

在浏览器输入 http://192.168.19.130:8080 (ip为Tomcat服务器的IP)

步骤二:修改tomcat配置文件

1)创建测试jsp页面

vim /usr/local/tomcat/webapps/ROOT/test.jsp
<html>
        <body>
                <center>
        Now time is: <%=new java.util.Date()%>
                </center>
        </body>
</html>

2)验证:

输入http://192.168.19.130:8080/test.jsp来验证

使用Tomcat部署虚拟主机

1.问题:

沿用上述练习,使用Tomcat部署加密虚拟主机,实现以下要求

  • 实现基于两个域名的虚拟主机,分别为www.a和www.b
  • 使用www.a域名访问的页面根路径为/usr/local/tomcat/a/ROOT
  • 使用www.b域名访问的页面根路径为/usr/local/tomcat/b/base
  • 访问www.a/test时,页面自动跳转到/var/www/html目录下的页面
  • 访问页面时支持SSL加密通讯
  • 私钥,证书存储路径为/usr/local/tomcat/conf/cert
  • 每个虚拟主机都拥有独立的访问日志文件
  • 配置tomcat集群环境

2.方案:

修改server.xml配置文件,创建两个域名的虚拟主机,修改如下两个参数模块

介绍主配置文件的主要参数
cat  /usr/local/tomcat/conf/server.xml  #tomcat的主配置文件

<Server>
 <service>
 <Connector prot=8080/>  #tomcat的默认端口
 <Connector prot=8009/>
<Engine name="Catalina" defaultHost="localhost">
 #如果输入ip,defaultHost等于谁,就打开谁
 <Host name="www.a"  appBase="a"
            unpackWARs="true" autoDeploy="true">
 </Host>
 <Host name="www.b"  appBase="b"
            unpackWARs="true" autoDeploy="true">
 </Host>
 ...           
 
 每一对<host>代表一个主机 name代表主机名字 ,appbase代表网页根路径,unpackWARs 是否自动解压war包,auwodeploy,自动部署

3.步骤:

步骤一:配置服务器虚拟主机

1)修改server.xml配置文件,创建虚拟主机

vim /usr/local/tomcat/conf/server.xml
...
<Host name="www.a"  appBase="a"
            unpackWARs="true" autoDeploy="true">
 </Host>
 <Host name="www.b"  appBase="b"
            unpackWARs="true" autoDeploy="true">
 </Host>
 ...
 整个配置文件严格区分大小写

2)创建虚拟主机对应的页面根路径

mkdir -p /usr/local/tomcat/{a,b}/ROOT
echo "AAA" > /usr/local/tomcat/a/ROOT/index.html
echo "BBB" > /usr/local/tomcat/b/ROOT/index.html

3)重启服务

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
ss -ntulp | grep java
#查看是否启动成功

4)客户端设置hosts文件,并测试

vim /etc/hosts
192.168.19.130 www.a www.b
curl www.a:8080
curl www.b:8080

步骤二:修改www.b网站的首页目录为base

1)使用docBase参数可以修改默认网站首页路径

vim /usr/local/tomcat/conf/server.xml
...
<Host name="www.a"  appBase="a"
            unpackWARs="true" autoDeploy="true">
 </Host>
 <Host name="www.b"  appBase="b"
            unpackWARs="true" autoDeploy="true">
            <Context path="" docBase="base"/>
 </Host>
 ...
 #    <Context path="" docBase="base"/> 默认路径在ROOT,加上docBase参数,修改默认路径
 mkdir /usr/local/tomcat/b/base
 echo "BASE" > /usr/local/tomcat/b/base/index.html
 /usr/local/tomcat/bin/shutdown.sh
 /usr/local/tomcat/bin/startup.sh

2)测试查看页面是否正确

步骤三:跳转

1)当用户访问http://www/test打开/var/www/html目录下的页面

vim /usr/local/tomcat/conf/server.xml
...
<Host name="www.a"  appBase="a"
            unpackWARs="true" autoDeploy="true">
            <Context path="/test" docBase="/var/www/html/" />
 </Host>
 <Host name="www.b"  appBase="b"
            unpackWARs="true" autoDeploy="true">
            <Context path="" docBase="base"/>
 </Host>
 ...
 /var/www/html/为apache的httpd默认目录,如果没有安装过httpd是没有这个目录的,所以可以自己建,也可以对上述路径进行修改
 /usr/local/tomcat/bin/shutdown.sh
 /usr/local/tomcat/bin/startup.sh

2)测试

步骤四:配置Tomcat支持SSL加密网站

在Tomcat中端口和虚拟主机并不绑定,这和httpd和nginx不同

例:httpd用80只能访问固定的网站

nginx:端口和网站也是绑定的

tomcat端口和虚拟主机并不绑定,每个网站公用8080端口,Tomcat加密做一次,所有的网站都会加密

Tomcat工作原理

用户从8080端口访问网页,通过engine来查找你想要看的网页,如果有,则导航去相应的网页,如果没有,则导航去默认网页localhost,<host 的三大参数,决定了网页位置,path,appbase,docbase>

1)创建加密用的私钥和证书文件

keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore
#-genkeypair 生成密钥对,生成只有一个文件,公钥私钥在一个文件里
#-alias  密钥别名
#-keyalg  定义密钥算法为RSA算法
#-keystore 定义密钥文件存储在/usr/lcoal/tomcat/keystore

2)再次修改server.xml配置文件,创建支持加密连接的Connector

vim /usr/local/tomcat/conf/server.xml
...
Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
            maxThreads="150" SSLEnabled="true" schme="https" secure="true" clientauth="false" sslProtocol="TLS" keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456">
#这行配置文件在主配置文件中存在,大概在86行左右,打开部分注释,修改密钥路径,密钥密码即可
#keystorePass 打开密钥的密码
#keystoreFile 密钥位置
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

3)开始测试

使用https://www.a:8443开始验证,tomcat加密之后端口改为8443,这个端口可以修改。配置文件里默认为8443

步骤五:配置Tomcat日志

Tomcat默认日志在/usr/local/tomcat/logs

catalina.时间.log 为tomcat的系统日志,这个日志每天产生一个

1)为每个虚拟主机设置不同的日志文件

vim /usr/local/tomcat/conf/server.xml
...
<Host name="www.a"  appBase="a"
            unpackWARs="true" autoDeploy="true">
            <Context path="/test" docBase="/var/www/html/" />
             <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="www.a" suffix=".log"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

 </Host>
#directory="logs"  日志存放目录
#prefix   日志文件名
#suffix   日志扩展名
#这个<valve>在之前的默认host中存在,可以复制下来,修改其中内容
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

2)开始测试

进行一次访问之后再次查看


我们发现多了一个www.a的日志

步骤六:配置Tomcat集群

配置过程

1)使用一台虚拟机配置nginx调度器

详细配置过程请见Nginx的反向代理

vim /usr/local/nginx/conf/nginx.conf
....
upstream tomcat{
        server 192.168.20.30:8080;  #使用server定义集群中的具体服务器和端口
        server 192.168.20.40:8080;
}
server {
        listen       80;
        server_name  www.a;
        location / {
          proxy_pass http://tomcat;
        }
}

通过调度之后,访问调度器的80端口,会被转发到Tomcat集群的8080端口

tomcat内存空间设置

常见内存错误:
1、java.lang.OutOfMemoryError: Java heap space
整体意思是超出内存堆空间的错误
使用Java程序从数据库中查询大量的数据时出现异常
在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的Heap size 不足2%的时候将抛出此异常信息。

2、java.lang.OutOfMemoryError: PermGen space
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的。
如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

3、OutOfMemoryError: unable to create new native thread.
无法创建新的线程。
4、java “Too small initial heap” 错误
Xmx设置小了。

具体解决方法:
#生产环境设置,假设内存空间为8G,在catalina.sh在文件头部的注释下面,加入下面的内容
下面使用的为JDK

export JAVA_OPTS='-server –Xms4096m –Xmx4096m -Xmn256m  -XX:PermSize=256m -XX:MaxNewSize=512m -XX:MaxPermSize=512m '

提示:
使用64位tomcat版本。

更多推荐

Linux下Tomcat的配置